При использовании Csmith генератора случайных программ на языке C я попытался добавить расширение переменной языка GNU C атрибут ((vector_size (16))) для переменной.
static uint64_t func_1(void)
{/* block id: 0 */
uint64_t l_6 __attribute__ ((vector_size (64))) = 0xCD2466E9F08664A1LL;
int32_t *l_7 /*__attribute__ ((vector_size (16)))*/ = (void*)0;
int32_t *l_8 /*__attribute__ ((vector_size (16)))*/= &g_9;
int32_t *l_10 = &g_5.f7;
int32_t **l_11[10][8][3] = {{{&l_10,&l_10,&l_10},{&l_7,&l_8,&l_8},{&l_8,&l_8,(void*)0},{&l_7,&l_8,&l_10},{&l_8,&l_7,&l_10},{&l_8$
int32_t *l_13 = &g_9;
int i, j, k;
(*l_8) |= (g_2[3] , (safe_rshift_func_int16_t_s_s(0L, (g_5 , (l_6 != g_5.f2)))));
(*l_10) |= ((g_12 = l_10) != (void*)0);
l_13 = &g_9;
return (*l_13);
}
где, поскольку есть # define, предусмотрено для int8_t (например, знаковый символ), int16_t (как short) и так далее.
и safe_rshift_func_int16_t_s_s - это внутренне определенная функция.
компиляция вышеуказанной программы с помощью gcc выдает следующие ошибки:
sam.c: In function ‘func_1’:
sam.c:53:56: error: incompatible types when initializing type ‘__vector(8) long long unsigned int’ using type ‘long long unsigned int’
uint64_t l_6 __attribute__ ((vector_size (64))) = 0xCD2466E9F08664A1LL;
^~~~~~~~~~~~~~~~~~~~
Неправильно ли установлен атрибут?
Я пытался обратиться к документации с портала GCC, связанной здесь , но не смог точно понять, как правильно использовать этот атрибут, пожалуйста, кто-нибудь может указать на это?
Существуют ли какие-либо ограничения для использования этого атрибута?
Спасибо сообществу. :)
Я пытался искать в SO и в Интернете, но большинство из них говорят об использовании typedef для своих решений.