From 5d5006cc91fa44b6077b7f676706b799e85e99e6 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Sun, 5 May 2013 00:27:46 +0000 Subject: re PR c++/53745 ([C++11] Poor diagnostic for ill-formed narrowing conversion in enumerator initializer) /cp 2013-05-04 Paolo Carlini PR c++/53745 * decl.c (build_enumerator): Improve error message. /testsuite 2013-05-04 Paolo Carlini PR c++/53745 * g++.dg/cpp0x/enum27.C: New. * g++.dg/cpp0x/enum_base.C: Adjust. From-SVN: r198607 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/decl.c | 4 ++-- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/g++.dg/cpp0x/enum27.C | 4 ++++ gcc/testsuite/g++.dg/cpp0x/enum_base.C | 4 ++-- 5 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/enum27.C (limited to 'gcc') 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 + + PR c++/53745 + * decl.c (build_enumerator): Improve error message. + 2013-05-03 Paolo Carlini 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 %"); && 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 + + PR c++/53745 + * g++.dg/cpp0x/enum27.C: New. + * g++.dg/cpp0x/enum_base.C: Adjust. + 2013-05-04 Jakub Jelinek 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; -- cgit v1.1