diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 84e92f81a7f5..f2ca2e7c589c 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -140,6 +140,22 @@ llvm::DIType CGDebugInfo::CreateType(const BuiltinType *BT, Offset, /*flags*/ 0, Encoding); } +llvm::DIType CGDebugInfo::CreateType(const ComplexType *Ty, + llvm::DICompileUnit Unit) { + // Bit size, align and offset of the type. + unsigned Encoding = llvm::dwarf::DW_ATE_complex_float; + if (Ty->isComplexIntegerType()) + Encoding = llvm::dwarf::DW_ATE_lo_user; + + uint64_t Size = M->getContext().getTypeSize(Ty); + uint64_t Align = M->getContext().getTypeAlign(Ty); + uint64_t Offset = 0; + + return DebugFactory.CreateBasicType(Unit, "complex", + Unit, 0, Size, Align, + Offset, /*flags*/ 0, Encoding); +} + /// getOrCreateCVRType - Get the CVR qualified type from the cache or create /// a new one if necessary. llvm::DIType CGDebugInfo::CreateCVRType(QualType Ty, llvm::DICompileUnit Unit) { @@ -569,7 +585,6 @@ llvm::DIType CGDebugInfo::getOrCreateType(QualType Ty, #include "clang/AST/TypeNodes.def" assert(false && "Dependent types cannot show up in debug information"); - case Type::Complex: case Type::LValueReference: case Type::RValueReference: case Type::Vector: @@ -589,6 +604,7 @@ llvm::DIType CGDebugInfo::getOrCreateType(QualType Ty, case Type::ObjCInterface: return Slot = CreateType(cast(Ty), Unit); case Type::Builtin: return Slot = CreateType(cast(Ty), Unit); + case Type::Complex: return Slot = CreateType(cast(Ty), Unit); case Type::Pointer: return Slot = CreateType(cast(Ty), Unit); case Type::Typedef: return Slot = CreateType(cast(Ty), Unit); case Type::Record: diff --git a/clang/lib/CodeGen/CGDebugInfo.h b/clang/lib/CodeGen/CGDebugInfo.h index 1798165dfa10..4a59ecaaa57d 100644 --- a/clang/lib/CodeGen/CGDebugInfo.h +++ b/clang/lib/CodeGen/CGDebugInfo.h @@ -49,6 +49,7 @@ class CGDebugInfo { /// Helper functions for getOrCreateType. llvm::DIType CreateType(const BuiltinType *Ty, llvm::DICompileUnit U); + llvm::DIType CreateType(const ComplexType *Ty, llvm::DICompileUnit U); llvm::DIType CreateCVRType(QualType Ty, llvm::DICompileUnit U); llvm::DIType CreateType(const TypedefType *Ty, llvm::DICompileUnit U); llvm::DIType CreateType(const PointerType *Ty, llvm::DICompileUnit U);