re PR c++/16603 (Incorrect enumerator type before enumeration's closing brace)

/cp
2012-01-01  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/16603
	* decl.c (build_enumerator): Don't call perform_integral_promotions
	on the value.

/testsuite
2012-01-01  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/16603
	* g++.dg/parse/enum8.C: New.

From-SVN: r182776
This commit is contained in:
Paolo Carlini 2012-01-01 22:33:31 +00:00 committed by Paolo Carlini
parent 9f88ff5a1f
commit 11cc5f49dd
4 changed files with 26 additions and 7 deletions

View File

@ -1,3 +1,9 @@
2012-01-01 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/16603
* decl.c (build_enumerator): Don't call perform_integral_promotions
on the value.
2012-01-01 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/51379

View File

@ -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;
}
}

View File

@ -1,3 +1,8 @@
2012-01-01 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/16603
* g++.dg/parse/enum8.C: New.
2012-01-01 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/51379

View File

@ -0,0 +1,11 @@
// PR c++/16603
char const c = 'q';
enum
{
x = c,
y = sizeof(x)
};
int test[y == sizeof(char) ? 1 : -1];