如何获取BIT_FIELD_REF引用的位字段的名称?

时间:2012-02-17 14:26:15

标签: gcc compiler-construction internal

我想从GENERIC表示中获取声明它的字段的名称。我有一个BIT_FIELD_REF树,它的DECL_NAME为零。例如,

struct {
    int a;
    unsigned b:1;
} s;

...
if (s.b)
    ...

对于s.b我会得到一个BIT_FIELD_REF并且没有明显的方法来获得“b”,这是该字段的原始名称。怎么做?

2 个答案:

答案 0 :(得分:1)

从GDB中尝试call debug_c_tree (tree_var)call debug_tree (tree_var),看看是否知道该名称。如果是这样,请对漂亮的打印机进行逆向工程。

答案 1 :(得分:0)

我究竟做了什么:调查tree-dump.c中的内容我最终了解到,他们所知道的位字段的名称来自struct的DIE并且难以跟踪。

然后我决定从BIT_FIELD_REF参数0(引用结构)类型中获取名称,即RECORD_TYPE,它存储所有字段的大小和偏移量。

问题是要理解BIT_FIELD_REF没有引用位本身:它像BIT_FIELD_REF & INTEGER_CST一样使用,其中常量就像掩码一样。在理解了这一点之后,我迅速计算了偏移并从类型中获得了名称。