aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-07-18 21:48:39 +0000
committerAnders Carlsson <andersca@mac.com>2009-07-18 21:48:39 +0000
commita2df41c107d3c5f5bff2d090fab77734e0da735d (patch)
treef9b5c011a3451b1672b78115fb5c1f9a6a027ff2 /lib
parent243a68551ac9ec71bf341e062418e33eb4f286ff (diff)
Refactor field layout into a separate function.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76343 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/AST/RecordLayoutBuilder.cpp14
-rw-r--r--lib/AST/RecordLayoutBuilder.h1
2 files changed, 10 insertions, 5 deletions
diff --git a/lib/AST/RecordLayoutBuilder.cpp b/lib/AST/RecordLayoutBuilder.cpp
index f4257b7d0e..41272fdbfe 100644
--- a/lib/AST/RecordLayoutBuilder.cpp
+++ b/lib/AST/RecordLayoutBuilder.cpp
@@ -32,11 +32,7 @@ void ASTRecordLayoutBuilder::Layout(const RecordDecl *D) {
if (const AlignedAttr *AA = D->getAttr<AlignedAttr>())
UpdateAlignment(AA->getAlignment());
- // Layout each field, for now, just sequentially, respecting alignment. In
- // the future, this will need to be tweakable by targets.
- for (RecordDecl::field_iterator Field = D->field_begin(),
- FieldEnd = D->field_end(); Field != FieldEnd; ++Field)
- LayoutField(*Field);
+ LayoutFields(D);
// Finally, round the size of the total struct up to the alignment of the
// struct itself.
@@ -73,6 +69,14 @@ void ASTRecordLayoutBuilder::Layout(const ObjCInterfaceDecl *D,
FinishLayout();
}
+void ASTRecordLayoutBuilder::LayoutFields(const RecordDecl *D) {
+ // Layout each field, for now, just sequentially, respecting alignment. In
+ // the future, this will need to be tweakable by targets.
+ for (RecordDecl::field_iterator Field = D->field_begin(),
+ FieldEnd = D->field_end(); Field != FieldEnd; ++Field)
+ LayoutField(*Field);
+}
+
void ASTRecordLayoutBuilder::LayoutField(const FieldDecl *D) {
unsigned FieldPacking = StructPacking;
uint64_t FieldOffset = IsUnion ? 0 : Size;
diff --git a/lib/AST/RecordLayoutBuilder.h b/lib/AST/RecordLayoutBuilder.h
index cff407c541..4a71b2b0eb 100644
--- a/lib/AST/RecordLayoutBuilder.h
+++ b/lib/AST/RecordLayoutBuilder.h
@@ -37,6 +37,7 @@ class ASTRecordLayoutBuilder {
void Layout(const ObjCInterfaceDecl *D,
const ObjCImplementationDecl *Impl);
+ void LayoutFields(const RecordDecl *D);
void LayoutField(const FieldDecl *D);
/// FinishLayout - Finalize record layout. Adjust record size based on the