diff options
author | Markus Trippelsdorf <markus@trippelsdorf.de> | 2014-10-09 17:52:00 +0000 |
---|---|---|
committer | Markus Trippelsdorf <trippels@gcc.gnu.org> | 2014-10-09 17:52:00 +0000 |
commit | 94c4084cf009939db425be4f6552b7f29f8587b3 (patch) | |
tree | b60169a03d162e85ccd8f195f290653cb436daaa /gcc | |
parent | d0ff1cb4d9b1972e0aa9535d77413e12c4e84fa2 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/ipa-polymorphic-call.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ipa/polymorphic-call-1.C | 49 |
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); +} |