使用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(如带符号的char),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;
^~~~~~~~~~~~~~~~~~~~
属性放置错误吗? 我尝试参考链接到here的GCC门户网站的文档,但无法确切了解此属性的正确用法,请有人指出吗?
在使用此属性方面有任何限制吗? 谢谢社区。 !:)
我尝试搜索SO和Web,但大多数人都在谈论使用typedef作为解决方案。