https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69650
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |diagnostic, lto Priority|P3 |P1 CC| |rguenth at gcc dot gnu.org Component|lto |preprocessor --- Comment #10 from Richard Biener <rguenth at gcc dot gnu.org> --- When looking at DECL_SOURCE_LOCATION of 'a' during compilation we get #1 0x0000000001359e29 in streamer_write_tree_bitfields (ob=0x28ab160, expr= <var_decl 0x7ffff7fefb40 a>) at /space/rguenther/src/svn/trunk3/gcc/tree-streamer-out.c:434 434 stream_output_location (ob, &bp, DECL_SOURCE_LOCATION (expr)); (gdb) down #0 lto_output_location (ob=0x28ab160, bp=0x7fffffffd750, loc=12480) at /space/rguenther/src/svn/trunk3/gcc/lto-streamer-out.c:176 176 bp_pack_value (bp, ob->current_file != xloc.file, 1); (gdb) p xloc $2 = {file = 0x28f5680 "t.ii", line = 1048577, column = 5, data = 0x0, sysp = false} so the bogus info is there right from the start. Initialized through Old value = 0 New value = 12480 make_node_stat (code=VAR_DECL) at /space/rguenther/src/svn/trunk3/gcc/tree.c:1030 1029 DECL_SOURCE_LOCATION (t) = input_location; (gdb) p expand_location (input_location) $10 = {file = 0x28f5680 "t.ii", line = 1048577, column = 5, data = 0x0, sysp = false} there are other similarly bogus locations like New value = 8224 fe_file_change (new_map=0x7ffff7fe1020) at /space/rguenther/src/svn/trunk3/gcc/c-family/c-lex.c:228 228 (*debug_hooks->end_source_file) (LINEMAP_LINE (new_map)); (gdb) p expand_location (8224) $13 = {file = 0x28f5680 "t.ii", line = 1048576, column = 0, data = 0x0, sysp = false} that's when c-lex.c does 226 input_location = new_map->start_location; maybe this location isn't supposed to be expanded? Or nothing is ever supposed to get this location? For example changing the testcase to (invalid) namespace js {} # 9 "" 2 namespace js { int a } results in > ./cc1plus -quiet t.ii line-map.c: file "<stdin>" left but not entered t.ii:1048539:1: error: expected initializer before ‘}’ token exposing those same bogus locations to the user. Marking as libcpp issue. Note the bogus line info on the diagnostic (and thus the underlying issue) is not a regression it seems (checked up to GCC 4.1). Not sure who's familiar with the C/C++ FE interfacing to libcpp and if those "bogus" locations should simply never be assigned to input_location...