summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/ipa
diff options
context:
space:
mode:
authorjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>2014-03-21 12:59:35 +0000
committerjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>2014-03-21 12:59:35 +0000
commitfa4052b343d0013312ab14f0b67ed171c88579fc (patch)
tree9a7d70708594301be7def95ae86b5e51f4577ef8 /gcc/testsuite/g++.dg/ipa
parent95d0bdb9b19503fcd85591b7bca82a0e32413c09 (diff)
downloadgcc-fa4052b343d0013312ab14f0b67ed171c88579fc.tar.gz
2014-03-21 Martin Jambor <mjambor@suse.cz>
PR ipa/59176 * cgraph.h (symtab_node): New flag body_removed. * ipa.c (symtab_remove_unreachable_nodes): Set body_removed flag when removing bodies. * symtab.c (dump_symtab_base): Dump body_removed flag. * cgraph.c (verify_edge_corresponds_to_fndecl): Skip nodes which had their bodies removed. testsuite/ * g++.dg/torture/pr59176.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@208748 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/g++.dg/ipa')
-rw-r--r--gcc/testsuite/g++.dg/ipa/pr59176.C41
1 files changed, 41 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/ipa/pr59176.C b/gcc/testsuite/g++.dg/ipa/pr59176.C
new file mode 100644
index 00000000000..d576bc3ba5a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ipa/pr59176.C
@@ -0,0 +1,41 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+
+template <class> class A {
+protected:
+ void m_fn2();
+ ~A() { m_fn2(); }
+ virtual void m_fn1();
+};
+
+class D : A<int> {};
+template <class Key> void A<Key>::m_fn2() {
+ m_fn1();
+ m_fn1();
+ m_fn1();
+}
+
+#pragma interface
+class B {
+ D m_cellsAlreadyProcessed;
+ D m_cellsNotToProcess;
+
+public:
+ virtual ~B() {}
+ void m_fn1();
+};
+
+class C {
+ unsigned long m_fn1();
+ B m_fn2();
+ unsigned long m_fn3();
+};
+unsigned long C::m_fn1() {
+CellHierarchy:
+ m_fn2().m_fn1();
+}
+
+unsigned long C::m_fn3() {
+CellHierarchy:
+ m_fn2().m_fn1();
+}