Strange structure declaration in ASG

Guillaume guillaume.thouvenin@polymtl.ca
Tue Nov 13 12:08:00 GMT 2001


Hello,

 I'm student and I'm trying to build a tool which use the ASG given by g++
using the option -fdump-ast-original. Actually I build a basic parser
which reads the file file.c.original and stores the ASG in memory in a
hash table where the key is the number of a node. I also build a visitor which
visits the ASG in memory and extracts a CFG for some analysis. My problem
is the following (my tool works with C files):

The information given by gcc (g++ -fdump-ast-original file.c) is strange
(I found but I'm not an expert) regarding the description of structure.
For exemple for this sample:

-----
typedef struct {
        int entier;
        char car;
} structure;
-----

it produced :

-----
...
@29     record_type      name: @32      size: @5       algn: 32
                         struct         flds: @33      fncs: @34
                         binf: @35
@30     var_decl         name: @36      type: @6       scpe: @1
                         srcp: simple3.c:17            size: @12
                         algn: 32       used: 1
@31     expr_stmt        line: 19       expr: @37      next: @38
@32     type_decl        name: @39      type: @29      srcp: simple3.c:7
@33     field_decl       name: @40      type: @6       scpe: @29
                         srcp: simple3.c:5             public
                         size: @12      algn: 32       bpos: @41
@34     function_decl    name: @42      type: @43      scpe: @29
                         srcp: simple3.c:3             artificial
                         member         public         operator
                         args: @44      undefined      static
@35     binfo            type: @29
@36     identifier_node  strg: j        lngt: 1
@37     modify_expr      type: @6       op 0: @45      op 1: @46
@38     expr_stmt        line: 20       expr: @47      next: @48
@39     identifier_node  strg: structure               lngt: 9
@40     identifier_node  strg: entier   lngt: 6
@41     integer_cst      type: @10      low : 0
@42     identifier_node  operator
@43     method_type      unql: @49      size: @5       algn: 64
                         clas: @29      retn: @50      prms: @51
@44     parm_decl        name: @52      type: @53      srcp: simple3.c:3
                         artificial     argt: @53      size: @54
                         algn: 32       used: 0        register
@45     component_ref    op 0: @23      op 1: @33
@46     integer_cst      type: @6       low : 5
@47     modify_expr      type: @6       op 0: @30      op 1: @55
@48     expr_stmt        line: 22       expr: @56      next: @57
@49     method_type      size: @5       algn: 64       clas: @29
                         retn: @50      prms: @51
@50     reference_type   size: @54      algn: 32       refd: @29
@51     tree_list        valu: @58      chan: @59
@52     identifier_node  strg: this     lngt: 4
@53     pointer_type     qual: c        unql: @58      size: @54
                         algn: 32       ptd : @29
@54     integer_cst      type: @10      low : 32
@55     integer_cst      type: @6       low : 3
@56     modify_expr      type: @6       op 0: @60      op 1: @61
@57     scope_stmt       line: 24       begn           null
                         clnp           next: @62
@58     pointer_type     size: @54      algn: 32       ptd : @29
@59     tree_list        valu: @63      chan: @7
...
-----

So, I see the structure (as a record_type), I see one field "entier"
but, there is no trace of the second field "car".

For my analysis, I need to recover this information at the beginning of
the ASG not when using it ("car" appeared in the ASG when it is used). So,
I try to look at gcc source code to see if I can modify the source to
recover  this information during the dump of the ASG. I found where
the dump is started in the code source (c-dump.c : "dump_begin()") but, I
didn't understand exactely what functions splay_tree_* do and
where it is declared?

So if someone can give me some hints on how to modify source code to dump
more information about structures declaration, and about what function
splay_tree_* do it will be nice.

Thanks for your help,
Sorry for my english,

---
Guillaume Thouvenin
Gasta - Gcc Abstract Syntax Tree Analysis
http://gasta.sf.net




More information about the Gcc-help mailing list