summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-03-06 20:45:54 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-03-06 20:45:54 +0000
commite03c6102cc85f9b338c3ba740bb36c4ea007db17 (patch)
tree6205e50c10c3836c8d1572819085f5def690c233 /clang/lib/Sema
parentc2fd626cac7f3ec37e26f0a5dc74beb44bb83c6e (diff)
downloadbcm5719-llvm-e03c6102cc85f9b338c3ba740bb36c4ea007db17.tar.gz
bcm5719-llvm-e03c6102cc85f9b338c3ba740bb36c4ea007db17.zip
Handle #pragma pack(0). I left this out of diagnostic because users should
really use pack() instead. - <rdar://problem/6650243> clang warns about '#pragma pack(0)' llvm-svn: 66287
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r--clang/lib/Sema/SemaAttr.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaAttr.cpp b/clang/lib/Sema/SemaAttr.cpp
index bf1e10e5b0b..37962ad1738 100644
--- a/clang/lib/Sema/SemaAttr.cpp
+++ b/clang/lib/Sema/SemaAttr.cpp
@@ -102,8 +102,11 @@ void Sema::ActOnPragmaPack(PragmaPackKind Kind, IdentifierInfo *Name,
unsigned AlignmentVal = 0;
if (Alignment) {
llvm::APSInt Val;
+
+ // pack(0) is like pack(), which just works out since that is what
+ // we use 0 for in PackAttr.
if (!Alignment->isIntegerConstantExpr(Val, Context) ||
- !Val.isPowerOf2() ||
+ !(Val == 0 || Val.isPowerOf2()) ||
Val.getZExtValue() > 16) {
Diag(PragmaLoc, diag::warn_pragma_pack_invalid_alignment);
Alignment->Destroy(Context);
@@ -115,7 +118,6 @@ void Sema::ActOnPragmaPack(PragmaPackKind Kind, IdentifierInfo *Name,
if (PackContext == 0)
PackContext = new PragmaPackStack();
-
PragmaPackStack *Context = static_cast<PragmaPackStack*>(PackContext);
OpenPOWER on IntegriCloud