@@ -1283,12 +1283,16 @@ class IRGenDebugInfoImpl : public IRGenDebugInfo {
12831283 DBuilder.createInheritance (UnsubstitutedType, SuperClassDITy, 0 , 0 ,
12841284 llvm::DINode::FlagZero);
12851285 }
1286+
1287+ auto *OpaqueType = createPointerSizedStruct (
1288+ Scope, Decl ? Decl->getNameStr () : MangledName, File, 0 , Flags,
1289+ MangledName, UnsubstitutedType);
1290+ return OpaqueType;
12861291 }
12871292
1288- auto *OpaqueType =
1289- createOpaqueStruct (Scope, Decl ? Decl->getNameStr () : " " , File, Line,
1290- SizeInBits, AlignInBits, Flags, MangledName,
1291- collectGenericParams (Type), UnsubstitutedType);
1293+ auto *OpaqueType = createOpaqueStruct (
1294+ Scope, " " , File, Line, SizeInBits, AlignInBits, Flags, MangledName,
1295+ collectGenericParams (Type), UnsubstitutedType);
12921296 DBuilder.replaceTemporary (std::move (FwdDecl), OpaqueType);
12931297 return OpaqueType;
12941298 }
@@ -1975,9 +1979,18 @@ class IRGenDebugInfoImpl : public IRGenDebugInfo {
19751979 auto L = getFileAndLocation (Decl);
19761980 unsigned FwdDeclLine = 0 ;
19771981
1978- return createSpecializedStructOrClassType (ClassTy, Decl, Scope, L.File ,
1979- L.Line , SizeInBits, AlignInBits,
1980- Flags, MangledName);
1982+ if (Opts.DebugInfoLevel > IRGenDebugInfoLevel::ASTTypes)
1983+ return createSpecializedStructOrClassType (
1984+ ClassTy, Decl, Scope, L.File , L.Line , SizeInBits, AlignInBits,
1985+ Flags, MangledName);
1986+
1987+ // TODO: We may want to peek at Decl->isObjC() and set this
1988+ // attribute accordingly.
1989+ assert (SizeInBits ==
1990+ CI.getTargetInfo ().getPointerWidth (clang::LangAS::Default));
1991+ return createPointerSizedStruct (
1992+ Scope, Decl ? Decl->getNameStr () : MangledName, L.File , FwdDeclLine,
1993+ Flags, MangledName, SpecificationOf);
19811994 }
19821995
19831996 case TypeKind::Pack:
@@ -2161,14 +2174,8 @@ class IRGenDebugInfoImpl : public IRGenDebugInfo {
21612174 AliasedTy, DbgTy.getAlignment (), DbgTy.hasDefaultAlignment (),
21622175 /* IsMetadataType = */ false , DbgTy.isFixedBuffer (),
21632176 DbgTy.getNumExtraInhabitants ());
2164- auto *TypeDef = DBuilder.createTypedef (getOrCreateType (AliasedDbgTy),
2165- MangledName, L.File , 0 , Scope);
2166- // Bound generic types don't reference their type parameters in ASTTypes
2167- // mode, so we need to artificially keep typealiases alive, since they can
2168- // appear in reflection metadata.
2169- if (Opts.DebugInfoLevel < IRGenDebugInfoLevel::DwarfTypes)
2170- DBuilder.retainType (TypeDef);
2171- return TypeDef;
2177+ return DBuilder.createTypedef (getOrCreateType (AliasedDbgTy), MangledName,
2178+ L.File , 0 , Scope);
21722179 }
21732180
21742181 case TypeKind::Locatable: {
@@ -2504,7 +2511,6 @@ class IRGenDebugInfoImpl : public IRGenDebugInfo {
25042511 // winning over a full definition.
25052512 auto *FwdDecl = DBuilder.createReplaceableCompositeType (
25062513 llvm::dwarf::DW_TAG_structure_type, MangledName, Scope, 0 , 0 ,
2507-
25082514 llvm::dwarf::DW_LANG_Swift);
25092515 FwdDeclTypes.emplace_back (
25102516 std::piecewise_construct, std::make_tuple (MangledName),
0 commit comments