diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2008-05-21 03:39:11 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2008-05-21 03:39:11 +0000 |
commit | 86346ede95ae02d1c0e28865291cacba9ad327bb (patch) | |
tree | 183c096c66005e83bbdb8a2bf4eaef597afd6b82 /clang/lib/Sema/SemaDecl.cpp | |
parent | bcfa2d75d7df633db45ae038628fc9ff62c2ca95 (diff) | |
download | bcm5719-llvm-86346ede95ae02d1c0e28865291cacba9ad327bb.tar.gz bcm5719-llvm-86346ede95ae02d1c0e28865291cacba9ad327bb.zip |
Fix a couple of bugs found by Neil Booth in the const-ness checking.
llvm-svn: 51361
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index a050ab2d4bf..b0b50bab962 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -1004,8 +1004,13 @@ bool Sema::CheckAddressConstantExpressionLValue(const Expr* Init) { return cast<CompoundLiteralExpr>(Init)->isFileScope(); case Expr::DeclRefExprClass: { const Decl *D = cast<DeclRefExpr>(Init)->getDecl(); - if (const VarDecl *VD = dyn_cast<VarDecl>(D)) - return VD->hasGlobalStorage(); + if (const VarDecl *VD = dyn_cast<VarDecl>(D)) { + if (VD->hasGlobalStorage()) + return false; + Diag(Init->getExprLoc(), + diag::err_init_element_not_constant, Init->getSourceRange()); + return true; + } if (isa<FunctionDecl>(D)) return false; Diag(Init->getExprLoc(), @@ -1032,7 +1037,7 @@ bool Sema::CheckAddressConstantExpressionLValue(const Expr* Init) { // C99 6.6p9 if (Exp->getOpcode() == UnaryOperator::Deref) - return CheckAddressConstantExpressionLValue(Exp->getSubExpr()); + return CheckAddressConstantExpression(Exp->getSubExpr()); Diag(Init->getExprLoc(), diag::err_init_element_not_constant, Init->getSourceRange()); |