re PR ipa/63298 (internal compiler error: in types_same_for_odr, at ipa-devirt.c...
authorJan Hubicka <hubicka@ucw.cz>
Fri, 19 Sep 2014 02:04:20 +0000 (04:04 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Fri, 19 Sep 2014 02:04:20 +0000 (02:04 +0000)
PR lto/63298
* ipa-devirt.c (odr_subtypes_equivalent_p): Fix thinko in a condition.

From-SVN: r215374

gcc/ChangeLog
gcc/ipa-devirt.c

index 0c7b2154857267ae5a6745aa562cd4b027b7b817..0330a13997cab23d5a1a9ff75c04ea3e8a27ed6e 100644 (file)
@@ -1,3 +1,8 @@
+2014-09-18  Jan Hubicka  <hubicka@ucw.cz>
+
+       PR lto/63298
+       * ipa-devirt.c (odr_subtypes_equivalent_p): Fix thinko in a condition.
+
 2014-09-18  Joseph Myers  <joseph@codesourcery.com>
 
        * system.h (LIBGCC2_TF_CEXT): Poison.
index 1480b29a89f74e1da677df54d37b6f75a02480d0..0a11eb72085fd7c1f02564fb9340381f9c38adc8 100644 (file)
@@ -525,8 +525,10 @@ odr_subtypes_equivalent_p (tree t1, tree t2, hash_set<type_pair,pair_traits> *vi
   if (an1 != an2 || an1)
     return false;
 
-  /* For ODR types be sure to compare their names.  */
-  if ((odr_type_p (t1) && !odr_type_p (t2))
+  /* For ODR types be sure to compare their names.
+     To support -wno-odr-type-merging we allow one type to be non-ODR
+     and other ODR even though it is a violation.  */
+  if ((odr_type_p (t1) && odr_type_p (t2))
       || (TREE_CODE (t1) == RECORD_TYPE && TREE_CODE (t2) == RECORD_TYPE
           && TYPE_BINFO (t1) && TYPE_BINFO (t2)
           && polymorphic_type_binfo_p (TYPE_BINFO (t1))