From 11cc5f49ddde6807b157dfaeffc26d286eaf2549 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Sun, 1 Jan 2012 22:33:31 +0000 Subject: [PATCH] re PR c++/16603 (Incorrect enumerator type before enumeration's closing brace) /cp 2012-01-01 Paolo Carlini PR c++/16603 * decl.c (build_enumerator): Don't call perform_integral_promotions on the value. /testsuite 2012-01-01 Paolo Carlini PR c++/16603 * g++.dg/parse/enum8.C: New. From-SVN: r182776 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/decl.c | 11 ++++------- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/parse/enum8.C | 11 +++++++++++ 4 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/g++.dg/parse/enum8.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b4a3df4e4e9..c6027213187 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2012-01-01 Paolo Carlini + + PR c++/16603 + * decl.c (build_enumerator): Don't call perform_integral_promotions + on the value. + 2012-01-01 Paolo Carlini PR c++/51379 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 2fc794b30ee..48f3085a92f 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -12369,14 +12369,11 @@ build_enumerator (tree name, tree value, tree enumtype, location_t loc) { value = cxx_constant_value (value); - if (TREE_CODE (value) == INTEGER_CST - && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value))) + if (TREE_CODE (value) != INTEGER_CST + || ! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value))) { - value = perform_integral_promotions (value); - } - else - { - error ("enumerator value for %qD is not an integer constant", name); + error ("enumerator value for %qD is not an integer constant", + name); value = NULL_TREE; } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cfbef8d6a83..3e357228c7b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-01-01 Paolo Carlini + + PR c++/16603 + * g++.dg/parse/enum8.C: New. + 2012-01-01 Paolo Carlini PR c++/51379 diff --git a/gcc/testsuite/g++.dg/parse/enum8.C b/gcc/testsuite/g++.dg/parse/enum8.C new file mode 100644 index 00000000000..83dd6e0e18f --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/enum8.C @@ -0,0 +1,11 @@ +// PR c++/16603 + +char const c = 'q'; + +enum + { + x = c, + y = sizeof(x) + }; + +int test[y == sizeof(char) ? 1 : -1]; -- 2.30.2