aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMarkus Trippelsdorf <markus@trippelsdorf.de>2014-10-09 17:52:00 +0000
committerMarkus Trippelsdorf <trippels@gcc.gnu.org>2014-10-09 17:52:00 +0000
commit94c4084cf009939db425be4f6552b7f29f8587b3 (patch)
treeb60169a03d162e85ccd8f195f290653cb436daaa /gcc
parentd0ff1cb4d9b1972e0aa9535d77413e12c4e84fa2 (diff)
downloadgcc-94c4084cf009939db425be4f6552b7f29f8587b3.zip
gcc-94c4084cf009939db425be4f6552b7f29f8587b3.tar.gz
gcc-94c4084cf009939db425be4f6552b7f29f8587b3.tar.bz2
Fix r216010 fallout
This fixes fallout from r216010, which causes Firefox build failures. Just move the gcc_assert below the new if statement. From-SVN: r216041
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/ipa-polymorphic-call.c2
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/ipa/polymorphic-call-1.C49
4 files changed, 59 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 23d7bbe..280101c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2014-10-09 Markus Trippelsdorf <markus@trippelsdorf.de>
+
+ * pa-polymorphic-call.c (check_stmt_for_type_change): Move
+ assertion.
+
2014-10-09 Richard Biener <rguenther@suse.de>
PR tree-optimization/63380
diff --git a/gcc/ipa-polymorphic-call.c b/gcc/ipa-polymorphic-call.c
index 51c6709..7d58601 100644
--- a/gcc/ipa-polymorphic-call.c
+++ b/gcc/ipa-polymorphic-call.c
@@ -1424,9 +1424,9 @@ check_stmt_for_type_change (ao_ref *ao ATTRIBUTE_UNUSED, tree vdef, void *data)
}
type = extr_type_from_vtbl_ptr_store (stmt, tci, &offset);
- gcc_assert (!type || TYPE_MAIN_VARIANT (type) == type);
if (type == error_mark_node)
return false;
+ gcc_assert (!type || TYPE_MAIN_VARIANT (type) == type);
if (!type)
{
if (dump_file)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ceaf2b3..89d7f84 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2014-10-09 Markus Trippelsdorf <markus@trippelsdorf.de>
+
+ * g++.dg/ipa/polymorphic-call-1.C: New testcase.
+
2014-10-09 Marc Glisse <marc.glisse@inria.fr>
* g++.dg/cpp0x/constexpr-52892-1.C: Error on missing const in C++14.
diff --git a/gcc/testsuite/g++.dg/ipa/polymorphic-call-1.C b/gcc/testsuite/g++.dg/ipa/polymorphic-call-1.C
new file mode 100644
index 0000000..2b5b544
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ipa/polymorphic-call-1.C
@@ -0,0 +1,49 @@
+// { dg-do compile }
+// { dg-options "-O2" }
+class A;
+class B
+{
+ A *mRawPtr;
+
+public:
+ void *StartAssignment___trans_tmp_2;
+ A **
+ m_fn1 ()
+ {
+ StartAssignment___trans_tmp_2 = &mRawPtr;
+ return reinterpret_cast<A **> (StartAssignment___trans_tmp_2);
+ }
+};
+class C
+{
+public:
+ C (B &p1) : mTargetSmartPtr (p1) {}
+ operator A **() { return mTargetSmartPtr.m_fn1 (); }
+ B &mTargetSmartPtr;
+};
+class A
+{
+public:
+ A ();
+};
+class D
+{
+ D (bool);
+ B mNewEntry;
+ virtual int m_fn2 ();
+};
+C
+fn1 (B &p1)
+{
+ return p1;
+}
+void
+fn2 (bool, A **)
+{
+ new A;
+}
+D::D (bool p1)
+{
+ A **a = fn1 (mNewEntry);
+ fn2 (p1, a);
+}