> On 4/16/07, Paulo J. Matos <[EMAIL PROTECTED]> wrote: > >Hello all, > > > >I'm going through the bodies of all user-defined functions. I'm using > >as user-defined function as one that: > >DECL_BUILT_IN(node) == 0. > > > > >Problem is that for a function (derived from a C++ file) whose output > >from my pass is (output is self-explanatory, I think): > >Registering cgraph node: > >_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc > >[operator<<]... SUCCESSFUL > >Declared on > >/home/pmatos/gsvt-bin/lib/gcc/x86_64-unknown-linux-gnu/4.1.1/../../../../include/c++/4.1.1/bits/ostream.tcc, > >line 735 > >Decl Node Code is function_decl > >Registering output void ...SUCCESSFUL > >Arguments: __out : reference_type, __s : pointer_type > > > >Well, this is definitely builtin but DECL_BUILT_IN == 0, which means > >that when I do FOR_EACH_BB_FN, I'm getting a segmentation fault > > First, it's not built in, because it's defined in a source file. > Builtin functions are those defined by the compiler. > > Second, we should make FOR_EACH_BB_FN never crash on empty tree functions. > It seems really rude to do otherwise.
Well, it works on empty functions, but why would you ever want to walk body of function that is not there? cgraph_function_body_availability should be checked by IPA passes to see what bodies are there and what can or can not change by linking... Honza > Just because we don't have a body for a function doesn't mean we > should crash. Users shouldn't have to be checking random things like > DECL_SAVED_TREE to determine if FOR_EACH_BB_FN will work (this is not > to say that they should be able to pass any random crap to it, but it > should be detecting if the function has a body)