aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaAttr.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2010-05-27 01:53:40 +0000
committerDaniel Dunbar <daniel@zuster.org>2010-05-27 01:53:40 +0000
commit9f21f89c323ccf32f6b27acd2e739f6535440df0 (patch)
treec77e630c4fc0056f525a1f23ba939286aee44479 /lib/Sema/SemaAttr.cpp
parentc76702cc80c1ef8a94d82b62ddcb4ed4f67d5b8c (diff)
Sema: Replace getPragmaPackAlignment with AddAlignmentAttributesForRecord, which
exposes less details. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@104797 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaAttr.cpp')
-rw-r--r--lib/Sema/SemaAttr.cpp16
1 files changed, 10 insertions, 6 deletions
diff --git a/lib/Sema/SemaAttr.cpp b/lib/Sema/SemaAttr.cpp
index 430bd4d6be..ee6aef0629 100644
--- a/lib/Sema/SemaAttr.cpp
+++ b/lib/Sema/SemaAttr.cpp
@@ -88,12 +88,16 @@ void Sema::FreePackedContext() {
PackContext = 0;
}
-/// getPragmaPackAlignment() - Return the current alignment as specified by
-/// the current #pragma pack directive, or 0 if none is currently active.
-unsigned Sema::getPragmaPackAlignment() const {
- if (PackContext)
- return static_cast<PragmaPackStack*>(PackContext)->getAlignment();
- return 0;
+void Sema::AddAlignmentAttributesForRecord(RecordDecl *RD) {
+ // If there is no pack context, we don't need any attributes.
+ if (!PackContext)
+ return;
+
+ PragmaPackStack *Stack = static_cast<PragmaPackStack*>(PackContext);
+
+ // Otherwise, check to see if we need a max field alignment attribute.
+ if (unsigned Alignment = Stack->getAlignment())
+ RD->addAttr(::new (Context) MaxFieldAlignmentAttr(Alignment * 8));
}
void Sema::ActOnPragmaOptionsAlign(PragmaOptionsAlignKind Kind,