ipa-devirt.c (odr_subtypes_equivalent_p): Fix recursion.
authorJan Hubicka <jh@suse.cz>
Fri, 26 Oct 2018 09:32:47 +0000 (11:32 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Fri, 26 Oct 2018 09:32:47 +0000 (09:32 +0000)
* ipa-devirt.c (odr_subtypes_equivalent_p): Fix recursion.
(warn_types_mismatch): Fix walk of DECL_NAME.
(odr_types_equivalent_p): Fix overactive assert.
* lto/lto-symtab.c (lto_symtab_merge_decls_2): Fix extra space.

* g++.dg/lto/odr-1_0.C: Fix template.
* g++.dg/lto/odr-1_1.C: Fix template.

From-SVN: r265523

gcc/ChangeLog
gcc/ipa-devirt.c
gcc/lto/ChangeLog
gcc/lto/lto-symtab.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/lto/odr-1_0.C
gcc/testsuite/g++.dg/lto/odr-1_1.C

index d46a3b47a55718865bbfab3117655f752a02347e..57876065a666f5cffe4f0ea9d65a09e74bb30da3 100644 (file)
@@ -1,3 +1,9 @@
+2018-10-26  Jan Hubicka  <jh@suse.cz>
+
+       * ipa-devirt.c (odr_subtypes_equivalent_p): Fix recursion.
+       (warn_types_mismatch): Fix walk of DECL_NAME.
+       (odr_types_equivalent_p): Fix overactive assert.
+
 2018-10-26  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/87105
index df880fe4145cced2c98e6c92ed752b1c182ab277..d92e6f42f3ebb91eafedf6ff7cf439ff7c347b7d 100644 (file)
@@ -719,9 +719,10 @@ odr_subtypes_equivalent_p (tree t1, tree t2, bool warn, bool *warned,
     }
   if (visited->add (pair))
     return true;
-  if (odr_types_equivalent_p (TYPE_MAIN_VARIANT (t1), TYPE_MAIN_VARIANT (t2),
-                             false, NULL, visited, loc1, loc2)
-      && !type_variants_equivalent_p (t1, t2, warn, warned))
+  if (!odr_types_equivalent_p (TYPE_MAIN_VARIANT (t1), TYPE_MAIN_VARIANT (t2),
+                             false, NULL, visited, loc1, loc2))
+    return false;
+  if (!type_variants_equivalent_p (t1, t2, warn, warned))
     return false;
   return true;
 }
@@ -1138,7 +1139,7 @@ warn_types_mismatch (tree t1, tree t2, location_t loc1, location_t loc2)
       if (TREE_CODE (n1) == TYPE_DECL)
        n1 = DECL_NAME (n1);
       if (TREE_CODE (n2) == TYPE_DECL)
-       n1 = DECL_NAME (n2);
+       n2 = DECL_NAME (n2);
       /* Most of the time, the type names will match, do not be unnecesarily
          verbose.  */
       if (IDENTIFIER_POINTER (n1) != IDENTIFIER_POINTER (n2))
@@ -1292,10 +1293,6 @@ odr_types_equivalent_p (tree t1, tree t2, bool warn, bool *warned,
   /* Check first for the obvious case of pointer identity.  */
   if (t1 == t2)
     return true;
-  gcc_assert (!type_with_linkage_p (TYPE_MAIN_VARIANT (t1))
-             || !type_in_anonymous_namespace_p (TYPE_MAIN_VARIANT (t1)));
-  gcc_assert (!type_with_linkage_p (TYPE_MAIN_VARIANT (t2))
-             || !type_in_anonymous_namespace_p (TYPE_MAIN_VARIANT (t2)));
 
   /* Can't be the same type if the types don't have the same code.  */
   if (TREE_CODE (t1) != TREE_CODE (t2))
index c0e9f1c3d71f0f1205244a9c571815087e791b4a..a5d1ff2a0241d748d2ea4dfdea7d0f2fd4419e64 100644 (file)
@@ -1,3 +1,7 @@
+2018-10-26  Jan Hubicka  <jh@suse.cz>
+
+       * lto/lto-symtab.c (lto_symtab_merge_decls_2): Fix extra space.
+
 2018-10-17  David Malcolm  <dmalcolm@redhat.com>
 
        * Make-lang.in (selftest-lto): New.
index cf08d455d877808b484bf2f18b01ae55da4c0387..4b24b84774df8e030b781d8e3f4bad3aaee2a7e5 100644 (file)
@@ -698,7 +698,7 @@ lto_symtab_merge_decls_2 (symtab_node *first, bool diagnosed_p)
          if (level & 2)
            diag = warning_at (DECL_SOURCE_LOCATION (decl),
                               OPT_Wodr,
-                              "%qD violates the C++ One Definition Rule ",
+                              "%qD violates the C++ One Definition Rule",
                               decl);
          if (!diag && (level & 1))
            diag = warning_at (DECL_SOURCE_LOCATION (decl),
index 36627afeaa366622f736644bed60ece0ca415e80..5dab9a853ecd09e318d53af565d2950b73d89971 100644 (file)
@@ -1,3 +1,8 @@
+2018-10-26  Jan Hubicka  <jh@suse.cz>
+
+       * g++.dg/lto/odr-1_0.C: Fix template.
+       * g++.dg/lto/odr-1_1.C: Fix template.
+
 2018-10-26  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/87105
index 8eabe7b1583032f68cd7d81caf45da75cca4fc11..7967e1d895ec091fd9514b3e35fe29bd07fb9535 100644 (file)
@@ -3,6 +3,6 @@
 struct a { // { dg-lto-warning "8: type 'struct a' violates the C\\+\\+ One Definition Rule" }
   struct b *ptr; // { dg-lto-message "13: the first difference of corresponding definitions is field 'ptr'" }
 };
-void test(struct a *) // { dg-lto-warning "6: warning: 'test' violates the C\\+\\+ One Definition Rule" }
+void test(struct a *)
 {
 }
index 5cd6f6c0ebc3cb79fd042d21d07bdd91d5928e57..ef2f55a69aaa1e4cb976325a9d81783e63961b53 100644 (file)
@@ -4,7 +4,7 @@ namespace {
 struct a {
   struct b *ptr;
 };
-void test(struct a *);
+void test(struct a *); // { dg-lto-warning "6: 'test' violates the C\\+\\+ One Definition Rule" }
 int
 main(void)
 {