diff mbox series

FIX ICE building cactusBSSN

Message ID 20191001182303.ipa2nkcfcmuhzk2e@kam.mff.cuni.cz
State New
Headers show
Series FIX ICE building cactusBSSN | expand

Commit Message

Jan Hubicka Oct. 1, 2019, 6:23 p.m. UTC
Hi,
sorry for taking so long to get to this.  This patch fixes the ICE which
happens when we try to output warning about anonymous type.
As Jason explains in the PR log the warning is correct and I think we
should warn at compile time when parsing 
$ cat 2.ii
extern "C" {
struct {
} admbaserest_;
}
as there seems to be no way to use admbaserest_ from other translation
unit in standard conforming way?

Honza

	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.
diff mbox series

Patch

Index: ipa-devirt.c
===================================================================
--- ipa-devirt.c	(revision 276272)
+++ ipa-devirt.c	(working copy)
@@ -992,14 +992,14 @@  warn_types_mismatch (tree t1, tree t2, l
 	  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: testsuite/g++.dg/lto/odr-6_0.C
===================================================================
--- testsuite/g++.dg/lto/odr-6_0.C	(nonexistent)
+++ testsuite/g++.dg/lto/odr-6_0.C	(working copy)
@@ -0,0 +1,8 @@ 
+// { dg-lto-do link }
+extern "C" {
+struct {  // { dg-lto-message "" 2 }
+} admbaserest_;
+}
+int main()
+{
+}
Index: testsuite/g++.dg/lto/odr-6_1.c
===================================================================
--- testsuite/g++.dg/lto/odr-6_1.c	(nonexistent)
+++ testsuite/g++.dg/lto/odr-6_1.c	(working copy)
@@ -0,0 +1,4 @@ 
+struct {} admbaserest_; // { dg-lto-message "type of " 2 }
+
+
+