aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/DwarfWriter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/CodeGen/DwarfWriter.cpp')
-rw-r--r--lib/CodeGen/DwarfWriter.cpp17
1 files changed, 13 insertions, 4 deletions
diff --git a/lib/CodeGen/DwarfWriter.cpp b/lib/CodeGen/DwarfWriter.cpp
index 2500d58fdf..3690f37620 100644
--- a/lib/CodeGen/DwarfWriter.cpp
+++ b/lib/CodeGen/DwarfWriter.cpp
@@ -1539,10 +1539,19 @@ private:
uint64_t FieldAlign = Align;
uint64_t FieldOffset = Offset;
- if (TypeDesc *FromTy = MemberDesc->getFromType()) {
- AddType(Member, FromTy, Unit);
- FieldSize = FromTy->getSize();
- FieldAlign = FromTy->getSize();
+ // Set the member type.
+ TypeDesc *FromTy = MemberDesc->getFromType();
+ AddType(Member, FromTy, Unit);
+
+ // Walk up typedefs until a real size is found.
+ while (FromTy) {
+ if (FromTy->getTag() != DW_TAG_typedef) {
+ FieldSize = FromTy->getSize();
+ FieldAlign = FromTy->getSize();
+ break;
+ }
+
+ FromTy = dyn_cast<DerivedTypeDesc>(FromTy)->getFromType();
}
// Unless we have a bit field.