re PR c++/53745 ([C++11] Poor diagnostic for ill-formed narrowing conversion in enume...
authorPaolo Carlini <paolo.carlini@oracle.com>
Sun, 5 May 2013 00:27:46 +0000 (00:27 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Sun, 5 May 2013 00:27:46 +0000 (00:27 +0000)
/cp
2013-05-04  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/53745
* decl.c (build_enumerator): Improve error message.

/testsuite
2013-05-04  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/53745
* g++.dg/cpp0x/enum27.C: New.
* g++.dg/cpp0x/enum_base.C: Adjust.

From-SVN: r198607

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/enum27.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/enum_base.C

index b9bdf3a49089973afb106f0ff67cab12d6cb5b0b..9d3e6521d6531f88071184f9e096f1712664f9fe 100644 (file)
@@ -1,3 +1,8 @@
+2013-05-04  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/53745
+       * decl.c (build_enumerator): Improve error message.
+
 2013-05-03  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/14283
index b2f1c6ef471320cfc2d9c4d7a60a1427f36ddb0c..d92d334e1f5007ead34e8ad4c03a35a11402b9ef 100644 (file)
@@ -12847,8 +12847,8 @@ incremented enumerator value is too large for %<long%>");
           && TREE_CODE (value) == INTEGER_CST)
         {
          if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
-           error ("enumerator value %E is too large for underlying type %<%T%>",
-                  value, ENUM_UNDERLYING_TYPE (enumtype));
+           error ("enumerator value %E is outside the range of underlying "
+                  "type %<%T%>", value, ENUM_UNDERLYING_TYPE (enumtype));
 
           /* Convert the value to the appropriate type.  */
           value = convert (ENUM_UNDERLYING_TYPE (enumtype), value);
index c480bd7bfe35836868bbdbb66a16f05940887a06..8a3efcdf73509ae314b65dff3fb27127051b3f1e 100644 (file)
@@ -1,3 +1,9 @@
+2013-05-04  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/53745
+       * g++.dg/cpp0x/enum27.C: New.
+       * g++.dg/cpp0x/enum_base.C: Adjust.
+
 2013-05-04  Jakub Jelinek  <jakub@redhat.com>
 
        PR tree-optimization/56205
diff --git a/gcc/testsuite/g++.dg/cpp0x/enum27.C b/gcc/testsuite/g++.dg/cpp0x/enum27.C
new file mode 100644 (file)
index 0000000..80ac98f
--- /dev/null
@@ -0,0 +1,4 @@
+// PR c++/53745
+// { dg-do compile { target c++11 } }
+
+enum E : unsigned { e = -1 };  // { dg-error "outside the range" }
index 5607961f24222fafb26aa50c105d061c108e04f6..7da232cc2aa3832f8dcdd8f78426da3054946d0d 100644 (file)
@@ -6,11 +6,11 @@ enum E1 : char { };
 enum E2 : signed const short { };
 enum E3 : uvlonglong { };
 enum E4 : char { 
-  val = 500 // { dg-error "too large" }
+  val = 500 // { dg-error "outside the range" }
 };
 
 enum class E5 {
-  val = (unsigned long long)-1 // { dg-error "too large" }
+  val = (unsigned long long)-1 // { dg-error "outside the range" }
 };
 
 typedef float Float;