diff options
Diffstat (limited to 'llvm/lib/CodeGen/DwarfWriter.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/DwarfWriter.cpp | 17 | 
1 files changed, 13 insertions, 4 deletions
| diff --git a/llvm/lib/CodeGen/DwarfWriter.cpp b/llvm/lib/CodeGen/DwarfWriter.cpp index 2500d58fdf0..3690f37620e 100644 --- a/llvm/lib/CodeGen/DwarfWriter.cpp +++ b/llvm/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. | 

