diff options
author | Jason Merrill <jason@redhat.com> | 2021-12-27 23:46:13 -0500 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2021-12-28 12:46:16 -0500 |
commit | db25655fa5dd23bba684ec7db628643c19e64d6a (patch) | |
tree | 952a5ca32034600f49ebfe6f6095558c8f3bfe9d /gcc | |
parent | 9258ac53cfcbe546e8b86a433e59343538743f74 (diff) | |
download | gcc-db25655fa5dd23bba684ec7db628643c19e64d6a.zip gcc-db25655fa5dd23bba684ec7db628643c19e64d6a.tar.gz gcc-db25655fa5dd23bba684ec7db628643c19e64d6a.tar.bz2 |
c++: ICE on enum with bool value [PR99968]
BOOLEAN_TYPE also counts as integral, so verify_type should allow it.
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/g++.dg/ext/is_enum2.C | 10 | ||||
-rw-r--r-- | gcc/tree.c | 1 |
2 files changed, 11 insertions, 0 deletions
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 0000000..de14d6a --- /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 }; @@ -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 " |