我想从GENERIC表示中获取声明它的字段的名称。我有一个BIT_FIELD_REF树,它的DECL_NAME为零。例如,
struct {
int a;
unsigned b:1;
} s;
...
if (s.b)
...
对于s.b我会得到一个BIT_FIELD_REF并且没有明显的方法来获得“b”,这是该字段的原始名称。怎么做?
答案 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
一样使用,其中常量就像掩码一样。在理解了这一点之后,我迅速计算了偏移并从类型中获得了名称。