aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/cgraphunit.c4
-rw-r--r--gcc/final.c12
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/debug/dwarf2/non-virtual-thunk.C39
5 files changed, 59 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1aa0e5e..e87e0d4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2012-08-06 Cary Coutant <ccoutant@google.com>
+
+ * cgraphunit.c (assemble_thunk): Add source line info.
+ * final.c (final): Check for non-null cfg pointer.
+
2012-08-06 Sandra Loosemore <sandra@codesourcery.com>
Maxim Kuvyrkov <maxim@codesourcery.com>
Julian Brown <julian@codesourcery.com>
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index a6591b5..2dd0871 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 cdae011..30890b3 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 89a6917..5eeb526 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2012-08-06 Cary Coutant <ccoutant@google.com>
+
+ * g++.dg/debug/dwarf2/non-virtual-thunk.C: New test case.
+
2012-08-06 Janus Weil <janus@gcc.gnu.org>
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 0000000..8ad347a
--- /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()
+{
+}