aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2017-05-19 15:31:52 -0400
committerJason Merrill <jason@gcc.gnu.org>2017-05-19 15:31:52 -0400
commit1ff7be5ac8a85aab5580def9cdfaaabe6cedb3c7 (patch)
tree6aba71448217575c21bae2fa509875531a1aa640 /gcc
parent2944f36d0290654a3783c62e08347aebbce19cf4 (diff)
downloadgcc-1ff7be5ac8a85aab5580def9cdfaaabe6cedb3c7.zip
gcc-1ff7be5ac8a85aab5580def9cdfaaabe6cedb3c7.tar.gz
gcc-1ff7be5ac8a85aab5580def9cdfaaabe6cedb3c7.tar.bz2
c-warn.c (match_case_to_enum_1): Don't warn about enums with no enumerators.
* c-warn.c (match_case_to_enum_1): Don't warn about enums with no enumerators. From-SVN: r248303
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c-family/ChangeLog5
-rw-r--r--gcc/c-family/c-warn.c4
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/byte2.C13
3 files changed, 22 insertions, 0 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 1db3c33..4419f20 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,8 @@
+2017-05-19 Jason Merrill <jason@redhat.com>
+
+ * c-warn.c (match_case_to_enum_1): Don't warn about enums with no
+ enumerators.
+
2017-05-19 Bernd Edlinger <bernd.edlinger@hotmail.de>
* c-format.c (locus): Move out of function scope,
diff --git a/gcc/c-family/c-warn.c b/gcc/c-family/c-warn.c
index e67ffb7..8971156 100644
--- a/gcc/c-family/c-warn.c
+++ b/gcc/c-family/c-warn.c
@@ -1069,6 +1069,10 @@ warnings_for_convert_and_check (location_t loc, tree type, tree expr,
static void
match_case_to_enum_1 (tree key, tree type, tree label)
{
+ /* Avoid warning about enums that have no enumerators. */
+ if (TYPE_VALUES (type) == NULL_TREE)
+ return;
+
char buf[WIDE_INT_PRINT_BUFFER_SIZE];
if (tree_fits_uhwi_p (key))
diff --git a/gcc/testsuite/g++.dg/cpp1z/byte2.C b/gcc/testsuite/g++.dg/cpp1z/byte2.C
new file mode 100644
index 0000000..6a395c1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/byte2.C
@@ -0,0 +1,13 @@
+// { dg-options "-std=c++17 -Wall" }
+
+#include <cstddef>
+
+bool white_space(std::byte x) {
+ switch (x) {
+ case std::byte{' '}: case std::byte{'\t'}: case std::byte{'\v'}:
+ case std::byte{'\f'}: case std::byte{'\n'}:
+ return true;
+ default:
+ return false;
+ }
+}