Need to walk the derived chain of typedefs to get actual size.
authorJim Laskey <jlaskey@mac.com>
Fri, 22 Dec 2006 20:03:42 +0000 (20:03 +0000)
committerJim Laskey <jlaskey@mac.com>
Fri, 22 Dec 2006 20:03:42 +0000 (20:03 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32744 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/DwarfWriter.cpp

index 2500d58fdf0eb3b89897e69f1003d2995a093d87..3690f37620edc6db73f0aef1e250443968e17ec4 100644 (file)
@@ -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.