c-warn.c (match_case_to_enum_1): Don't warn about enums with no enumerators.
authorJason Merrill <jason@redhat.com>
Fri, 19 May 2017 19:31:52 +0000 (15:31 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Fri, 19 May 2017 19:31:52 +0000 (15:31 -0400)
* c-warn.c (match_case_to_enum_1): Don't warn about enums with no
enumerators.

From-SVN: r248303

gcc/c-family/ChangeLog
gcc/c-family/c-warn.c
gcc/testsuite/g++.dg/cpp1z/byte2.C [new file with mode: 0644]

index 1db3c33..4419f20 100644 (file)
@@ -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,
index e67ffb7..8971156 100644 (file)
@@ -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 (file)
index 0000000..6a395c1
--- /dev/null
@@ -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;
+  }
+}