forked from OSchip/llvm-project
Use VerifyIntegerConstantExpression instead of isIntegerConstantExpr. Fixes PR2963
llvm-svn: 60591
This commit is contained in:
parent
af333378c9
commit
1aa679227b
|
@ -978,8 +978,6 @@ DIAG(err_redefinition_of_enumerator, ERROR,
|
|||
"redefinition of enumerator %0")
|
||||
DIAG(err_duplicate_member, ERROR,
|
||||
"duplicate member %0")
|
||||
DIAG(err_enum_value_not_integer_constant_expr, ERROR,
|
||||
"enumerator value for %0 is not an integer constant")
|
||||
DIAG(ext_enum_value_not_int, EXTENSION,
|
||||
"ISO C restricts enumerator values to range of 'int' (%0 is too large)")
|
||||
DIAG(warn_enum_too_large, WARNING,
|
||||
|
|
|
@ -2899,8 +2899,7 @@ Sema::DeclTy *Sema::ActOnEnumConstant(Scope *S, DeclTy *theEnumDecl,
|
|||
|
||||
// C99 6.7.2.2p2: Make sure we have an integer constant expression.
|
||||
SourceLocation ExpLoc;
|
||||
if (!Val->isIntegerConstantExpr(EnumVal, Context, &ExpLoc)) {
|
||||
Diag(ExpLoc, diag::err_enum_value_not_integer_constant_expr) << Id;
|
||||
if (VerifyIntegerConstantExpression(Val, &EnumVal)) {
|
||||
delete Val;
|
||||
Val = 0; // Just forget about it.
|
||||
} else {
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
// RUN: clang %s -verify -pedantic -fsyntax-only
|
||||
|
||||
typedef short short_fixed;
|
||||
|
||||
enum
|
||||
{
|
||||
// 8.8 short_fixed
|
||||
SHORT_FIXED_FRACTIONAL_BITS= 8,
|
||||
SHORT_FIXED_ONE= 1<<SHORT_FIXED_FRACTIONAL_BITS
|
||||
};
|
||||
|
||||
#define FLOAT_TO_SHORT_FIXED(f) ((short_fixed)((f)*SHORT_FIXED_ONE))
|
||||
|
||||
enum
|
||||
{
|
||||
SOME_VALUE= FLOAT_TO_SHORT_FIXED(0.1)
|
||||
};
|
Loading…
Reference in New Issue