Need to walk the derived chain of typedefs to get actual size.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32744 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/DwarfWriter.cpp b/lib/CodeGen/DwarfWriter.cpp
index 2500d58..3690f37 100644
--- a/lib/CodeGen/DwarfWriter.cpp
+++ b/lib/CodeGen/DwarfWriter.cpp
@@ -1539,10 +1539,19 @@
             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.