------- Additional Comments From mark at codesourcery dot com 2005-06-06 00:15 ------- Subject: Re: [4.0/4.1 Regression] debug info omitted for global variables
pinskia at gcc dot gnu dot org wrote: > ------- Additional Comments From pinskia at gcc dot gnu dot org 2005-06-05 > 23:50 ------- > (In reply to comment #3) > >>Is there a test case for this bug? (The usual things: preprocessed source, >>command-line, etc.?) > > From <http://gcc.gnu.org/ml/gcc/2005-05/msg01635.html>: > > You can reproduce it using: > static int i; > int main(void) > { > i += 3; > i *= 5; > return 0; > } > > and readelf and looking for the DW_TAG_variable tag. Thanks. I can see the problem, when compiling with -O2. I'm not really sure yet whether this is my fault, or whether some subsequent change to cgraph after my changes got checked in broke things. In any case, I'm don't think that the code I wrote in check_global_declarations is wrong, in and of itself. If check_global_declarations is going to be responsible for calling debug_hooks->global_decl, then we must set DECL_IGNORED_P correctly by that point. (That assume that, in fact, we should not put out debugging information about variables that have been optimized away; I think that assumption is correct in that we might otherwise get relocations against them, at least in some debugging formats.) But, the way things are set up, we apparently don't really know whether or not we're going to output the variables until cgraph_optimize, which is not called until later in c_write_global_declarations. That suggests that perhaps the correct fix is to move the call to debug_hooks->global_decl into cgraph, or have it in both places. Or, perhaps cgraph_optimize should be called before check_global_declarations. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21828