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

llvm-svn: 32744
diff --git a/llvm/lib/CodeGen/DwarfWriter.cpp b/llvm/lib/CodeGen/DwarfWriter.cpp
index 2500d58..3690f37 100644
--- a/llvm/lib/CodeGen/DwarfWriter.cpp
+++ b/llvm/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.