diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2013-05-05 00:27:46 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2013-05-05 00:27:46 +0000 |
commit | 5d5006cc91fa44b6077b7f676706b799e85e99e6 (patch) | |
tree | 587ec79aac0690c15dac6c781d1b57f2cb559c01 | |
parent | defa0f99ade0504dfe8eac19c00b37d5c29a7914 (diff) | |
download | gcc-5d5006cc91fa44b6077b7f676706b799e85e99e6.zip gcc-5d5006cc91fa44b6077b7f676706b799e85e99e6.tar.gz gcc-5d5006cc91fa44b6077b7f676706b799e85e99e6.tar.bz2 |
re PR c++/53745 ([C++11] Poor diagnostic for ill-formed narrowing conversion in enumerator initializer)
/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
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/decl.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/enum27.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/enum_base.C | 4 |
5 files changed, 19 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b9bdf3a..9d3e652 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index b2f1c6e..d92d334 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -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); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c480bd7..8a3efcd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 0000000..80ac98f --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/enum27.C @@ -0,0 +1,4 @@ +// PR c++/53745 +// { dg-do compile { target c++11 } } + +enum E : unsigned { e = -1 }; // { dg-error "outside the range" } diff --git a/gcc/testsuite/g++.dg/cpp0x/enum_base.C b/gcc/testsuite/g++.dg/cpp0x/enum_base.C index 5607961..7da232c 100644 --- a/gcc/testsuite/g++.dg/cpp0x/enum_base.C +++ b/gcc/testsuite/g++.dg/cpp0x/enum_base.C @@ -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; |