diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-05-18 23:01:22 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-05-18 23:01:22 +0000 |
commit | bdb604a80649754a8385b84f20744f1f0a890b03 (patch) | |
tree | a209ebcf5a9e773b3ea630e1cbb2cc39f30db292 /clang/lib/Sema/SemaAttr.cpp | |
parent | a4eca0517472ea463af49ae313a6ede15255446a (diff) | |
download | bcm5719-llvm-bdb604a80649754a8385b84f20744f1f0a890b03.tar.gz bcm5719-llvm-bdb604a80649754a8385b84f20744f1f0a890b03.zip |
Protect isIntegerConstantExpr from seeing type- or value-dependent
expressions in attributes, pragmas.
llvm-svn: 104083
Diffstat (limited to 'clang/lib/Sema/SemaAttr.cpp')
-rw-r--r-- | clang/lib/Sema/SemaAttr.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaAttr.cpp b/clang/lib/Sema/SemaAttr.cpp index 095f537f710..dc7815fa643 100644 --- a/clang/lib/Sema/SemaAttr.cpp +++ b/clang/lib/Sema/SemaAttr.cpp @@ -106,7 +106,9 @@ void Sema::ActOnPragmaPack(PragmaPackKind Kind, IdentifierInfo *Name, // pack(0) is like pack(), which just works out since that is what // we use 0 for in PackAttr. - if (!Alignment->isIntegerConstantExpr(Val, Context) || + if (Alignment->isTypeDependent() || + Alignment->isValueDependent() || + !Alignment->isIntegerConstantExpr(Val, Context) || !(Val == 0 || Val.isPowerOf2()) || Val.getZExtValue() > 16) { Diag(PragmaLoc, diag::warn_pragma_pack_invalid_alignment); |