[hellogcc] Re: [hellogcc] gccint中GTY一个示例,觉得前后矛盾

  • From: Yousong Zhou <yszhou4tech@xxxxxxxxx>
  • To: 2029352818@xxxxxx
  • Date: Fri, 29 Aug 2014 13:18:07 +0800

2014-08-28 20:27 GMT+08:00 perr <2029352818@xxxxxx>:
> 位置: https://gcc.gnu.org/onlinedocs/gccint/GTY-Options.html#GTY-Options
>
> length ("expression")选项一节的示例如下:(建议搜索定位)
>
>   struct GTY(()) rtvec_def {
>     int num_elem;         /* number of elements */
>     rtx GTY ((length ("%h.num_elem"))) elem[1];
>   };
>
> 假如我定义一个结构变量:
>
> struct rtvec_def t;
>
> 效果应该是,它会根据t.num_elem来构造t.elem, 但现在就是在构造t,
> t.num_elem都还没构造好呢,即使构造了也是0才对,在这个语句中,构造长度为0的t.elem[]和语义又不符,它的长度至少是1呀.

关键是 struct rtvec_def 不是这么用的。C中所谓动态长度数组,一般先声明为指针,然后根据 num_elem 分配空间。

链接 [0] 里的ggc_alloc_rtx是个栗子,搜索源码[1,2,3] 应该也能发现,代码中基本只用typedef的 rtvec,这是指针类型。

[0] https://gcc.gnu.org/ml/gcc/2002-06/msg00950.html
[1] typedef struct rtvec_def *rtvec,
https://github.com/gcc-mirror/gcc/blob/master/gcc/coretypes.h#L77
[2] #define ggc_alloc_rtvec_sized(NELT),
https://github.com/gcc-mirror/gcc/blob/master/gcc/ggc.h#L309
[3] rtvec_alloc(), https://github.com/gcc-mirror/gcc/blob/master/gcc/rtl.c#L147


               yousong

Other related posts: