struct: link to next field

patrick jayet jayetp@cse.unsw.edu.au
Tue Dec 20 06:34:00 GMT 2005


Hi everybody,

I am working on the intermediary tree representation of GCC right now 
(writing a parser for it). I have a question regarding that.

If I declare a struct containing 2 fields like that in C:

   struct foo {
     int var_a;
     char var_b;
   } afoo;

   afoo.var_a = 0;
   afoo.var_b = 'a';

the abstract syntax tree I get (with -fdump-tree-original) does not 
include information about the 2nd field (var_b) at the point of 
declaration of the struct type. The declaration of 'var_b" is done only 
at the point where I use it. That can be seen from the following struct 
type declaration (in intermediary representation):

@147    var_decl         name: @149     type: @150     scpe: @1
                          srcp: InitAutoTestA.c:37      size: @6
                          algn: 32       used: 1
@149    identifier_node  strg: "afoo    " lngt:4
@150    record_type      name: @153     size: @6       algn: 32
                          struct         flds: @154     fncs: @155
                          binf: @156
@152    expr_stmt        line: 40       expr: @159     next: @160
@153    type_decl        name: @161     type: @150     scpe: @1
                          srcp: InitAutoTestA.c:34      artificial
@154    field_decl       name: @162     type: @7       scpe: @150
                          srcp: InitAutoTestA.c:35      public
                          size: @10      algn: 32       bpos: @163
@155    function_decl    name: @164     type: @165     scpe: @150
                          srcp: InitAutoTestA.c:34      artificial
                          operator       assign         member
                          public         args: @166     undefined
                          static
@156    binfo            type: @150
@161    identifier_node  strg: "foo     " lngt:3
@162    identifier_node  strg: "var_a   " lngt:5
@163    integer_cst      type: @13      low : 0


the flds field of the record_type (@150) points to the field_decl of 
var_a (@154), but there is not link to the field_decl of var_b at that 
place.

However the GCC documentation (section 9.4.2 Classes) says: "Almost all 
non-function members are available on the TYPE_FIELDS list. Given one 
member, the next can be found by following the TREE_CHAIN." But I see no 
chain or list in the present case.

I am using gcc version 3.3.5 (under Debian Linux).

Has anyone an idea why there is no link to the next field?

Cheers,

Pat



More information about the Gcc mailing list