From 1aa679227b034e7f5b6ed7106e026fd5c2299058 Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Fri, 5 Dec 2008 16:33:57 +0000 Subject: [PATCH] Use VerifyIntegerConstantExpression instead of isIntegerConstantExpr. Fixes PR2963 llvm-svn: 60591 --- clang/include/clang/Basic/DiagnosticKinds.def | 2 -- clang/lib/Sema/SemaDecl.cpp | 3 +-- clang/test/Sema/PR2963-enum-constant.c | 17 +++++++++++++++++ 3 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 clang/test/Sema/PR2963-enum-constant.c diff --git a/clang/include/clang/Basic/DiagnosticKinds.def b/clang/include/clang/Basic/DiagnosticKinds.def index 2fd6ac5afed9..a85e0df32483 100644 --- a/clang/include/clang/Basic/DiagnosticKinds.def +++ b/clang/include/clang/Basic/DiagnosticKinds.def @@ -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, diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 411307522be7..4fd13c3f96b7 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -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 { diff --git a/clang/test/Sema/PR2963-enum-constant.c b/clang/test/Sema/PR2963-enum-constant.c new file mode 100644 index 000000000000..28becc379375 --- /dev/null +++ b/clang/test/Sema/PR2963-enum-constant.c @@ -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<