diff mbox series

[pushed] c++: ICE on enum with bool value [PR99968]

Message ID 20211228174534.1717558-1-jason@redhat.com
State New
Headers show
Series [pushed] c++: ICE on enum with bool value [PR99968] | expand

Commit Message

Jason Merrill Dec. 28, 2021, 5:45 p.m. UTC
BOOLEAN_TYPE also counts as integral, so verify_type should allow it.

Tested x86_64-pc-linux-gnu, applying to trunk as obvious.

	PR c++/99968

gcc/ChangeLog:

	* tree.c (verify_type): Allow enumerator with BOOLEAN_TYPE.

gcc/testsuite/ChangeLog:

	* g++.dg/ext/is_enum2.C: New test.
---
 gcc/testsuite/g++.dg/ext/is_enum2.C | 10 ++++++++++
 gcc/tree.c                          |  1 +
 2 files changed, 11 insertions(+)
 create mode 100644 gcc/testsuite/g++.dg/ext/is_enum2.C


base-commit: 9258ac53cfcbe546e8b86a433e59343538743f74
diff mbox series

Patch

diff --git a/gcc/testsuite/g++.dg/ext/is_enum2.C b/gcc/testsuite/g++.dg/ext/is_enum2.C
new file mode 100644
index 00000000000..de14d6abea9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/is_enum2.C
@@ -0,0 +1,10 @@ 
+// PR c++/99968
+// { dg-do compile { target c++11 } }
+// { dg-additional-options -g }
+
+template <class T> struct A {
+  using type = T;
+  static const bool value = false;
+};
+
+enum E { e0 = __is_enum(E), e1 = A<E>::value };
diff --git a/gcc/tree.c b/gcc/tree.c
index 0741e3b01af..d68d6946aa2 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -13704,6 +13704,7 @@  verify_type (const_tree t)
 	    error_found = true;
 	  }
 	if (TREE_CODE (TREE_TYPE (value)) != INTEGER_TYPE
+	    && TREE_CODE (TREE_TYPE (value)) != BOOLEAN_TYPE
 	    && !useless_type_conversion_p (const_cast <tree> (t), TREE_TYPE (value)))
 	  {
 	    error ("enum value type is not %<INTEGER_TYPE%> nor convertible "