re PR c++/91222 (507.cactuBSSN_r build fails in warn_types_mismatch at ipa-devirt...
authorJan Hubicka <hubicka@ucw.cz>
Tue, 1 Oct 2019 18:21:31 +0000 (20:21 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Tue, 1 Oct 2019 18:21:31 +0000 (18:21 +0000)
PR lto/91222
* ipa-devirt.c (warn_types_mismatch): Do not ICE when anonymous type
is matched with non-C++ type
* g++.dg/lto/odr-6_0.C: New testcase.
* g++.dg/lto/odr-6_1.c: New testcase.

From-SVN: r276420

gcc/ChangeLog
gcc/ipa-devirt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/lto/odr-6_0.C [new file with mode: 0644]
gcc/testsuite/g++.dg/lto/odr-6_1.c [new file with mode: 0644]

index 08951d9..be78525 100644 (file)
@@ -1,3 +1,9 @@
+2019-10-01  Jan Hubicka  <hubicka@ucw.cz>
+
+       PR lto/91222
+       * ipa-devirt.c (warn_types_mismatch): Do not ICE when anonymous type
+       is matched with non-C++ type
+
 2019-10-01  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>
 
        * tree-if-conv.c (tree_if_conversion): Move call to ifcvt_local_dce
index e5028bc..3423c40 100644 (file)
@@ -992,14 +992,14 @@ warn_types_mismatch (tree t1, tree t2, location_t loc1, location_t loc2)
          std::swap (t1, t2);
          std::swap (loc_t1, loc_t2);
        }
-      gcc_assert (TYPE_NAME (t1) && TYPE_NAME (t2)
-                 && TREE_CODE (TYPE_NAME (t1)) == TYPE_DECL
-                 && TREE_CODE (TYPE_NAME (t2)) == TYPE_DECL);
+      gcc_assert (TYPE_NAME (t1)
+                 && TREE_CODE (TYPE_NAME (t1)) == TYPE_DECL);
       tree n1 = TYPE_NAME (t1);
-      tree n2 = TYPE_NAME (t2);
+      tree n2 = TYPE_NAME (t2) ? TYPE_NAME (t2) : NULL;
+
       if (TREE_CODE (n1) == TYPE_DECL)
        n1 = DECL_NAME (n1);
-      if (TREE_CODE (n2) == TYPE_DECL)
+      if (n2 && TREE_CODE (n2) == TYPE_DECL)
        n2 = DECL_NAME (n2);
       /* Most of the time, the type names will match, do not be unnecesarily
          verbose.  */
index 797c50f..ac73d3e 100644 (file)
@@ -1,5 +1,10 @@
 2019-10-01  Jan Hubicka  <hubicka@ucw.cz>
 
+       * g++.dg/lto/odr-6_0.C: New testcase.
+       * g++.dg/lto/odr-6_1.c: New testcase.
+
+2019-10-01  Jan Hubicka  <hubicka@ucw.cz>
+
        * gcc.dg/tree-ssa/ssa-thread-12.c: Fix warning introduced by my
        previous change.
 
diff --git a/gcc/testsuite/g++.dg/lto/odr-6_0.C b/gcc/testsuite/g++.dg/lto/odr-6_0.C
new file mode 100644 (file)
index 0000000..a03483f
--- /dev/null
@@ -0,0 +1,8 @@
+// { dg-lto-do link }
+extern "C" {
+struct {  // { dg-lto-message "" 2 }
+} admbaserest_;
+}
+int main()
+{
+}
diff --git a/gcc/testsuite/g++.dg/lto/odr-6_1.c b/gcc/testsuite/g++.dg/lto/odr-6_1.c
new file mode 100644 (file)
index 0000000..ee4bff4
--- /dev/null
@@ -0,0 +1,4 @@
+struct {} admbaserest_; // { dg-lto-message "type of " 2 }
+
+
+