diff options
| author | Anders Carlsson <andersca@mac.com> | 2009-03-14 00:33:21 +0000 |
|---|---|---|
| committer | Anders Carlsson <andersca@mac.com> | 2009-03-14 00:33:21 +0000 |
| commit | 54b26985878b03def5f53e09270c9320a337a1de (patch) | |
| tree | 5de953eb0ffe30c90c8809fa8f4c363c9561f01c /clang/lib/Sema | |
| parent | d0fa573a7d544939a0584d61c2df30811a77eb5a (diff) | |
| download | bcm5719-llvm-54b26985878b03def5f53e09270c9320a337a1de.tar.gz bcm5719-llvm-54b26985878b03def5f53e09270c9320a337a1de.zip | |
Handle dependent types/exprs in static_assert expressions.
llvm-svn: 66997
Diffstat (limited to 'clang/lib/Sema')
| -rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 57a6c624616..37035b98c75 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -2243,20 +2243,23 @@ Sema::DeclTy *Sema::ActOnStaticAssertDeclaration(SourceLocation AssertLoc, StringLiteral *AssertMessage = cast<StringLiteral>((Expr *)assertmessageexpr.get()); - llvm::APSInt Value(32); - if (!AssertExpr->isIntegerConstantExpr(Value, Context)) { - Diag(AssertLoc, diag::err_static_assert_expression_is_not_constant) << - AssertExpr->getSourceRange(); - return 0; - } + if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent()) { + llvm::APSInt Value(32); + if (!AssertExpr->isIntegerConstantExpr(Value, Context)) { + Diag(AssertLoc, diag::err_static_assert_expression_is_not_constant) << + AssertExpr->getSourceRange(); + return 0; + } + if (Value == 0) { + std::string str(AssertMessage->getStrData(), + AssertMessage->getByteLength()); + Diag(AssertLoc, diag::err_static_assert_failed) << str; + } + } + Decl *Decl = StaticAssertDecl::Create(Context, CurContext, AssertLoc, AssertExpr, AssertMessage); - if (Value == 0) { - std::string str(AssertMessage->getStrData(), - AssertMessage->getByteLength()); - Diag(AssertLoc, diag::err_static_assert_failed) << str; - } CurContext->addDecl(Decl); return Decl; |

