aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2012-05-02 21:50:37 +0200
committerMartin Jambor <jamborm@gcc.gnu.org>2012-05-02 21:50:37 +0200
commitd282264edf36116d5c55d0da59a612468608d9ca (patch)
treefc6987ad123a3e9be2b2a34bcdf17cccaad41c6c
parent40f93bb5be85c6bb202bdb02b71efea13071e12a (diff)
downloadgcc-d282264edf36116d5c55d0da59a612468608d9ca.zip
gcc-d282264edf36116d5c55d0da59a612468608d9ca.tar.gz
gcc-d282264edf36116d5c55d0da59a612468608d9ca.tar.bz2
re PR lto/52605 (LTO -g ICE when looking up context of VMTs of classes defined within functions)
2012-05-02 Martin Jambor <mjambor@suse.cz> PR lto/52605 * dwarf2out.c (dwarf2out_decl): Only lookup die representing context of a variable when the contect is a function. * gcc/testsuite/g++.dg/lto/pr52605_0.C: New test. From-SVN: r187063
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/dwarf2out.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/lto/pr52605_0.C39
4 files changed, 53 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7611f01..8367cb6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2012-05-02 Martin Jambor <mjambor@suse.cz>
+
+ PR lto/52605
+ * dwarf2out.c (dwarf2out_decl): Only lookup die representing context
+ of a variable when the contect is a function.
+
2012-05-02 Michael Matz <matz@suse.de>
* coretypes.h (gimple_seq, const_gimple_seq): Typedef as gimple.
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 8bbf954..10a53894 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -19122,7 +19122,9 @@ dwarf2out_decl (tree decl)
return;
/* For local statics lookup proper context die. */
- if (TREE_STATIC (decl) && decl_function_context (decl))
+ if (TREE_STATIC (decl)
+ && DECL_CONTEXT (decl)
+ && TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL)
context_die = lookup_decl_die (DECL_CONTEXT (decl));
/* If we are in terse mode, don't generate any DIEs to represent any
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c447969..4f831b1 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2012-05-02 Martin Jambor <mjambor@suse.cz>
+
+ PR lto/52605
+ * g++.dg/lto/pr52605_0.C: New test.
+
2012-05-02 Kirill Yukhin <kirill.yukhin@intel.com>
* gcc.target/i386/hle-cmpxchg-acq-1.c: New.
diff --git a/gcc/testsuite/g++.dg/lto/pr52605_0.C b/gcc/testsuite/g++.dg/lto/pr52605_0.C
new file mode 100644
index 0000000..22540ab
--- /dev/null
+++ b/gcc/testsuite/g++.dg/lto/pr52605_0.C
@@ -0,0 +1,39 @@
+// { dg-lto-do link }
+// { dg-lto-options {{-flto -g}} }
+
+extern "C" void abort (void);
+
+class A
+{
+public:
+ virtual int foo (int i);
+};
+
+int A::foo (int i)
+{
+ return i + 1;
+}
+
+int __attribute__ ((noinline,noclone)) get_input(void)
+{
+ return 1;
+}
+
+int main (int argc, char *argv[])
+{
+
+ class B : public A
+ {
+ public:
+ int bar (int i)
+ {
+ return foo (i) + 2;
+ }
+ };
+ class B b;
+
+ if (b.bar (get_input ()) != 4)
+ abort ();
+ return 0;
+}
+