diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1aa0e5e01d6..e87e0d4f091 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2012-08-06 Cary Coutant + + * cgraphunit.c (assemble_thunk): Add source line info. + * final.c (final): Check for non-null cfg pointer. + 2012-08-06 Sandra Loosemore Maxim Kuvyrkov Julian Brown diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index a6591b5c133..2dd0871e736 100644 --- a/gcc/cgraphunit.c +++ b/gcc/cgraphunit.c @@ -1381,6 +1381,10 @@ assemble_thunk (struct cgraph_node *node) init_function_start (thunk_fndecl); cfun->is_thunk = 1; assemble_start_function (thunk_fndecl, fnname); + (*debug_hooks->source_line) (DECL_SOURCE_LINE (thunk_fndecl), + DECL_SOURCE_FILE (thunk_fndecl), + /* discriminator */ 0, + /* is_stmt */ 1); targetm.asm_out.output_mi_thunk (asm_out_file, thunk_fndecl, fixed_offset, virtual_value, alias); diff --git a/gcc/final.c b/gcc/final.c index cdae0117388..30890b3ce22 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -1863,11 +1863,13 @@ final (rtx first, FILE *file, int optimize_p) start_to_bb = XCNEWVEC (basic_block, bb_map_size); end_to_bb = XCNEWVEC (basic_block, bb_map_size); - FOR_EACH_BB_REVERSE (bb) - { - start_to_bb[INSN_UID (BB_HEAD (bb))] = bb; - end_to_bb[INSN_UID (BB_END (bb))] = bb; - } + /* There is no cfg for a thunk. */ + if (!cfun->is_thunk) + FOR_EACH_BB_REVERSE (bb) + { + start_to_bb[INSN_UID (BB_HEAD (bb))] = bb; + end_to_bb[INSN_UID (BB_END (bb))] = bb; + } } /* Output the insns. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 89a6917ce47..5eeb52629eb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2012-08-06 Cary Coutant + + * g++.dg/debug/dwarf2/non-virtual-thunk.C: New test case. + 2012-08-06 Janus Weil PR fortran/35831 diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/non-virtual-thunk.C b/gcc/testsuite/g++.dg/debug/dwarf2/non-virtual-thunk.C new file mode 100644 index 00000000000..8ad347a7cc3 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/non-virtual-thunk.C @@ -0,0 +1,39 @@ +// { dg-do compile } +// { dg-options "-g2 -dA" } + +// Verify that line number info is output for the non-virtual +// thunks for C::~C(). +// { dg-final { scan-assembler "thunk.C:30" } } + +class A +{ + public: + A(); + virtual ~A(); + private: + int i; +}; + +class B +{ + public: + B(); + virtual ~B(); + private: + int i; +}; + +class C : public A, public B +{ + public: + C(); + virtual ~C(); // line 30 +}; + +C::C() +{ +} + +C::~C() +{ +}