For the supplied example, the current development gcc generates incorrect line number information for one instruction from the inlined subroutine. The Fedora Core 3 gcc, which identifies itself as "gcc version 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)", generates correct line information.
Environment: System: Linux toadfish.ninemoons.com 2.6.9-1.681_FC3.stk16 #1 Mon Nov 22 16:44:32 EST 2004 i686 i686 i386 GNU/Linux Architecture: i686 host: i686-pc-linux-gnu build: i686-pc-linux-gnu target: i686-pc-linux-gnu configured with: /src/sourceware/gcc/gcc/configure -v --prefix=/opt/local/sourceware --with-gcc-version-trigger=/src/sourceware/gcc/gcc/gcc/version.c --enable-languages=c,c++ How-To-Repeat: For the follow code: /* 1 */ int add2 (int a, int b) /* 2 */ { /* 3 */ return (a + b); /* 4 */ } /* 5 */ /* 6 */ inline int add3 (int a, int b, int c) /* 7 */ { /* 8 */ return (a + add2 (b , c)); /* 9 */ } /* 10 */ /* 11 */ main () /* 12 */ { /* 13 */ printf ("%d\n", add3 (2, 3, 4)); /* 14 */ } Run: gcc -g -O2 --save-temps -o t t.c readelf --debug-dump t >t.dwarf objdump --disassemble t >t.dis There relevant line table entries from t.dwarf are: Special opcode 36: advance Address by 2 to 0x80483a0 and Line by 3 to 12 Special opcode 15: advance Address by 1 to 0x80483a1 and Line by -4 to 8 Special opcode 79: advance Address by 5 to 0x80483a6 and Line by 4 to 12 Special opcode 75: advance Address by 5 to 0x80483ab and Line by 0 to 12 Special opcode 85: advance Address by 6 to 0x80483b1 and Line by -4 to 8 Special opcode 234: advance Address by 16 to 0x80483c1 and Line by 5 to 13 Advance PC by constant 17 to 0x80483d2 Special opcode 34: advance Address by 2 to 0x80483d4 and Line by 1 to 14 Advance PC by 2 to 80483d6 I've annotated the disassembly of main() with the line numbers given by the above entries: 12 080483a0 <main>: 12 80483a0: 55 push %ebp 8 80483a1: b8 04 00 00 00 mov $0x4,%eax 12 80483a6: 89 e5 mov %esp,%ebp 12 80483a8: 83 ec 08 sub $0x8,%esp 12 80483ab: 83 e4 f0 and $0xfffffff0,%esp 12 80483ae: 83 ec 10 sub $0x10,%esp 8 80483b1: 89 44 24 04 mov %eax,0x4(%esp) 8 80483b5: c7 04 24 03 00 00 00 movl $0x3,(%esp) 8 80483bc: e8 af ff ff ff call 8048370 <add2> 13 80483c1: c7 04 24 c8 84 04 08 movl $0x80484c8,(%esp) ** 13 80483c8: 83 c0 02 add $0x2,%eax 13 80483cb: 89 44 24 04 mov %eax,0x4(%esp) 13 80483cf: e8 dc fe ff ff call 80482b0 <[EMAIL PROTECTED]> 14 80483d4: c9 leave 14 80483d5: c3 ret The "add $0x2,%eax" instruction, marked with '**', is supposed to be at line 8, not line 13. If you go through the same exercise with the Fedora Core 3 compiler, it does correctly identify this instruction as being at line 8. -- Summary: Current development gcc generates incorrect line info for example code Product: gcc Version: 4.0.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: debug AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: fnf at specifixinc dot com CC: gcc-bugs at gcc dot gnu dot org GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19192