AW: dump-translation-unit format

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

Sorry for my double posts on this list and answering to the wrong persons. I
had/have major trouble with my mail client and anti-spam. I hope that
everything works as expected now.

> > I'm currently working on the output of gcc/g++ -fdump-translation-
> unit
> > to do source code analysis. I found several references that the 
> > internal ast should include nodes for for, while and do constructs.
> > But I can't find those nodes in the dumped files. Sometimes there 
> > are such FOR_STMT nodes when I compile large units, but when 
> > compiling a small test unit containing not much more than a for 
> > loop, this loop isn't included in the dump. Instead there is a 
> > GOTO_EXPR where I
> would
> > expect the for loop. This holds for other loops and conditional 
> > expressions as well. All FOR_STMT nodes I encountered where not from
> my custom code, but from templates from system includes.
> >
> > Are there any optimizations done on the tree before dumping it, and 
> > how can I prevent this to get an unoptimized tree? Are there other 
> > possibilities to get those loop nodes? I need them to check whether 
> > function calls are done in loops or not. Without the bodies of loops
> I
> > can get information about functions called from other functions 
> > using the chain links, but not whether they are called within loops.
> 
> Which version of gcc are you using?  In mainline -fdump-translation- 
> unit just dumps the global declarations.  If you want to see FOR_STMT 
> nodes, you need -fdump-tree-original.  But that is pretty 
> unsatisfactory these days since for_stmt nodes are not dumped in a 
> useful way.  And that only happens for C++; for C FOR_STMT nodes are 
> never generated.
> 

I'm using recent gcc-4.1.2. I used -fdump-tree-original-raw to obtain all
declarations from within functions. It seems that I can find all loop
constructs there, although there are many other nodes dumped, which I do not
understand completely by now. To do automatic parsing of the output seems to
be not as simple as I hoped initially.
But thank you for the -fdump-tree-original hint, anyway.

> 
> > Another thing I don't understand is the following. This dumped 
> > function node contains two body definitions, one undefined and one 
> > with a proper node chain. Is this a dump error or has it special
> meaning?
> >
> > @1639   function_decl    name: @2001    mngl: @2002    type: @2003
> >                          scpe: @812     srcp: char_traits.h:322
> >                          chan: @2004    note: member   accs: pub
> >                          args: @2005    body: undefined
> >                          link: extern   body: @2006
> >
> > Maybe someone could help me or point me to other resources.
> 
> The tree dump code prints out "body: undefined" for an external 
> function which is not to be compiled by itself.  But such a function 
> can still have a body; this will be the case for a C++ inline function.
> This is somewhat confusing.
> 
> Ian

I do not understand the link: external. All my own functions are also marked
as external, though they are defined, declared and used within the same
compilation unit. Additionally I do only have one compilation unit for
testing. Why are those functions marked as externally linked?

Sascha


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux