------- Comment #2 from rguenth at gcc dot gnu dot org 2010-03-28 12:58 ------- The return statement does not have line information, even without LTO:
f2 (int i, int j) { <bb 2>: [/home/richard/src/trunk/gcc/testsuite/gcc.dg/guality/pr41353-1.c : 23:5] j_3 = j_1(D) + i_2(D); [/home/richard/src/trunk/gcc/testsuite/gcc.dg/guality/pr41353-1.c : 23:5] # DEBUG j => j_3 [/home/richard/src/trunk/gcc/testsuite/gcc.dg/guality/pr41353-1.c : 26:7] # DEBUG i1 => [/home/richard/src/trunk/gcc/testsuite/gcc.dg/guality/pr41353-1.c : 26] i_2(D) * 2 [/home/richard/src/trunk/gcc/testsuite/gcc.dg/guality/pr41353-1.c : 27:7] # DEBUG i2 => [/home/richard/src/trunk/gcc/testsuite/gcc.dg/guality/pr41353-1.c : 27] i_2(D) * 3 return j_3; } (same dump with -flto). There's no line 28 in the debug information of either variant - still gdb breaks on the closing } for -O2 but on the start of f3 () for -O2 -flto. But the non-LTO variant has a line advance entry to line 29. What is missing is visible in the .expand dump - the non-LTO variant does have line number information on the function return (line 29), but the LTO variant does not. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43552