llvm.org GIT mirror llvm / de74840
DebugInfo: Remove MDString-based type references Eliminate DITypeIdentifierMap and make DITypeRef a thin wrapper around DIType*. It is no longer legal to refer to a DICompositeType by its 'identifier:', and DIBuilder no longer retains all types with an 'identifier:' automatically. Aside from the bitcode upgrade, this is mainly removing logic to resolve an MDString-based reference to an actualy DIType. The commits leading up to this have made the implicit type map in DICompileUnit's 'retainedTypes:' field superfluous. This does not remove DITypeRef, DIScopeRef, DINodeRef, and DITypeRefArray, or stop using them in DI-related metadata. Although as of this commit they aren't serving a useful purpose, there are patchces under review to reuse them for CodeView support. The tests in LLVM were updated with deref-typerefs.sh, which is attached to the thread "[RFC] Lazy-loading of debug info metadata": http://lists.llvm.org/pipermail/llvm-dev/2016-April/098318.html git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@267296 91177308-0d34-0410-b5e6-96231b3b80d8 Duncan P. N. Exon Smith 4 years ago
77 changed file(s) with 734 addition(s) and 830 deletion(s). Raw diff Collapse all Expand all
40184018 DW_TAG_volatile_type = 53
40194019 DW_TAG_restrict_type = 55
40204020
4021 .. _DIDerivedTypeMember:
4022
40214023 ``DW_TAG_member`` is used to define a member of a :ref:`composite type
40224024 `. The type of the member is the ``baseType:``. The
4023 ``offset:`` is the member's bit offset. If the composite type has a non-empty
4024 ``identifier:``, then it respects ODR rules. In that case, the ``scope:``
4025 reference will be a :ref:`metadata string `, and the member
4026 will be uniqued solely based on its ``name:`` and ``scope:``.
4025 ``offset:`` is the member's bit offset. If the composite type has an ODR
4026 ``identifier:`` and does not set ``flags: DIFwdDecl``, then the member is
4027 uniqued based only on its ``name:`` and ``scope:``.
40274028
40284029 ``DW_TAG_inheritance`` and ``DW_TAG_friend`` are used in the ``elements:``
40294030 field of :ref:`composite types ` to describe parents and
40464047 structures and unions. ``elements:`` points to a tuple of the composed types.
40474048
40484049 If the source language supports ODR, the ``identifier:`` field gives the unique
4049 identifier used for type merging between modules. When specified, other types
4050 can refer to composite types indirectly via a :ref:`metadata string
4051 ` that matches their identifier.
4050 identifier used for type merging between modules. When specified,
4051 :ref:`subprogram declarations ` and :ref:`member
4052 derived types ` that reference the ODR-type in their
4053 ``scope:`` change uniquing rules.
40524054
40534055 For a given ``identifier:``, there should only be a single composite type that
40544056 does not have ``flags: DIFlagFwdDecl`` set. LLVM tools that link modules
41774179 that must be retained, even if their IR counterparts are optimized out of
41784180 the IR. The ``type:`` field must point at an :ref:`DISubroutineType`.
41794181
4182 .. _DISubprogramDeclaration:
4183
41804184 When ``isDefinition: false``, subprograms describe a declaration in the type
4181 tree as opposed to a definition of a funciton. If the scope is a
4182 :ref:`metadata string ` then the composite type follows ODR
4183 rules, and the subprogram declaration is uniqued based only on its
4184 ``linkageName:`` and ``scope:``.
4185 tree as opposed to a definition of a function. If the scope is a composite
4186 type with an ODR ``identifier:`` and that does not set ``flags: DIFwdDecl``,
4187 then the subprogram declaration is uniqued based only on its ``linkageName:``
4188 and ``scope:``.
41854189
41864190 .. code-block:: llvm
41874191
3232 template
3333 class DenseMap;
3434
35 /// \brief Maps from type identifier to the actual MDNode.
36 typedef DenseMap DITypeIdentifierMap;
37
3835 /// \brief Find subprogram that is enclosing this scope.
3936 DISubprogram *getDISubprogram(const MDNode *Scope);
40
41 /// \brief Generate map by visiting all retained types.
42 DITypeIdentifierMap generateDITypeIdentifierMap(const Module &M);
4337
4438 /// \brief Strip debug info in the module if it exists.
4539 ///
6256 /// used by the CUs.
6357 class DebugInfoFinder {
6458 public:
65 DebugInfoFinder() : TypeMapInitialized(false) {}
66
6759 /// \brief Process entire module and collect debug info anchors.
6860 void processModule(const Module &M);
6961
131123 SmallVector TYs;
132124 SmallVector Scopes;
133125 SmallPtrSet NodesSeen;
134 DITypeIdentifierMap TypeIdentifierMap;
135
136 /// \brief Specify if TypeIdentifierMap is initialized.
137 bool TypeMapInitialized;
138126 };
139127
140128 } // end namespace llvm
4444
4545 template class Optional;
4646
47 /// \brief Pointer union between a subclass of DINode and MDString.
47 /// Holds a subclass of DINode.
4848 ///
49 /// \a DICompositeType can be referenced via an \a MDString unique identifier.
50 /// This class allows some type safety in the face of that, requiring either a
51 /// node of a particular type or an \a MDString.
49 /// FIXME: This class doesn't currently make much sense. Previously it was a
50 /// union beteen MDString (for ODR-uniqued types) and things like DIType. To
51 /// support CodeView work, it wasn't deleted outright when MDString-based type
52 /// references were deleted; we'll soon need a similar concept for CodeView
53 /// DITypeIndex.
5254 template class TypedDINodeRef {
5355 const Metadata *MD = nullptr;
5456
5557 public:
5658 TypedDINodeRef() = default;
5759 TypedDINodeRef(std::nullptr_t) {}
58
59 /// \brief Construct from a raw pointer.
60 TypedDINodeRef(const T *MD) : MD(MD) {}
61
6062 explicit TypedDINodeRef(const Metadata *MD) : MD(MD) {
61 assert((!MD || isa<MDString>(MD) || isa(MD)) && "Expected valid ref");
63 assert((!MD || isa<T>(MD)) && "Expected valid type ref");
6264 }
6365
6466 template
7072
7173 operator Metadata *() const { return const_cast(MD); }
7274
75 T *resolve() const { return const_cast(cast_or_null(MD)); }
76
7377 bool operator==(const TypedDINodeRef &X) const { return MD == X.MD; }
7478 bool operator!=(const TypedDINodeRef &X) const { return MD != X.MD; }
75
76 /// \brief Create a reference.
77 ///
78 /// Get a reference to \c N, using an \a MDString reference if available.
79 static TypedDINodeRef get(const T *N);
80
81 template T *resolve(const MapTy &Map) const {
82 if (!MD)
83 return nullptr;
84
85 if (auto *Typed = dyn_cast(MD))
86 return const_cast(Typed);
87
88 auto *S = cast(MD);
89 auto I = Map.find(S);
90 assert(I != Map.end() && "Missing identifier in type map");
91 return cast(I->second);
92 }
9379 };
9480
9581 typedef TypedDINodeRef DINodeRef;
199185 /// any remaining (unrecognized) bits.
200186 static unsigned splitFlags(unsigned Flags,
201187 SmallVectorImpl &SplitFlags);
202
203 DINodeRef getRef() const { return DINodeRef::get(this); }
204188
205189 static bool classof(const Metadata *MD) {
206190 switch (MD->getMetadataID()) {
436420 : static_cast(getOperand(0));
437421 }
438422
439 DIScopeRef getRef() const { return DIScopeRef::get(this); }
440
441423 static bool classof(const Metadata *MD) {
442424 switch (MD->getMetadataID()) {
443425 default:
600582 bool isLValueReference() const { return getFlags() & FlagLValueReference; }
601583 bool isRValueReference() const { return getFlags() & FlagRValueReference; }
602584 bool isExternalTypeRef() const { return getFlags() & FlagExternalTypeRef; }
603
604 DITypeRef getRef() const { return DITypeRef::get(this); }
605585
606586 static bool classof(const Metadata *MD) {
607587 switch (MD->getMetadataID()) {
931911 return MD->getMetadataID() == DICompositeTypeKind;
932912 }
933913 };
934
935 template TypedDINodeRef TypedDINodeRef::get(const T *N) {
936 if (N)
937 if (auto *Composite = dyn_cast(N))
938 if (auto *S = Composite->getRawIdentifier())
939 return TypedDINodeRef(S);
940 return TypedDINodeRef(N);
941 }
942914
943915 /// \brief Type array for a subprogram.
944916 ///
113113 /// move) on resize, and TrackingMDRef is very expensive to copy.
114114 SmallVector MetadataPtrs;
115115
116 /// Structures for resolving old type refs.
117 struct {
118 SmallDenseMap Unknown;
119 SmallDenseMap Final;
120 SmallDenseMap FwdDecls;
121 std::vector> Arrays;
122 } OldTypeRefs;
123
116124 LLVMContext &Context;
117125 public:
118126 BitcodeReaderMetadataList(LLVMContext &C)
158166 void assignValue(Metadata *MD, unsigned Idx);
159167 void tryToResolveCycles();
160168 bool hasFwdRefs() const { return AnyFwdRefs; }
169
170 /// Upgrade a type that had an MDString reference.
171 void addTypeRef(MDString &UUID, DICompositeType &CT);
172
173 /// Upgrade a type that had an MDString reference.
174 Metadata *upgradeTypeRef(Metadata *MaybeUUID);
175
176 /// Upgrade a type ref array that may have MDString references.
177 Metadata *upgradeTypeRefArray(Metadata *MaybeTuple);
178
179 private:
180 Metadata *resolveTypeRefArray(Metadata *MaybeTuple);
161181 };
162182
163183 class BitcodeReader : public GVMaterializer {
11171137 }
11181138
11191139 void BitcodeReaderMetadataList::tryToResolveCycles() {
1140 if (NumFwdRefs)
1141 // Still forward references... can't resolve cycles.
1142 return;
1143
1144 // Give up on finding a full definition for any forward decls that remain.
1145 for (const auto &Ref : OldTypeRefs.FwdDecls)
1146 OldTypeRefs.Final.insert(Ref);
1147 OldTypeRefs.FwdDecls.clear();
1148
1149 // Upgrade from old type ref arrays. In strange cases, this could add to
1150 // OldTypeRefs.Unknown.
1151 for (const auto &Array : OldTypeRefs.Arrays)
1152 Array.second->replaceAllUsesWith(resolveTypeRefArray(Array.first.get()));
1153
1154 // Replace old string-based type refs with the resolved node, if possible.
1155 // If we haven't seen the node, leave it to the verifier to complain about
1156 // the invalid string reference.
1157 for (const auto &Ref : OldTypeRefs.Unknown)
1158 if (DICompositeType *CT = OldTypeRefs.Final.lookup(Ref.first))
1159 Ref.second->replaceAllUsesWith(CT);
1160 else
1161 Ref.second->replaceAllUsesWith(Ref.first);
1162 OldTypeRefs.Unknown.clear();
1163
11201164 if (!AnyFwdRefs)
11211165 // Nothing to do.
1122 return;
1123
1124 if (NumFwdRefs)
1125 // Still forward references... can't resolve cycles.
11261166 return;
11271167
11281168 // Resolve any cycles.
11381178
11391179 // Make sure we return early again until there's another forward ref.
11401180 AnyFwdRefs = false;
1181 }
1182
1183 void BitcodeReaderMetadataList::addTypeRef(MDString &UUID,
1184 DICompositeType &CT) {
1185 assert(CT.getRawIdentifier() == &UUID && "Mismatched UUID");
1186 if (CT.isForwardDecl())
1187 OldTypeRefs.FwdDecls.insert(std::make_pair(&UUID, &CT));
1188 else
1189 OldTypeRefs.Final.insert(std::make_pair(&UUID, &CT));
1190 }
1191
1192 Metadata *BitcodeReaderMetadataList::upgradeTypeRef(Metadata *MaybeUUID) {
1193 auto *UUID = dyn_cast_or_null(MaybeUUID);
1194 if (LLVM_LIKELY(!UUID))
1195 return MaybeUUID;
1196
1197 if (auto *CT = OldTypeRefs.Final.lookup(UUID))
1198 return CT;
1199
1200 auto &Ref = OldTypeRefs.Unknown[UUID];
1201 if (!Ref)
1202 Ref = MDNode::getTemporary(Context, None);
1203 return Ref.get();
1204 }
1205
1206 Metadata *BitcodeReaderMetadataList::upgradeTypeRefArray(Metadata *MaybeTuple) {
1207 auto *Tuple = dyn_cast_or_null(MaybeTuple);
1208 if (!Tuple || Tuple->isDistinct())
1209 return MaybeTuple;
1210
1211 // Look through the array immediately if possible.
1212 if (!Tuple->isTemporary())
1213 return resolveTypeRefArray(Tuple);
1214
1215 // Create and return a placeholder to use for now. Eventually
1216 // resolveTypeRefArrays() will be resolve this forward reference.
1217 OldTypeRefs.Arrays.emplace_back(
1218 std::piecewise_construct, std::make_tuple(Tuple),
1219 std::make_tuple(MDTuple::getTemporary(Context, None)));
1220 return OldTypeRefs.Arrays.back().second.get();
1221 }
1222
1223 Metadata *BitcodeReaderMetadataList::resolveTypeRefArray(Metadata *MaybeTuple) {
1224 auto *Tuple = dyn_cast_or_null(MaybeTuple);
1225 if (!Tuple || Tuple->isDistinct())
1226 return MaybeTuple;
1227
1228 // Look through the DITypeRefArray, upgrading each DITypeRef.
1229 SmallVector Ops;
1230 Ops.reserve(Tuple->getNumOperands());
1231 for (Metadata *MD : Tuple->operands())
1232 Ops.push_back(upgradeTypeRef(MD));
1233
1234 return MDTuple::get(Context, Ops);
11411235 }
11421236
11431237 Type *BitcodeReader::getTypeByID(unsigned ID) {
20202114 return cast_or_null(getMDOrNull(ID));
20212115 };
20222116
2117 // Support for old type refs.
2118 auto getDITypeRefOrNull = [&](unsigned ID) {
2119 return MetadataList.upgradeTypeRef(getMDOrNull(ID));
2120 };
2121
20232122 #define GET_OR_DISTINCT(CLASS, ARGS) \
20242123 (IsDistinct ? CLASS::getDistinct ARGS : CLASS::get ARGS)
20252124
22332332 GET_OR_DISTINCT(DIDerivedType,
22342333 (Context, Record[1], getMDString(Record[2]),
22352334 getMDOrNull(Record[3]), Record[4],
2236 getMDOrNull(Record[5]), getMDOrNull(Record[6]),
2237 Record[7], Record[8], Record[9], Record[10],
2238 getMDOrNull(Record[11]))),
2335 getDITypeRefOrNull(Record[5]),
2336 getDITypeRefOrNull(Record[6]), Record[7], Record[8],
2337 Record[9], Record[10], getMDOrNull(Record[11]))),
22392338 NextMetadataNo++);
22402339 break;
22412340 }
22452344
22462345 // If we have a UUID and this is not a forward declaration, lookup the
22472346 // mapping.
2248 IsDistinct = Record[0];
2347 IsDistinct = Record[0] & 0x1;
2348 bool IsNotUsedInTypeRef = Record[0] >= 2;
22492349 unsigned Tag = Record[1];
22502350 MDString *Name = getMDString(Record[2]);
22512351 Metadata *File = getMDOrNull(Record[3]);
22522352 unsigned Line = Record[4];
2253 Metadata *Scope = getMDOrNull(Record[5]);
2254 Metadata *BaseType = getMDOrNull(Record[6]);
2353 Metadata *Scope = getDITypeRefOrNull(Record[5]);
2354 Metadata *BaseType = getDITypeRefOrNull(Record[6]);
22552355 uint64_t SizeInBits = Record[7];
22562356 uint64_t AlignInBits = Record[8];
22572357 uint64_t OffsetInBits = Record[9];
22582358 unsigned Flags = Record[10];
22592359 Metadata *Elements = getMDOrNull(Record[11]);
22602360 unsigned RuntimeLang = Record[12];
2261 Metadata *VTableHolder = getMDOrNull(Record[13]);
2361 Metadata *VTableHolder = getDITypeRefOrNull(Record[13]);
22622362 Metadata *TemplateParams = getMDOrNull(Record[14]);
22632363 auto *Identifier = getMDString(Record[15]);
22642364 DICompositeType *CT = nullptr;
22752375 SizeInBits, AlignInBits, OffsetInBits, Flags,
22762376 Elements, RuntimeLang, VTableHolder,
22772377 TemplateParams, Identifier));
2378 if (!IsNotUsedInTypeRef && Identifier)
2379 MetadataList.addTypeRef(*Identifier, *cast(CT));
22782380
22792381 MetadataList.assignValue(CT, NextMetadataNo++);
22802382 break;
22832385 if (Record.size() != 3)
22842386 return error("Invalid record");
22852387
2286 IsDistinct = Record[0];
2388 IsDistinct = Record[0] & 0x1;
2389 bool IsOldTypeRefArray = Record[0] < 2;
2390 Metadata *Types = getMDOrNull(Record[2]);
2391 if (LLVM_UNLIKELY(IsOldTypeRefArray))
2392 Types = MetadataList.upgradeTypeRefArray(Types);
2393
22872394 MetadataList.assignValue(
2288 GET_OR_DISTINCT(DISubroutineType,
2289 (Context, Record[1], getMDOrNull(Record[2]))),
2395 GET_OR_DISTINCT(DISubroutineType, (Context, Record[1], Types)),
22902396 NextMetadataNo++);
22912397 break;
22922398 }
23532459 bool HasCU = Offset && !HasFn;
23542460 DISubprogram *SP = GET_OR_DISTINCT(
23552461 DISubprogram,
2356 (Context, getMDOrNull(Record[1]), getMDString(Record[2]),
2462 (Context, getDITypeRefOrNull(Record[1]), getMDString(Record[2]),
23572463 getMDString(Record[3]), getMDOrNull(Record[4]), Record[5],
23582464 getMDOrNull(Record[6]), Record[7], Record[8], Record[9],
2359 getMDOrNull(Record[10]), Record[11], Record[12], Record[13],
2465 getDITypeRefOrNull(Record[10]), Record[11], Record[12], Record[13],
23602466 Record[14], HasCU ? CUorFn : nullptr,
23612467 getMDOrNull(Record[15 + Offset]), getMDOrNull(Record[16 + Offset]),
23622468 getMDOrNull(Record[17 + Offset])));
24432549 IsDistinct = Record[0];
24442550 MetadataList.assignValue(GET_OR_DISTINCT(DITemplateTypeParameter,
24452551 (Context, getMDString(Record[1]),
2446 getMDOrNull(Record[2]))),
2552 getDITypeRefOrNull(Record[2]))),
24472553 NextMetadataNo++);
24482554 break;
24492555 }
24552561 MetadataList.assignValue(
24562562 GET_OR_DISTINCT(DITemplateValueParameter,
24572563 (Context, Record[1], getMDString(Record[2]),
2458 getMDOrNull(Record[3]), getMDOrNull(Record[4]))),
2564 getDITypeRefOrNull(Record[3]),
2565 getMDOrNull(Record[4]))),
24592566 NextMetadataNo++);
24602567 break;
24612568 }
24692576 (Context, getMDOrNull(Record[1]),
24702577 getMDString(Record[2]), getMDString(Record[3]),
24712578 getMDOrNull(Record[4]), Record[5],
2472 getMDOrNull(Record[6]), Record[7], Record[8],
2579 getDITypeRefOrNull(Record[6]), Record[7], Record[8],
24732580 getMDOrNull(Record[9]), getMDOrNull(Record[10]))),
24742581 NextMetadataNo++);
24752582 break;
24882595 (Context, getMDOrNull(Record[1 + HasTag]),
24892596 getMDString(Record[2 + HasTag]),
24902597 getMDOrNull(Record[3 + HasTag]), Record[4 + HasTag],
2491 getMDOrNull(Record[5 + HasTag]), Record[6 + HasTag],
2492 Record[7 + HasTag])),
2598 getDITypeRefOrNull(Record[5 + HasTag]),
2599 Record[6 + HasTag], Record[7 + HasTag])),
24932600 NextMetadataNo++);
24942601 break;
24952602 }
25142621 (Context, getMDString(Record[1]),
25152622 getMDOrNull(Record[2]), Record[3],
25162623 getMDString(Record[4]), getMDString(Record[5]),
2517 Record[6], getMDOrNull(Record[7]))),
2624 Record[6], getDITypeRefOrNull(Record[7]))),
25182625 NextMetadataNo++);
25192626 break;
25202627 }
25262633 MetadataList.assignValue(
25272634 GET_OR_DISTINCT(DIImportedEntity,
25282635 (Context, Record[1], getMDOrNull(Record[2]),
2529 getMDOrNull(Record[3]), Record[4],
2636 getDITypeRefOrNull(Record[3]), Record[4],
25302637 getMDString(Record[5]))),
25312638 NextMetadataNo++);
25322639 break;
12721272 void ModuleBitcodeWriter::writeDICompositeType(
12731273 const DICompositeType *N, SmallVectorImpl &Record,
12741274 unsigned Abbrev) {
1275 Record.push_back(N->isDistinct());
1275 const unsigned IsNotUsedInOldTypeRef = 0x2;
1276 Record.push_back(IsNotUsedInOldTypeRef | N->isDistinct());
12761277 Record.push_back(N->getTag());
12771278 Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
12781279 Record.push_back(VE.getMetadataOrNullID(N->getFile()));
12961297 void ModuleBitcodeWriter::writeDISubroutineType(
12971298 const DISubroutineType *N, SmallVectorImpl &Record,
12981299 unsigned Abbrev) {
1299 Record.push_back(N->isDistinct());
1300 const unsigned HasNoOldTypeRefs = 0x2;
1301 Record.push_back(HasNoOldTypeRefs | N->isDistinct());
13001302 Record.push_back(N->getFlags());
13011303 Record.push_back(VE.getMetadataOrNullID(N->getTypeArray().get()));
13021304
144144
145145 //===----------------------------------------------------------------------===//
146146
147 /// resolve - Look in the DwarfDebug map for the MDNode that
148 /// corresponds to the reference.
149 template T *DbgVariable::resolve(TypedDINodeRef Ref) const {
150 return DD->resolve(Ref);
151 }
152
153147 bool DbgVariable::isBlockByrefVariable() const {
154148 assert(Var && "Invalid complex DbgVariable!");
155 return Var->getType()
156 .resolve(DD->getTypeIdentifierMap())
157 ->isBlockByrefStruct();
149 return Var->getType().resolve()->isBlockByrefStruct();
158150 }
159151
160152 const DIType *DbgVariable::getType() const {
161 DIType *Ty = Var->getType().resolve(DD->getTypeIdentifierMap());
153 DIType *Ty = Var->getType().resolve();
162154 // FIXME: isBlockByrefVariable should be reformulated in terms of complex
163155 // addresses instead.
164156 if (Ty->isBlockByrefStruct()) {
473465
474466 const Module *M = MMI->getModule();
475467
476 TypeIdentifierMap = generateDITypeIdentifierMap(*M);
477468 unsigned NumDebugCUs = 0;
478469 for (DICompileUnit *CUNode : M->debug_compile_units()) {
479470 (void)CUNode;
493484 for (auto *Ty : CUNode->getEnumTypes()) {
494485 // The enum types array by design contains pointers to
495486 // MDNodes rather than DIRefs. Unique them here.
496 CU.getOrCreateTypeDIE(cast(resolve(Ty->getRef())));
487 CU.getOrCreateTypeDIE(cast(Ty));
497488 }
498489 for (auto *Ty : CUNode->getRetainedTypes()) {
499490 // The retained types array by design contains pointers to
500491 // MDNodes rather than DIRefs. Unique them here.
501 if (DIType *RT = dyn_cast(resolve(Ty->getRef())))
492 if (DIType *RT = dyn_cast(Ty))
502493 if (!RT->isExternalTypeRef())
503494 // There is no point in force-emitting a forward declaration.
504495 CU.getOrCreateTypeDIE(RT);
704695
705696 void DwarfDebug::createAbstractVariable(const DILocalVariable *Var,
706697 LexicalScope *Scope) {
707 auto AbsDbgVariable = make_unique(Var, /* IA */ nullptr, this);
698 auto AbsDbgVariable = make_unique(Var, /* IA */ nullptr);
708699 InfoHolder.addScopeVariable(Scope, AbsDbgVariable.get());
709700 AbstractVariables[Var] = std::move(AbsDbgVariable);
710701 }
748739 continue;
749740
750741 ensureAbstractVariableIsCreatedIfScoped(Var, Scope->getScopeNode());
751 auto RegVar = make_unique(Var.first, Var.second, this);
742 auto RegVar = make_unique(Var.first, Var.second);
752743 RegVar->initializeMMI(VI.Expr, VI.Slot);
753744 if (InfoHolder.addScopeVariable(Scope, RegVar.get()))
754745 ConcreteVariables.push_back(std::move(RegVar));
922913 DbgVariable *DwarfDebug::createConcreteVariable(LexicalScope &Scope,
923914 InlinedVariable IV) {
924915 ensureAbstractVariableIsCreatedIfScoped(IV, Scope.getScopeNode());
925 ConcreteVariables.push_back(
926 make_unique(IV.first, IV.second, this));
916 ConcreteVariables.push_back(make_unique(IV.first, IV.second));
927917 InfoHolder.addScopeVariable(&Scope, ConcreteVariables.back().get());
928918 return ConcreteVariables.back().get();
929919 }
6767 unsigned DebugLocListIndex = ~0u; /// Offset in DebugLocs.
6868 const MachineInstr *MInsn = nullptr; /// DBG_VALUE instruction.
6969 SmallVector FrameIndex; /// Frame index.
70 DwarfDebug *DD;
7170
7271 public:
7372 /// Construct a DbgVariable.
7473 ///
7574 /// Creates a variable without any DW_AT_location. Call \a initializeMMI()
7675 /// for MMI entries, or \a initializeDbgValue() for DBG_VALUE instructions.
77 DbgVariable(const DILocalVariable *V, const DILocation *IA, DwarfDebug *DD)
78 : Var(V), IA(IA), DD(DD) {}
76 DbgVariable(const DILocalVariable *V, const DILocation *IA)
77 : Var(V), IA(IA) {}
7978
8079 /// Initialize from the MMI table.
8180 void initializeMMI(const DIExpression *E, int FI) {
176175 const DIType *getType() const;
177176
178177 private:
179 /// Look in the DwarfDebug map for the MDNode that
180 /// corresponds to the reference.
181 template T *resolve(TypedDINodeRef Ref) const;
178 template T *resolve(TypedDINodeRef Ref) const {
179 return Ref.resolve();
180 }
182181 };
183182
184183
253252
254253 /// Version of dwarf we're emitting.
255254 unsigned DwarfVersion;
256
257 /// Maps from a type identifier to the actual MDNode.
258 DITypeIdentifierMap TypeIdentifierMap;
259255
260256 /// DWARF5 Experimental Options
261257 /// @{
524520
525521 /// Find the MDNode for the given reference.
526522 template T *resolve(TypedDINodeRef Ref) const {
527 return Ref.resolve(TypeIdentifierMap);
528 }
529
530 /// Return the TypeIdentifierMap.
531 const DITypeIdentifierMap &getTypeIdentifierMap() const {
532 return TypeIdentifierMap;
523 return Ref.resolve();
533524 }
534525
535526 /// Find the DwarfCompileUnit for the given CU Die.
717717 return nullptr;
718718
719719 auto *Ty = cast(TyNode);
720 assert(Ty == resolve(Ty->getRef()) &&
721 "type was not uniqued, possible ODR violation.");
722720
723721 // DW_TAG_restrict_type is not supported in DWARF2
724722 if (Ty->getTag() == dwarf::DW_TAG_restrict_type && DD->getDwarfVersion() <= 2)
327327 /// Look in the DwarfDebug map for the MDNode that corresponds to the
328328 /// reference.
329329 template T *resolve(TypedDINodeRef Ref) const {
330 return DD->resolve(Ref);
330 return Ref.resolve();
331331 }
332332
333333 private:
205205 // Make sure to use the unique identifier based metadata reference for
206206 // types that have one.
207207 return ::createImportedModule(VMContext, dwarf::DW_TAG_imported_declaration,
208 Context, DINodeRef::get(Decl), Line, Name,
209 AllImportedModules);
208 Context, Decl, Line, Name, AllImportedModules);
210209 }
211210
212211 DIFile *DIBuilder::createFile(StringRef Filename, StringRef Directory) {
236235 }
237236
238237 DIDerivedType *DIBuilder::createQualifiedType(unsigned Tag, DIType *FromTy) {
239 return DIDerivedType::get(VMContext, Tag, "", nullptr, 0, nullptr,
240 DITypeRef::get(FromTy), 0, 0, 0, 0);
238 return DIDerivedType::get(VMContext, Tag, "", nullptr, 0, nullptr, FromTy, 0,
239 0, 0, 0);
241240 }
242241
243242 DIDerivedType *DIBuilder::createPointerType(DIType *PointeeTy,
246245 StringRef Name) {
247246 // FIXME: Why is there a name here?
248247 return DIDerivedType::get(VMContext, dwarf::DW_TAG_pointer_type, Name,
249 nullptr, 0, nullptr, DITypeRef::get(PointeeTy),
250 SizeInBits, AlignInBits, 0, 0);
248 nullptr, 0, nullptr, PointeeTy, SizeInBits,
249 AlignInBits, 0, 0);
251250 }
252251
253252 DIDerivedType *DIBuilder::createMemberPointerType(DIType *PointeeTy,
255254 uint64_t SizeInBits,
256255 uint64_t AlignInBits) {
257256 return DIDerivedType::get(VMContext, dwarf::DW_TAG_ptr_to_member_type, "",
258 nullptr, 0, nullptr, DITypeRef::get(PointeeTy),
259 SizeInBits, AlignInBits, 0, 0,
260 DITypeRef::get(Base));
257 nullptr, 0, nullptr, PointeeTy, SizeInBits,
258 AlignInBits, 0, 0, Base);
261259 }
262260
263261 DIDerivedType *DIBuilder::createReferenceType(unsigned Tag, DIType *RTy,
264262 uint64_t SizeInBits,
265263 uint64_t AlignInBits) {
266264 assert(RTy && "Unable to create reference type");
267 return DIDerivedType::get(VMContext, Tag, "", nullptr, 0, nullptr,
268 DITypeRef::get(RTy), SizeInBits, AlignInBits, 0, 0);
265 return DIDerivedType::get(VMContext, Tag, "", nullptr, 0, nullptr, RTy,
266 SizeInBits, AlignInBits, 0, 0);
269267 }
270268
271269 DIDerivedType *DIBuilder::createTypedef(DIType *Ty, StringRef Name,
272270 DIFile *File, unsigned LineNo,
273271 DIScope *Context) {
274272 return DIDerivedType::get(VMContext, dwarf::DW_TAG_typedef, Name, File,
275 LineNo,
276 DIScopeRef::get(getNonCompileUnitScope(Context)),
277 DITypeRef::get(Ty), 0, 0, 0, 0);
273 LineNo, getNonCompileUnitScope(Context), Ty, 0, 0,
274 0, 0);
278275 }
279276
280277 DIDerivedType *DIBuilder::createFriend(DIType *Ty, DIType *FriendTy) {
281278 assert(Ty && "Invalid type!");
282279 assert(FriendTy && "Invalid friend type!");
283 return DIDerivedType::get(VMContext, dwarf::DW_TAG_friend, "", nullptr, 0,
284 DITypeRef::get(Ty), DITypeRef::get(FriendTy), 0, 0,
285 0, 0);
280 return DIDerivedType::get(VMContext, dwarf::DW_TAG_friend, "", nullptr, 0, Ty,
281 FriendTy, 0, 0, 0, 0);
286282 }
287283
288284 DIDerivedType *DIBuilder::createInheritance(DIType *Ty, DIType *BaseTy,
290286 unsigned Flags) {
291287 assert(Ty && "Unable to create inheritance");
292288 return DIDerivedType::get(VMContext, dwarf::DW_TAG_inheritance, "", nullptr,
293 0, DITypeRef::get(Ty), DITypeRef::get(BaseTy), 0, 0,
294 BaseOffset, Flags);
289 0, Ty, BaseTy, 0, 0, BaseOffset, Flags);
295290 }
296291
297292 DIDerivedType *DIBuilder::createMemberType(DIScope *Scope, StringRef Name,
300295 uint64_t AlignInBits,
301296 uint64_t OffsetInBits,
302297 unsigned Flags, DIType *Ty) {
303 return DIDerivedType::get(
304 VMContext, dwarf::DW_TAG_member, Name, File, LineNumber,
305 DIScopeRef::get(getNonCompileUnitScope(Scope)), DITypeRef::get(Ty),
306 SizeInBits, AlignInBits, OffsetInBits, Flags);
298 return DIDerivedType::get(VMContext, dwarf::DW_TAG_member, Name, File,
299 LineNumber, getNonCompileUnitScope(Scope), Ty,
300 SizeInBits, AlignInBits, OffsetInBits, Flags);
307301 }
308302
309303 static ConstantAsMetadata *getConstantOrNull(Constant *C) {
318312 DIType *Ty, unsigned Flags,
319313 llvm::Constant *Val) {
320314 Flags |= DINode::FlagStaticMember;
321 return DIDerivedType::get(
322 VMContext, dwarf::DW_TAG_member, Name, File, LineNumber,
323 DIScopeRef::get(getNonCompileUnitScope(Scope)), DITypeRef::get(Ty), 0, 0,
324 0, Flags, getConstantOrNull(Val));
315 return DIDerivedType::get(VMContext, dwarf::DW_TAG_member, Name, File,
316 LineNumber, getNonCompileUnitScope(Scope), Ty, 0, 0,
317 0, Flags, getConstantOrNull(Val));
325318 }
326319
327320 DIDerivedType *DIBuilder::createObjCIVar(StringRef Name, DIFile *File,
330323 uint64_t AlignInBits,
331324 uint64_t OffsetInBits, unsigned Flags,
332325 DIType *Ty, MDNode *PropertyNode) {
333 return DIDerivedType::get(
334 VMContext, dwarf::DW_TAG_member, Name, File, LineNumber,
335 DIScopeRef::get(getNonCompileUnitScope(File)), DITypeRef::get(Ty),
336 SizeInBits, AlignInBits, OffsetInBits, Flags, PropertyNode);
326 return DIDerivedType::get(VMContext, dwarf::DW_TAG_member, Name, File,
327 LineNumber, getNonCompileUnitScope(File), Ty,
328 SizeInBits, AlignInBits, OffsetInBits, Flags,
329 PropertyNode);
337330 }
338331
339332 DIObjCProperty *
341334 StringRef GetterName, StringRef SetterName,
342335 unsigned PropertyAttributes, DIType *Ty) {
343336 return DIObjCProperty::get(VMContext, Name, File, LineNumber, GetterName,
344 SetterName, PropertyAttributes,
345 DITypeRef::get(Ty));
337 SetterName, PropertyAttributes, Ty);
346338 }
347339
348340 DITemplateTypeParameter *
349341 DIBuilder::createTemplateTypeParameter(DIScope *Context, StringRef Name,
350342 DIType *Ty) {
351343 assert((!Context || isa(Context)) && "Expected compile unit");
352 return DITemplateTypeParameter::get(VMContext, Name, DITypeRef::get(Ty));
344 return DITemplateTypeParameter::get(VMContext, Name, Ty);
353345 }
354346
355347 static DITemplateValueParameter *
357349 DIScope *Context, StringRef Name, DIType *Ty,
358350 Metadata *MD) {
359351 assert((!Context || isa(Context)) && "Expected compile unit");
360 return DITemplateValueParameter::get(VMContext, Tag, Name, DITypeRef::get(Ty),
361 MD);
352 return DITemplateValueParameter::get(VMContext, Tag, Name, Ty, MD);
362353 }
363354
364355 DITemplateValueParameter *
395386
396387 auto *R = DICompositeType::get(
397388 VMContext, dwarf::DW_TAG_structure_type, Name, File, LineNumber,
398 DIScopeRef::get(getNonCompileUnitScope(Context)),
399 DITypeRef::get(DerivedFrom), SizeInBits, AlignInBits, OffsetInBits, Flags,
400 Elements, 0, DITypeRef::get(VTableHolder),
389 getNonCompileUnitScope(Context), DerivedFrom, SizeInBits, AlignInBits,
390 OffsetInBits, Flags, Elements, 0, VTableHolder,
401391 cast_or_null(TemplateParams), UniqueIdentifier);
402 if (!UniqueIdentifier.empty())
403 retainType(R);
404392 trackIfUnresolved(R);
405393 return R;
406394 }
412400 DIType *VTableHolder, StringRef UniqueIdentifier) {
413401 auto *R = DICompositeType::get(
414402 VMContext, dwarf::DW_TAG_structure_type, Name, File, LineNumber,
415 DIScopeRef::get(getNonCompileUnitScope(Context)),
416 DITypeRef::get(DerivedFrom), SizeInBits, AlignInBits, 0, Flags, Elements,
417 RunTimeLang, DITypeRef::get(VTableHolder), nullptr, UniqueIdentifier);
418 if (!UniqueIdentifier.empty())
419 retainType(R);
403 getNonCompileUnitScope(Context), DerivedFrom, SizeInBits, AlignInBits, 0,
404 Flags, Elements, RunTimeLang, VTableHolder, nullptr, UniqueIdentifier);
420405 trackIfUnresolved(R);
421406 return R;
422407 }
427412 DINodeArray Elements, unsigned RunTimeLang, StringRef UniqueIdentifier) {
428413 auto *R = DICompositeType::get(
429414 VMContext, dwarf::DW_TAG_union_type, Name, File, LineNumber,
430 DIScopeRef::get(getNonCompileUnitScope(Scope)), nullptr, SizeInBits,
431 AlignInBits, 0, Flags, Elements, RunTimeLang, nullptr, nullptr,
432 UniqueIdentifier);
433 if (!UniqueIdentifier.empty())
434 retainType(R);
415 getNonCompileUnitScope(Scope), nullptr, SizeInBits, AlignInBits, 0, Flags,
416 Elements, RunTimeLang, nullptr, nullptr, UniqueIdentifier);
435417 trackIfUnresolved(R);
436418 return R;
437419 }
444426 DICompositeType *DIBuilder::createExternalTypeRef(unsigned Tag, DIFile *File,
445427 StringRef UniqueIdentifier) {
446428 assert(!UniqueIdentifier.empty() && "external type ref without uid");
447 auto *CTy =
448 DICompositeType::get(VMContext, Tag, "", nullptr, 0, nullptr, nullptr, 0,
449 0, 0, DINode::FlagExternalTypeRef, nullptr, 0,
450 nullptr, nullptr, UniqueIdentifier);
451 // Types with unique IDs need to be in the type map.
452 retainType(CTy);
453 return CTy;
429 return DICompositeType::get(VMContext, Tag, "", nullptr, 0, nullptr, nullptr,
430 0, 0, 0, DINode::FlagExternalTypeRef, nullptr, 0,
431 nullptr, nullptr, UniqueIdentifier);
454432 }
455433
456434 DICompositeType *DIBuilder::createEnumerationType(
459437 DIType *UnderlyingType, StringRef UniqueIdentifier) {
460438 auto *CTy = DICompositeType::get(
461439 VMContext, dwarf::DW_TAG_enumeration_type, Name, File, LineNumber,
462 DIScopeRef::get(getNonCompileUnitScope(Scope)),
463 DITypeRef::get(UnderlyingType), SizeInBits, AlignInBits, 0, 0, Elements,
464 0, nullptr, nullptr, UniqueIdentifier);
440 getNonCompileUnitScope(Scope), UnderlyingType, SizeInBits, AlignInBits, 0,
441 0, Elements, 0, nullptr, nullptr, UniqueIdentifier);
465442 AllEnumTypes.push_back(CTy);
466 if (!UniqueIdentifier.empty())
467 retainType(CTy);
468443 trackIfUnresolved(CTy);
469444 return CTy;
470445 }
473448 DIType *Ty,
474449 DINodeArray Subscripts) {
475450 auto *R = DICompositeType::get(VMContext, dwarf::DW_TAG_array_type, "",
476 nullptr, 0, nullptr, DITypeRef::get(Ty), Size,
477 AlignInBits, 0, 0, Subscripts, 0, nullptr);
451 nullptr, 0, nullptr, Ty, Size, AlignInBits, 0,
452 0, Subscripts, 0, nullptr);
478453 trackIfUnresolved(R);
479454 return R;
480455 }
482457 DICompositeType *DIBuilder::createVectorType(uint64_t Size,
483458 uint64_t AlignInBits, DIType *Ty,
484459 DINodeArray Subscripts) {
485 auto *R =
486 DICompositeType::get(VMContext, dwarf::DW_TAG_array_type, "", nullptr, 0,
487 nullptr, DITypeRef::get(Ty), Size, AlignInBits, 0,
488 DINode::FlagVector, Subscripts, 0, nullptr);
460 auto *R = DICompositeType::get(VMContext, dwarf::DW_TAG_array_type, "",
461 nullptr, 0, nullptr, Ty, Size, AlignInBits, 0,
462 DINode::FlagVector, Subscripts, 0, nullptr);
489463 trackIfUnresolved(R);
490464 return R;
491465 }
530504 // FIXME: Define in terms of createReplaceableForwardDecl() by calling
531505 // replaceWithUniqued().
532506 auto *RetTy = DICompositeType::get(
533 VMContext, Tag, Name, F, Line,
534 DIScopeRef::get(getNonCompileUnitScope(Scope)), nullptr, SizeInBits,
535 AlignInBits, 0, DINode::FlagFwdDecl, nullptr, RuntimeLang, nullptr,
536 nullptr, UniqueIdentifier);
537 if (!UniqueIdentifier.empty())
538 retainType(RetTy);
507 VMContext, Tag, Name, F, Line, getNonCompileUnitScope(Scope), nullptr,
508 SizeInBits, AlignInBits, 0, DINode::FlagFwdDecl, nullptr, RuntimeLang,
509 nullptr, nullptr, UniqueIdentifier);
539510 trackIfUnresolved(RetTy);
540511 return RetTy;
541512 }
544515 unsigned Tag, StringRef Name, DIScope *Scope, DIFile *F, unsigned Line,
545516 unsigned RuntimeLang, uint64_t SizeInBits, uint64_t AlignInBits,
546517 unsigned Flags, StringRef UniqueIdentifier) {
547 auto *RetTy = DICompositeType::getTemporary(
548 VMContext, Tag, Name, F, Line,
549 DIScopeRef::get(getNonCompileUnitScope(Scope)), nullptr,
550 SizeInBits, AlignInBits, 0, Flags, nullptr, RuntimeLang,
551 nullptr, nullptr, UniqueIdentifier)
552 .release();
553 if (!UniqueIdentifier.empty())
554 retainType(RetTy);
518 auto *RetTy =
519 DICompositeType::getTemporary(
520 VMContext, Tag, Name, F, Line, getNonCompileUnitScope(Scope), nullptr,
521 SizeInBits, AlignInBits, 0, Flags, nullptr, RuntimeLang, nullptr,
522 nullptr, UniqueIdentifier)
523 .release();
555524 trackIfUnresolved(RetTy);
556525 return RetTy;
557526 }
564533 SmallVector Elts;
565534 for (unsigned i = 0, e = Elements.size(); i != e; ++i) {
566535 if (Elements[i] && isa(Elements[i]))
567 Elts.push_back(DITypeRef::get(cast(Elements[i])));
536 Elts.push_back(cast(Elements[i]));
568537 else
569538 Elts.push_back(Elements[i]);
570539 }
590559 MDNode *Decl) {
591560 checkGlobalVariableScope(Context);
592561
593 auto *N = DIGlobalVariable::get(VMContext, cast_or_null(Context),
594 Name, LinkageName, F, LineNumber,
595 DITypeRef::get(Ty), isLocalToUnit, true, Val,
596 cast_or_null(Decl));
562 auto *N =
563 DIGlobalVariable::get(VMContext, cast_or_null(Context), Name,
564 LinkageName, F, LineNumber, Ty, isLocalToUnit, true,
565 Val, cast_or_null(Decl));
597566 AllGVs.push_back(N);
598567 return N;
599568 }
606575
607576 return DIGlobalVariable::getTemporary(
608577 VMContext, cast_or_null(Context), Name, LinkageName, F,
609 LineNumber, DITypeRef::get(Ty), isLocalToUnit, false, Val,
578 LineNumber, Ty, isLocalToUnit, false, Val,
610579 cast_or_null(Decl))
611580 .release();
612581 }
624593
625594 auto *Node =
626595 DILocalVariable::get(VMContext, cast_or_null(Context), Name,
627 File, LineNo, DITypeRef::get(Ty), ArgNo, Flags);
596 File, LineNo, Ty, ArgNo, Flags);
628597 if (AlwaysPreserve) {
629598 // The optimizer may remove local variables. If there is an interest
630599 // to preserve variable info in such situation then stash it in a
683652 DITemplateParameterArray TParams, DISubprogram *Decl) {
684653 auto *Node = getSubprogram(
685654 /* IsDistinct = */ isDefinition, VMContext,
686 DIScopeRef::get(getNonCompileUnitScope(Context)), Name, LinkageName, File,
687 LineNo, Ty, isLocalToUnit, isDefinition, ScopeLine, nullptr, 0, 0, Flags,
688 isOptimized, isDefinition ? CUNode : nullptr, TParams, Decl,
655 getNonCompileUnitScope(Context), Name, LinkageName, File, LineNo, Ty,
656 isLocalToUnit, isDefinition, ScopeLine, nullptr, 0, 0, Flags, isOptimized,
657 isDefinition ? CUNode : nullptr, TParams, Decl,
689658 MDTuple::getTemporary(VMContext, None).release());
690659
691660 if (isDefinition)
700669 bool isDefinition, unsigned ScopeLine, unsigned Flags, bool isOptimized,
701670 DITemplateParameterArray TParams, DISubprogram *Decl) {
702671 return DISubprogram::getTemporary(
703 VMContext, DIScopeRef::get(getNonCompileUnitScope(Context)), Name,
704 LinkageName, File, LineNo, Ty, isLocalToUnit, isDefinition,
705 ScopeLine, nullptr, 0, 0, Flags, isOptimized,
706 isDefinition ? CUNode : nullptr, TParams, Decl, nullptr)
672 VMContext, getNonCompileUnitScope(Context), Name, LinkageName,
673 File, LineNo, Ty, isLocalToUnit, isDefinition, ScopeLine, nullptr,
674 0, 0, Flags, isOptimized, isDefinition ? CUNode : nullptr, TParams,
675 Decl, nullptr)
707676 .release();
708677 }
709678
718687 "the compile unit.");
719688 // FIXME: Do we want to use different scope/lines?
720689 auto *SP = getSubprogram(
721 /* IsDistinct = */ isDefinition, VMContext,
722 DIScopeRef::get(cast(Context)), Name, LinkageName, F, LineNo, Ty,
723 isLocalToUnit, isDefinition, LineNo, DITypeRef::get(VTableHolder), VK,
724 VIndex, Flags, isOptimized, isDefinition ? CUNode : nullptr, TParams,
725 nullptr, nullptr);
690 /* IsDistinct = */ isDefinition, VMContext, cast(Context), Name,
691 LinkageName, F, LineNo, Ty, isLocalToUnit, isDefinition, LineNo,
692 VTableHolder, VK, VIndex, Flags, isOptimized,
693 isDefinition ? CUNode : nullptr, TParams, nullptr, nullptr);
726694
727695 if (isDefinition)
728696 AllSubprograms.push_back(SP);
862830 DICompositeType *VTableHolder) {
863831 {
864832 TypedTrackingMDRef N(T);
865 N->replaceVTableHolder(DITypeRef::get(VTableHolder));
833 N->replaceVTableHolder(VTableHolder);
866834 T = N.get();
867835 }
868836
3636 return nullptr;
3737 }
3838
39 DITypeIdentifierMap
40 llvm::generateDITypeIdentifierMap(const Module &M) {
41 DITypeIdentifierMap Map;
42 for (DICompileUnit *CU : M.debug_compile_units()) {
43 DINodeArray Retain = CU->getRetainedTypes();
44 for (unsigned Ti = 0, Te = Retain.size(); Ti != Te; ++Ti) {
45 if (!isa(Retain[Ti]))
46 continue;
47 auto *Ty = cast(Retain[Ti]);
48 if (MDString *TypeId = Ty->getRawIdentifier()) {
49 // Definition has priority over declaration.
50 // Try to insert (TypeId, Ty) to Map.
51 std::pair P =
52 Map.insert(std::make_pair(TypeId, Ty));
53 // If TypeId already exists in Map and this is a definition, replace
54 // whatever we had (declaration or definition) with the definition.
55 if (!P.second && !Ty->isForwardDecl())
56 P.first->second = Ty;
57 }
58 }
59 }
60 return Map;
61 }
62
6339 //===----------------------------------------------------------------------===//
6440 // DebugInfoFinder implementations.
6541 //===----------------------------------------------------------------------===//
7147 TYs.clear();
7248 Scopes.clear();
7349 NodesSeen.clear();
74 TypeIdentifierMap.clear();
75 TypeMapInitialized = false;
76 }
77
78 void DebugInfoFinder::InitializeTypeMap(const Module &M) {
79 if (TypeMapInitialized)
80 return;
81 TypeIdentifierMap = generateDITypeIdentifierMap(M);
82 TypeMapInitialized = true;
8350 }
8451
8552 void DebugInfoFinder::processModule(const Module &M) {
86 InitializeTypeMap(M);
8753 for (auto *CU : M.debug_compile_units()) {
8854 addCompileUnit(CU);
8955 for (auto *DIG : CU->getGlobalVariables()) {
9056 if (addGlobalVariable(DIG)) {
9157 processScope(DIG->getScope());
92 processType(DIG->getType().resolve(TypeIdentifierMap));
58 processType(DIG->getType().resolve());
9359 }
9460 }
9561 for (auto *ET : CU->getEnumTypes())
10066 else
10167 processSubprogram(cast(RT));
10268 for (auto *Import : CU->getImportedEntities()) {
103 auto *Entity = Import->getEntity().resolve(TypeIdentifierMap);
69 auto *Entity = Import->getEntity().resolve();
10470 if (auto *T = dyn_cast(Entity))
10571 processType(T);
10672 else if (auto *SP = dyn_cast(Entity))
11985 void DebugInfoFinder::processLocation(const Module &M, const DILocation *Loc) {
12086 if (!Loc)
12187 return;
122 InitializeTypeMap(M);
12388 processScope(Loc->getScope());
12489 processLocation(M, Loc->getInlinedAt());
12590 }
12792 void DebugInfoFinder::processType(DIType *DT) {
12893 if (!addType(DT))
12994 return;
130 processScope(DT->getScope().resolve(TypeIdentifierMap));
95 processScope(DT->getScope().resolve());
13196 if (auto *ST = dyn_cast(DT)) {
13297 for (DITypeRef Ref : ST->getTypeArray())
133 processType(Ref.resolve(TypeIdentifierMap));
98 processType(Ref.resolve());
13499 return;
135100 }
136101 if (auto *DCT = dyn_cast(DT)) {
137 processType(DCT->getBaseType().resolve(TypeIdentifierMap));
102 processType(DCT->getBaseType().resolve());
138103 for (Metadata *D : DCT->getElements()) {
139104 if (auto *T = dyn_cast(D))
140105 processType(T);
144109 return;
145110 }
146111 if (auto *DDT = dyn_cast(DT)) {
147 processType(DDT->getBaseType().resolve(TypeIdentifierMap));
112 processType(DDT->getBaseType().resolve());
148113 }
149114 }
150115
177142 void DebugInfoFinder::processSubprogram(DISubprogram *SP) {
178143 if (!addSubprogram(SP))
179144 return;
180 processScope(SP->getScope().resolve(TypeIdentifierMap));
145 processScope(SP->getScope().resolve());
181146 processType(SP->getType());
182147 for (auto *Element : SP->getTemplateParams()) {
183148 if (auto *TType = dyn_cast(Element)) {
184 processType(TType->getType().resolve(TypeIdentifierMap));
149 processType(TType->getType().resolve());
185150 } else if (auto *TVal = dyn_cast(Element)) {
186 processType(TVal->getType().resolve(TypeIdentifierMap));
151 processType(TVal->getType().resolve());
187152 }
188153 }
189154 }
193158 auto *N = dyn_cast(DDI->getVariable());
194159 if (!N)
195160 return;
196 InitializeTypeMap(M);
197161
198162 auto *DV = dyn_cast(N);
199163 if (!DV)
202166 if (!NodesSeen.insert(DV).second)
203167 return;
204168 processScope(DV->getScope());
205 processType(DV->getType().resolve(TypeIdentifierMap));
169 processType(DV->getType().resolve());
206170 }
207171
208172 void DebugInfoFinder::processValue(const Module &M, const DbgValueInst *DVI) {
209173 auto *N = dyn_cast(DVI->getVariable());
210174 if (!N)
211175 return;
212 InitializeTypeMap(M);
213176
214177 auto *DV = dyn_cast(N);
215178 if (!DV)
218181 if (!NodesSeen.insert(DV).second)
219182 return;
220183 processScope(DV->getScope());
221 processType(DV->getType().resolve(TypeIdentifierMap));
184 processType(DV->getType().resolve());
222185 }
223186
224187 bool DebugInfoFinder::addType(DIType *DT) {
114114 return SP->getScope();
115115
116116 if (auto *LB = dyn_cast(this))
117 return DIScopeRef(LB->getScope());
117 return LB->getScope();
118118
119119 if (auto *NS = dyn_cast(this))
120 return DIScopeRef(NS->getScope());
120 return NS->getScope();
121121
122122 if (auto *M = dyn_cast(this))
123 return DIScopeRef(M->getScope());
123 return M->getScope();
124124
125125 assert((isa(this) || isa(this)) &&
126126 "Unhandled type of scope.");
379379 // If this is a member inside an ODR type, only hash the type and the name.
380380 // Otherwise the hash will be stronger than
381381 // MDNodeSubsetEqualImpl::isODRMember().
382 if (Tag == dwarf::DW_TAG_member && Name && Scope && isa(Scope))
383 return hash_combine(Name, Scope);
382 if (Tag == dwarf::DW_TAG_member && Name)
383 if (auto *CT = dyn_cast_or_null(Scope))
384 if (CT->getRawIdentifier())
385 return hash_combine(Name, Scope);
384386
385387 // Intentionally computes the hash on a subset of the operands for
386388 // performance reason. The subset has to be significant enough to avoid
405407 static bool isODRMember(unsigned Tag, const Metadata *Scope,
406408 const MDString *Name, const DIDerivedType *RHS) {
407409 // Check whether the LHS is eligible.
408 if (Tag != dwarf::DW_TAG_member || !Name || !Scope || !isa(Scope))
410 if (Tag != dwarf::DW_TAG_member || !Name)
411 return false;
412
413 auto *CT = dyn_cast_or_null(Scope);
414 if (!CT || !CT->getRawIdentifier())
409415 return false;
410416
411417 // Compare to the RHS.
570576 // If this is a declaration inside an ODR type, only hash the type and the
571577 // name. Otherwise the hash will be stronger than
572578 // MDNodeSubsetEqualImpl::isDeclarationOfODRMember().
573 if (!IsDefinition && LinkageName && Scope && isa(Scope))
574 return hash_combine(LinkageName, Scope);
579 if (!IsDefinition && LinkageName)
580 if (auto *CT = dyn_cast_or_null(Scope))
581 if (CT->getRawIdentifier())
582 return hash_combine(LinkageName, Scope);
575583
576584 // Intentionally computes the hash on a subset of the operands for
577585 // performance reason. The subset has to be significant enough to avoid
598606 const MDString *LinkageName,
599607 const DISubprogram *RHS) {
600608 // Check whether the LHS is eligible.
601 if (IsDefinition || !Scope || !LinkageName || !Scope ||
602 !isa(Scope))
609 if (IsDefinition || !Scope || !LinkageName)
610 return false;
611
612 auto *CT = dyn_cast_or_null(Scope);
613 if (!CT || !CT->getRawIdentifier())
603614 return false;
604615
605616 // Compare to the RHS.
202202 /// Track all DICompileUnits visited.
203203 SmallPtrSet CUVisited;
204204
205 /// \brief Track unresolved string-based type references.
206 SmallDenseMap UnresolvedTypeRefs;
207
208205 /// \brief The result type for a landingpad.
209206 Type *LandingPadResultTy;
210207
321318 visitModuleIdents(M);
322319
323320 verifyCompileUnits();
324
325 // Verify type references last.
326 verifyTypeRefs();
327321
328322 return !Broken;
329323 }
360354 void visitDITemplateParameter(const DITemplateParameter &N);
361355
362356 void visitTemplateParams(const MDNode &N, const Metadata &RawParams);
363
364 /// \brief Check for a valid string-based type reference.
365 ///
366 /// Checks if \c MD is a string-based type reference. If it is, keeps track
367 /// of it (and its user, \c N) for error messages later.
368 bool isValidUUID(const MDNode &N, const Metadata *MD);
369
370 /// \brief Check for a valid type reference.
371 ///
372 /// Checks for subclasses of \a DIType, or \a isValidUUID().
373 bool isTypeRef(const MDNode &N, const Metadata *MD);
374
375 /// \brief Check for a valid scope reference.
376 ///
377 /// Checks for subclasses of \a DIScope, or \a isValidUUID().
378 bool isScopeRef(const MDNode &N, const Metadata *MD);
379
380 /// \brief Check for a valid debug info reference.
381 ///
382 /// Checks for subclasses of \a DINode, or \a isValidUUID().
383 bool isDIRef(const MDNode &N, const Metadata *MD);
384357
385358 // InstVisitor overrides...
386359 using InstVisitor::visit;
466439 void verifyFrameRecoverIndices();
467440 void verifySiblingFuncletUnwinds();
468441
469 /// @{
442 void verifyBitPieceExpression(const DbgInfoIntrinsic &I);
443
470444 /// Module-level debug info verification...
471 void verifyTypeRefs();
472445 void verifyCompileUnits();
473 template
474 void verifyBitPieceExpression(const DbgInfoIntrinsic &I,
475 const MapTy &TypeRefs);
476 void visitUnresolvedTypeRef(const MDString *S, const MDNode *N);
477 /// @}
478446 };
479447 } // End anonymous namespace
480448
773741 visitValueAsMetadata(*V, F);
774742 }
775743
776 bool Verifier::isValidUUID(const MDNode &N, const Metadata *MD) {
777 auto *S = dyn_cast(MD);
778 if (!S || S->getString().empty())
779 return false;
780
781 // Keep track of names of types referenced via UUID so we can check that they
782 // actually exist.
783 UnresolvedTypeRefs.insert(std::make_pair(S, &N));
784 return true;
785 }
786
787 /// \brief Check if a value can be a reference to a type.
788 bool Verifier::isTypeRef(const MDNode &N, const Metadata *MD) {
789 return !MD || isValidUUID(N, MD) || isa(MD);
790 }
791
792 /// \brief Check if a value can be a ScopeRef.
793 bool Verifier::isScopeRef(const MDNode &N, const Metadata *MD) {
794 return !MD || isValidUUID(N, MD) || isa(MD);
795 }
796
797 /// \brief Check if a value can be a debug info ref.
798 bool Verifier::isDIRef(const MDNode &N, const Metadata *MD) {
799 return !MD || isValidUUID(N, MD) || isa(MD);
800 }
744 static bool isType(const Metadata *MD) { return !MD || isa(MD); }
745 static bool isScope(const Metadata *MD) { return !MD || isa(MD); }
746 static bool isDINode(const Metadata *MD) { return !MD || isa(MD); }
801747
802748 template
803749 bool isValidMetadataArrayImpl(const MDTuple &N, bool AllowNull) {
871817 N.getTag() == dwarf::DW_TAG_friend,
872818 "invalid tag", &N);
873819 if (N.getTag() == dwarf::DW_TAG_ptr_to_member_type) {
874 Assert(isTypeRef(N, N.getExtraData()), "invalid pointer to member type", &N,
875 N.getExtraData());
876 }
877
878 Assert(isScopeRef(N, N.getScope()), "invalid scope", &N, N.getRawScope());
879 Assert(isTypeRef(N, N.getBaseType()), "invalid base type", &N,
880 N.getBaseType());
820 Assert(isType(N.getRawExtraData()), "invalid pointer to member type", &N,
821 N.getRawExtraData());
822 }
823
824 Assert(isScope(N.getRawScope()), "invalid scope", &N, N.getRawScope());
825 Assert(isType(N.getRawBaseType()), "invalid base type", &N,
826 N.getRawBaseType());
881827 }
882828
883829 static bool hasConflictingReferenceFlags(unsigned Flags) {
905851 N.getTag() == dwarf::DW_TAG_class_type,
906852 "invalid tag", &N);
907853
908 Assert(isScopeRef(N, N.getScope()), "invalid scope", &N, N.getRawScope());
909 Assert(isTypeRef(N, N.getBaseType()), "invalid base type", &N,
910 N.getBaseType());
854 Assert(isScope(N.getRawScope()), "invalid scope", &N, N.getRawScope());
855 Assert(isType(N.getRawBaseType()), "invalid base type", &N,
856 N.getRawBaseType());
911857
912858 Assert(!N.getRawElements() || isa(N.getRawElements()),
913859 "invalid composite elements", &N, N.getRawElements());
914 Assert(isTypeRef(N, N.getRawVTableHolder()), "invalid vtable holder", &N,
860 Assert(isType(N.getRawVTableHolder()), "invalid vtable holder", &N,
915861 N.getRawVTableHolder());
916862 Assert(!hasConflictingReferenceFlags(N.getFlags()), "invalid reference flags",
917863 &N);
930876 if (auto *Types = N.getRawTypeArray()) {
931877 Assert(isa(Types), "invalid composite elements", &N, Types);
932878 for (Metadata *Ty : N.getTypeArray()->operands()) {
933 Assert(isTypeRef(N, Ty), "invalid subroutine type ref", &N, Types, Ty);
879 Assert(isType(Ty), "invalid subroutine type ref", &N, Types, Ty);
934880 }
935881 }
936882 Assert(!hasConflictingReferenceFlags(N.getFlags()), "invalid reference flags",
997943
998944 void Verifier::visitDISubprogram(const DISubprogram &N) {
999945 Assert(N.getTag() == dwarf::DW_TAG_subprogram, "invalid tag", &N);
1000 Assert(isScopeRef(N, N.getRawScope()), "invalid scope", &N, N.getRawScope());
946 Assert(isScope(N.getRawScope()), "invalid scope", &N, N.getRawScope());
1001947 if (auto *F = N.getRawFile())
1002948 Assert(isa(F), "invalid file", &N, F);
1003949 if (auto *T = N.getRawType())
1004950 Assert(isa(T), "invalid subroutine type", &N, T);
1005 Assert(isTypeRef(N, N.getRawContainingType()), "invalid containing type", &N,
951 Assert(isType(N.getRawContainingType()), "invalid containing type", &N,
1006952 N.getRawContainingType());
1007953 if (auto *Params = N.getRawTemplateParams())
1008954 visitTemplateParams(N, *Params);
10851031 }
10861032
10871033 void Verifier::visitDITemplateParameter(const DITemplateParameter &N) {
1088 Assert(isTypeRef(N, N.getType()), "invalid type ref", &N, N.getType());
1034 Assert(isType(N.getRawType()), "invalid type ref", &N, N.getRawType());
10891035 }
10901036
10911037 void Verifier::visitDITemplateTypeParameter(const DITemplateTypeParameter &N) {
11081054 void Verifier::visitDIVariable(const DIVariable &N) {
11091055 if (auto *S = N.getRawScope())
11101056 Assert(isa(S), "invalid scope", &N, S);
1111 Assert(isTypeRef(N, N.getRawType()), "invalid type ref", &N, N.getRawType());
1057 Assert(isType(N.getRawType()), "invalid type ref", &N, N.getRawType());
11121058 if (auto *F = N.getRawFile())
11131059 Assert(isa(F), "invalid file", &N, F);
11141060 }
11471093 void Verifier::visitDIObjCProperty(const DIObjCProperty &N) {
11481094 Assert(N.getTag() == dwarf::DW_TAG_APPLE_property, "invalid tag", &N);
11491095 if (auto *T = N.getRawType())
1150 Assert(isTypeRef(N, T), "invalid type ref", &N, T);
1096 Assert(isType(T), "invalid type ref", &N, T);
11511097 if (auto *F = N.getRawFile())
11521098 Assert(isa(F), "invalid file", &N, F);
11531099 }
11581104 "invalid tag", &N);
11591105 if (auto *S = N.getRawScope())
11601106 Assert(isa(S), "invalid scope for imported entity", &N, S);
1161 Assert(isDIRef(N, N.getEntity()), "invalid imported entity", &N,
1162 N.getEntity());
1107 Assert(isDINode(N.getRawEntity()), "invalid imported entity", &N,
1108 N.getRawEntity());
11631109 }
11641110
11651111 void Verifier::visitComdat(const Comdat &C) {
37243670 visitMDNode(*N);
37253671 }
37263672
3673 if (auto *DII = dyn_cast(&I))
3674 verifyBitPieceExpression(*DII);
3675
37273676 InstsInThisBlock.insert(&I);
37283677 }
37293678
43344283 Loc->getScope()->getSubprogram());
43354284 }
43364285
4337 template
4338 static uint64_t getVariableSize(const DILocalVariable &V, const MapTy &Map) {
4286 static uint64_t getVariableSize(const DILocalVariable &V) {
43394287 // Be careful of broken types (checked elsewhere).
43404288 const Metadata *RawType = V.getRawType();
43414289 while (RawType) {
43504298 continue;
43514299 }
43524300
4353 if (auto *S = dyn_cast(RawType)) {
4354 // Don't error on missing types (checked elsewhere).
4355 RawType = Map.lookup(S);
4356 continue;
4357 }
4358
43594301 // Missing type or size.
43604302 break;
43614303 }
43644306 return 0;
43654307 }
43664308
4367 template
4368 void Verifier::verifyBitPieceExpression(const DbgInfoIntrinsic &I,
4369 const MapTy &TypeRefs) {
4309 void Verifier::verifyBitPieceExpression(const DbgInfoIntrinsic &I) {
43704310 DILocalVariable *V;
43714311 DIExpression *E;
43724312 if (auto *DVI = dyn_cast(&I)) {
43974337
43984338 // If there's no size, the type is broken, but that should be checked
43994339 // elsewhere.
4400 uint64_t VarSize = getVariableSize(*V, TypeRefs);
4340 uint64_t VarSize = getVariableSize(*V);
44014341 if (!VarSize)
44024342 return;
44034343
44064346 Assert(PieceSize + PieceOffset <= VarSize,
44074347 "piece is larger than or outside of variable", &I, V, E);
44084348 Assert(PieceSize != VarSize, "piece covers entire variable", &I, V, E);
4409 }
4410
4411 void Verifier::visitUnresolvedTypeRef(const MDString *S, const MDNode *N) {
4412 // This is in its own function so we get an error for each bad type ref (not
4413 // just the first).
4414 Assert(false, "unresolved type ref", S, N);
44154349 }
44164350
44174351 void Verifier::verifyCompileUnits() {
44264360 CUVisited.clear();
44274361 }
44284362
4429 void Verifier::verifyTypeRefs() {
4430 auto *CUs = M->getNamedMetadata("llvm.dbg.cu");
4431 if (!CUs)
4432 return;
4433
4434 // Visit all the compile units again to map the type references.
4435 SmallDenseMap TypeRefs;
4436 for (auto *MD : CUs->operands()) {
4437 auto *CU = dyn_cast(MD);
4438 if (!CU)
4439 continue;
4440 auto *Array = CU->getRawRetainedTypes();
4441 if (!Array || !isa(Array))
4442 continue;
4443 for (DIScope *Op : CU->getRetainedTypes())
4444 if (auto *T = dyn_cast_or_null(Op))
4445 if (auto *S = T->getRawIdentifier()) {
4446 UnresolvedTypeRefs.erase(S);
4447 TypeRefs.insert(std::make_pair(S, T));
4448 }
4449 }
4450
4451 // Verify debug info intrinsic bit piece expressions. This needs a second
4452 // pass through the intructions, since we haven't built TypeRefs yet when
4453 // verifying functions, and simply queuing the DbgInfoIntrinsics to evaluate
4454 // later/now would queue up some that could be later deleted.
4455 for (const Function &F : *M)
4456 for (const BasicBlock &BB : F)
4457 for (const Instruction &I : BB)
4458 if (auto *DII = dyn_cast(&I))
4459 verifyBitPieceExpression(*DII, TypeRefs);
4460
4461 // Return early if all typerefs were resolved.
4462 if (UnresolvedTypeRefs.empty())
4463 return;
4464
4465 // Sort the unresolved references by name so the output is deterministic.
4466 typedef std::pair TypeRef;
4467 SmallVector Unresolved(UnresolvedTypeRefs.begin(),
4468 UnresolvedTypeRefs.end());
4469 std::sort(Unresolved.begin(), Unresolved.end(),
4470 [](const TypeRef &LHS, const TypeRef &RHS) {
4471 return LHS.first->getString() < RHS.first->getString();
4472 });
4473
4474 // Visit the unresolved refs (printing out the errors).
4475 for (const TypeRef &TR : Unresolved)
4476 visitUnresolvedTypeRef(TR.first, TR.second);
4477 }
4478
44794363 //===----------------------------------------------------------------------===//
44804364 // Implement the public interfaces to this file...
44814365 //===----------------------------------------------------------------------===//
1313
1414 ; Define an identified type with fields and functions.
1515 ; CHECK-NEXT: !3 = !DICompositeType(tag: DW_TAG_structure_type, name: "has-uuid",{{.*}}, identifier: "uuid")
16 ; CHECK-NEXT: !4 = !DIDerivedType(tag: DW_TAG_member, name: "field1", scope: !"uuid", file: !1
17 ; CHECK-NEXT: !5 = !DIDerivedType(tag: DW_TAG_member, name: "field2", scope: !"uuid", file: !1
18 ; CHECK-NEXT: !6 = !DISubprogram(name: "foo", linkageName: "foo1", scope: !"uuid", file: !1
19 ; CHECK-NEXT: !7 = !DISubprogram(name: "foo", linkageName: "foo2", scope: !"uuid", file: !1
16 ; CHECK-NEXT: !4 = !DIDerivedType(tag: DW_TAG_member, name: "field1", scope: !3, file: !1
17 ; CHECK-NEXT: !5 = !DIDerivedType(tag: DW_TAG_member, name: "field2", scope: !3, file: !1
18 ; CHECK-NEXT: !6 = !DISubprogram(name: "foo", linkageName: "foo1", scope: !3, file: !1
19 ; CHECK-NEXT: !7 = !DISubprogram(name: "foo", linkageName: "foo2", scope: !3, file: !1
2020 !3 = !DICompositeType(tag: DW_TAG_structure_type, name: "has-uuid", file: !1, line: 2, size: 64, align: 32, identifier: "uuid")
21 !4 = !DIDerivedType(tag: DW_TAG_member, name: "field1", scope: !"uuid", file: !1, line: 4, baseType: !0, size: 32, align: 32, offset: 32)
22 !5 = !DIDerivedType(tag: DW_TAG_member, name: "field2", scope: !"uuid", file: !1, line: 4, baseType: !0, size: 32, align: 32, offset: 32)
23 !6 = !DISubprogram(name: "foo", linkageName: "foo1", scope: !"uuid", file: !1, isDefinition: false)
24 !7 = !DISubprogram(name: "foo", linkageName: "foo2", scope: !"uuid", file: !1, isDefinition: false)
21 !4 = !DIDerivedType(tag: DW_TAG_member, name: "field1", scope: !3, file: !1, line: 4, baseType: !0, size: 32, align: 32, offset: 32)
22 !5 = !DIDerivedType(tag: DW_TAG_member, name: "field2", scope: !3, file: !1, line: 4, baseType: !0, size: 32, align: 32, offset: 32)
23 !6 = !DISubprogram(name: "foo", linkageName: "foo1", scope: !3, file: !1, isDefinition: false)
24 !7 = !DISubprogram(name: "foo", linkageName: "foo2", scope: !3, file: !1, isDefinition: false)
2525
2626 ; Define an un-identified type with fields and functions.
2727 ; CHECK-NEXT: !8 = !DICompositeType(tag: DW_TAG_structure_type, name: "no-uuid", file: !1
4444
4545 ; Add duplicate fields and members of "has-uuid" in a different file. These
4646 ; should be merged.
47 !15 = !DIDerivedType(tag: DW_TAG_member, name: "field1", scope: !"uuid", file: !2, line: 4, baseType: !0, size: 32, align: 32, offset: 32)
48 !16 = !DISubprogram(name: "foo", linkageName: "foo1", scope: !"uuid", file: !2, isDefinition: false)
47 !15 = !DIDerivedType(tag: DW_TAG_member, name: "field1", scope: !3, file: !2, line: 4, baseType: !0, size: 32, align: 32, offset: 32)
48 !16 = !DISubprogram(name: "foo", linkageName: "foo1", scope: !3, file: !2, isDefinition: false)
4949
5050 ; CHECK-NEXT: !15 = !{!4, !6}
5151 ; CHECK-NOT: !DIDerivedType
0 ; RUN: llvm-dis < %s.bc | FileCheck %s
1 ; RUN: verify-uselistorder %s.bc
2
3 ; Establish a stable order.
4 !named = !{!0, !1, !2, !3, !4, !6, !7, !8, !9, !10, !11, !12}
5
6 ; CHECK: !0 = !DIFile(filename: "path/to/file", directory: "/path/to/dir")
7 ; CHECK-NEXT: !1 = !DICompositeType(tag: DW_TAG_structure_type, name: "T1"{{.*}}, identifier: "T1")
8 ; CHECK-NEXT: !2 = !DICompositeType(tag: DW_TAG_structure_type, name: "T2", scope: !1{{.*}}, baseType: !1, vtableHolder: !1, identifier: "T2")
9 ; CHECK-NEXT: !3 = !DIDerivedType(tag: DW_TAG_member, name: "M1", scope: !1{{.*}}, baseType: !2)
10 ; CHECK-NEXT: !4 = !DISubroutineType(types: !5)
11 ; CHECK-NEXT: !5 = !{!1, !2}
12 ; CHECK-NEXT: !6 = !DISubprogram(scope: !1,{{.*}} containingType: !1{{[,)]}}
13 ; CHECK-NEXT: !7 = !DILocalVariable(name: "V1", scope: !6, type: !2)
14 ; CHECK-NEXT: !8 = !DIObjCProperty(name: "P1", type: !1)
15 ; CHECK-NEXT: !9 = !DITemplateTypeParameter(type: !1)
16 ; CHECK-NEXT: !10 = !DIGlobalVariable(name: "G",{{.*}} type: !1,{{.*}} variable: i32* @G1)
17 ; CHECK-NEXT: !11 = !DITemplateValueParameter(type: !1, value: i32* @G1)
18 ; CHECK-NEXT: !12 = !DIImportedEntity(tag: DW_TAG_imported_module, name: "T2", scope: !0, entity: !1)
19
20 !0 = !DIFile(filename: "path/to/file", directory: "/path/to/dir")
21 !1 = !DICompositeType(tag: DW_TAG_structure_type, name: "T1", file: !0, identifier: "T1")
22 !2 = !DICompositeType(tag: DW_TAG_structure_type, name: "T2", file: !0, scope: !"T1", baseType: !"T1", vtableHolder: !"T1", identifier: "T2")
23 !3 = !DIDerivedType(tag: DW_TAG_member, name: "M1", file: !0, scope: !"T1", baseType: !"T2")
24 !4 = !DISubroutineType(types: !5)
25 !5 = !{!"T1", !"T2"}
26 !6 = !DISubprogram(scope: !"T1", isDefinition: false, containingType: !"T1")
27 !7 = !DILocalVariable(name: "V1", scope: !6, type: !"T2")
28 !8 = !DIObjCProperty(name: "P1", type: !"T1")
29 !9 = !DITemplateTypeParameter(type: !"T1")
30 !10 = !DIGlobalVariable(name: "G", type: !"T1", isDefinition: false, variable: i32* @G1)
31 !11 = !DITemplateValueParameter(type: !"T1", value: i32* @G1)
32 !12 = !DIImportedEntity(tag: DW_TAG_imported_module, name: "T2", scope: !0, entity: !"T1")
33
34 @G1 = global i32 0
129129 !3 = !{!4}
130130 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "AAA3", file: !1, line: 4, size: 32, align: 8, elements: !5, identifier: "_ZTS4AAA3")
131131 !5 = !{!6, !11, !17, !18}
132 !6 = !DIDerivedType(tag: DW_TAG_member, name: "text", scope: !"_ZTS4AAA3", file: !1, line: 8, baseType: !7, size: 32, align: 8)
132 !6 = !DIDerivedType(tag: DW_TAG_member, name: "text", scope: !4, file: !1, line: 8, baseType: !7, size: 32, align: 8)
133133 !7 = !DICompositeType(tag: DW_TAG_array_type, baseType: !8, size: 32, align: 8, elements: !9)
134134 !8 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
135135 !9 = !{!10}
136136 !10 = !DISubrange(count: 4)
137 !11 = !DISubprogram(name: "AAA3", scope: !"_ZTS4AAA3", file: !1, line: 5, type: !12, isLocal: false, isDefinition: false, scopeLine: 5, flags: DIFlagPrototyped, isOptimized: true)
137 !11 = !DISubprogram(name: "AAA3", scope: !4, file: !1, line: 5, type: !12, isLocal: false, isDefinition: false, scopeLine: 5, flags: DIFlagPrototyped, isOptimized: true)
138138 !12 = !DISubroutineType(types: !13)
139139 !13 = !{null, !14, !15}
140 !14 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !"_ZTS4AAA3", size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
140 !14 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !4, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
141141 !15 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !16, size: 64, align: 64)
142142 !16 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !8)
143 !17 = !DISubprogram(name: "operator=", linkageName: "_ZN4AAA3aSEPKc", scope: !"_ZTS4AAA3", file: !1, line: 6, type: !12, isLocal: false, isDefinition: false, scopeLine: 6, flags: DIFlagPrototyped, isOptimized: true)
144 !18 = !DISubprogram(name: "operator const char *", linkageName: "_ZNK4AAA3cvPKcEv", scope: !"_ZTS4AAA3", file: !1, line: 7, type: !19, isLocal: false, isDefinition: false, scopeLine: 7, flags: DIFlagPrototyped, isOptimized: true)
143 !17 = !DISubprogram(name: "operator=", linkageName: "_ZN4AAA3aSEPKc", scope: !4, file: !1, line: 6, type: !12, isLocal: false, isDefinition: false, scopeLine: 6, flags: DIFlagPrototyped, isOptimized: true)
144 !18 = !DISubprogram(name: "operator const char *", linkageName: "_ZNK4AAA3cvPKcEv", scope: !4, file: !1, line: 7, type: !19, isLocal: false, isDefinition: false, scopeLine: 7, flags: DIFlagPrototyped, isOptimized: true)
145145 !19 = !DISubroutineType(types: !20)
146146 !20 = !{!15, !21}
147147 !21 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !22, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
148 !22 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !"_ZTS4AAA3")
148 !22 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !4)
149149 !24 = distinct !DISubprogram(name: "bar", linkageName: "_Z3barii", scope: !1, file: !1, line: 11, type: !25, isLocal: false, isDefinition: true, scopeLine: 11, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !28)
150150 !25 = !DISubroutineType(types: !26)
151151 !26 = !{null, !27, !27}
154154 !29 = !DILocalVariable(name: "param1", arg: 1, scope: !24, file: !1, line: 11, type: !27)
155155 !30 = !DILocalVariable(name: "param2", arg: 2, scope: !24, file: !1, line: 11, type: !27)
156156 !31 = !DILocalVariable(name: "temp", scope: !24, file: !1, line: 12, type: !15)
157 !32 = !DILocalVariable(name: "var1", scope: !24, file: !1, line: 17, type: !"_ZTS4AAA3")
158 !33 = !DILocalVariable(name: "var2", scope: !24, file: !1, line: 18, type: !"_ZTS4AAA3")
159 !34 = distinct !DISubprogram(name: "AAA3", linkageName: "_ZN4AAA3C2EPKc", scope: !"_ZTS4AAA3", file: !1, line: 5, type: !12, isLocal: false, isDefinition: true, scopeLine: 5, flags: DIFlagPrototyped, isOptimized: true, unit: !0, declaration: !11, variables: !35)
157 !32 = !DILocalVariable(name: "var1", scope: !24, file: !1, line: 17, type: !4)
158 !33 = !DILocalVariable(name: "var2", scope: !24, file: !1, line: 18, type: !4)
159 !34 = distinct !DISubprogram(name: "AAA3", linkageName: "_ZN4AAA3C2EPKc", scope: !4, file: !1, line: 5, type: !12, isLocal: false, isDefinition: true, scopeLine: 5, flags: DIFlagPrototyped, isOptimized: true, unit: !0, declaration: !11, variables: !35)
160160 !35 = !{!36, !38}
161161 !36 = !DILocalVariable(name: "this", arg: 1, scope: !34, type: !37, flags: DIFlagArtificial | DIFlagObjectPointer)
162 !37 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !"_ZTS4AAA3", size: 64, align: 64)
162 !37 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !4, size: 64, align: 64)
163163 !38 = !DILocalVariable(name: "value", arg: 2, scope: !34, file: !1, line: 5, type: !15)
164 !39 = distinct !DISubprogram(name: "operator=", linkageName: "_ZN4AAA3aSEPKc", scope: !"_ZTS4AAA3", file: !1, line: 6, type: !12, isLocal: false, isDefinition: true, scopeLine: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, declaration: !17, variables: !40)
164 !39 = distinct !DISubprogram(name: "operator=", linkageName: "_ZN4AAA3aSEPKc", scope: !4, file: !1, line: 6, type: !12, isLocal: false, isDefinition: true, scopeLine: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, declaration: !17, variables: !40)
165165 !40 = !{!41, !42}
166166 !41 = !DILocalVariable(name: "this", arg: 1, scope: !39, type: !37, flags: DIFlagArtificial | DIFlagObjectPointer)
167167 !42 = !DILocalVariable(name: "value", arg: 2, scope: !39, file: !1, line: 6, type: !15)
6767 !3 = !{!4}
6868 !4 = !DICompositeType(tag: DW_TAG_class_type, name: "C", line: 2, size: 8, align: 8, file: !1, elements: !5, identifier: "_ZTS1C")
6969 !5 = !{!6}
70 !6 = !DISubprogram(name: "test", file: !1, scope: !"_ZTS1C", type: !7, isDefinition: false)
70 !6 = !DISubprogram(name: "test", file: !1, scope: !4, type: !7, isDefinition: false)
7171 !7 = !DISubroutineType(types: !8)
7272 !8 = !{!9, !10, !11, !11, !11, null}
7373 !9 = !DIBasicType(encoding: DW_ATE_signed, size: 32, align: 32, name: "int")
74 !10 = !DIDerivedType(baseType: !"_ZTS1C", tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial)
74 !10 = !DIDerivedType(baseType: !4, tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial)
7575 !11 = !DIBasicType(tag: DW_TAG_base_type, name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
7676 !13 = distinct !DISubprogram(name: "test_with_debug", linkageName: "test_with_debug", line: 6, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 6, file: !1, scope: !14, type: !15, variables: !17)
7777 !14 = !DIFile(filename: "test.cpp", directory: "")
7878 !15 = !DISubroutineType(types: !16)
7979 !16 = !{null}
8080 !17 = !{!18, !19}
81 !18 = !DILocalVariable(name: "c", line: 7, scope: !13, file: !14, type: !"_ZTS1C")
81 !18 = !DILocalVariable(name: "c", line: 7, scope: !13, file: !14, type: !4)
8282 !19 = !DILocalVariable(name: "lc", line: 8, scope: !13, file: !14, type: !11)
8383 !20 = !{!21}
8484 !21 = !DIGlobalVariable(name: "argc", line: 1, isLocal: false, isDefinition: true, scope: null, file: !14, type: !11, variable: i8* @argc)
6464 !1 = !DIFile(filename: "", directory: "")
6565 !2 = !{}
6666 !3 = !{!4, !13}
67 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "B", line: 5, size: 64, align: 64, file: !5, elements: !6, vtableHolder: !"_ZTS1A", identifier: "_ZTS1B")
67 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "B", line: 5, size: 64, align: 64, file: !5, elements: !6, vtableHolder: !13, identifier: "_ZTS1B")
6868 !5 = !DIFile(filename: "test1.cpp", directory: "")
6969 !6 = !{!7, !8, !12}
70 !7 = !DIDerivedType(tag: DW_TAG_inheritance, scope: !"_ZTS1B", baseType: !"_ZTS1A")
71 !8 = !DISubprogram(name: "B", line: 6, isLocal: false, isDefinition: false, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 6, file: !5, scope: !"_ZTS1B", type: !9)
70 !7 = !DIDerivedType(tag: DW_TAG_inheritance, scope: !4, baseType: !13)
71 !8 = !DISubprogram(name: "B", line: 6, isLocal: false, isDefinition: false, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 6, file: !5, scope: !4, type: !9)
7272 !9 = !DISubroutineType(types: !10)
7373 !10 = !{null, !11}
74 !11 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS1B")
75 !12 = !DISubprogram(name: "~B", line: 7, isLocal: false, isDefinition: false, virtuality: DW_VIRTUALITY_virtual, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 7, file: !5, scope: !"_ZTS1B", type: !9, containingType: !"_ZTS1B")
76 !13 = !DICompositeType(tag: DW_TAG_structure_type, name: "A", line: 1, size: 64, align: 64, file: !5, elements: !14, vtableHolder: !"_ZTS1A", identifier: "_ZTS1A")
74 !11 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !4)
75 !12 = !DISubprogram(name: "~B", line: 7, isLocal: false, isDefinition: false, virtuality: DW_VIRTUALITY_virtual, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 7, file: !5, scope: !4, type: !9, containingType: !4)
76 !13 = !DICompositeType(tag: DW_TAG_structure_type, name: "A", line: 1, size: 64, align: 64, file: !5, elements: !14, vtableHolder: !13, identifier: "_ZTS1A")
7777 !14 = !{!15, !22, !26}
7878 !15 = !DIDerivedType(tag: DW_TAG_member, name: "_vptr$A", size: 64, flags: DIFlagArtificial, file: !5, scope: !16, baseType: !17)
7979 !16 = !DIFile(filename: "test1.cpp", directory: "")
8282 !19 = !DISubroutineType(types: !20)
8383 !20 = !{!21}
8484 !21 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
85 !22 = !DISubprogram(name: "A", line: 2, isLocal: false, isDefinition: false, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 2, file: !5, scope: !"_ZTS1A", type: !23)
85 !22 = !DISubprogram(name: "A", line: 2, isLocal: false, isDefinition: false, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 2, file: !5, scope: !13, type: !23)
8686 !23 = !DISubroutineType(types: !24)
8787 !24 = !{null, !25}
88 !25 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS1A")
89 !26 = !DISubprogram(name: "~A", line: 3, isLocal: false, isDefinition: false, virtuality: DW_VIRTUALITY_virtual, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 3, file: !5, scope: !"_ZTS1A", type: !23, containingType: !"_ZTS1A")
90 !28 = distinct !DISubprogram(name: "B", linkageName: "_ZN1BC2Ev", line: 9, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 9, file: !5, scope: !"_ZTS1B", type: !9, declaration: !8, variables: !29)
88 !25 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !13)
89 !26 = !DISubprogram(name: "~A", line: 3, isLocal: false, isDefinition: false, virtuality: DW_VIRTUALITY_virtual, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 3, file: !5, scope: !13, type: !23, containingType: !13)
90 !28 = distinct !DISubprogram(name: "B", linkageName: "_ZN1BC2Ev", line: 9, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 9, file: !5, scope: !4, type: !9, declaration: !8, variables: !29)
9191 !29 = !{!30}
9292 !30 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !28, type: !31)
93 !31 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !"_ZTS1B")
94 !32 = distinct !DISubprogram(name: "B", linkageName: "_ZN1BC1Ev", line: 9, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 9, file: !5, scope: !"_ZTS1B", type: !9, declaration: !8, variables: !33)
93 !31 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !4)
94 !32 = distinct !DISubprogram(name: "B", linkageName: "_ZN1BC1Ev", line: 9, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 9, file: !5, scope: !4, type: !9, declaration: !8, variables: !33)
9595 !33 = !{!34}
9696 !34 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !32, type: !31)
9797 !35 = !{i32 2, !"Dwarf Version", i32 4}
166166 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "A", line: 2, size: 192, align: 64, file: !5, elements: !6, identifier: "_ZTS1A")
167167 !5 = !DIFile(filename: "test.cpp", directory: "")
168168 !6 = !{!7, !9, !11}
169 !7 = !DIDerivedType(tag: DW_TAG_member, name: "x4", line: 3, size: 8, align: 8, file: !5, scope: !"_ZTS1A", baseType: !8)
169 !7 = !DIDerivedType(tag: DW_TAG_member, name: "x4", line: 3, size: 8, align: 8, file: !5, scope: !4, baseType: !8)
170170 !8 = !DIBasicType(tag: DW_TAG_base_type, name: "bool", size: 8, align: 8, encoding: DW_ATE_boolean)
171 !9 = !DIDerivedType(tag: DW_TAG_member, name: "x5", line: 4, size: 64, align: 64, offset: 64, file: !5, scope: !"_ZTS1A", baseType: !10)
171 !9 = !DIDerivedType(tag: DW_TAG_member, name: "x5", line: 4, size: 64, align: 64, offset: 64, file: !5, scope: !4, baseType: !10)
172172 !10 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: null)
173 !11 = !DIDerivedType(tag: DW_TAG_member, name: "x6", line: 5, size: 8, align: 8, offset: 128, file: !5, scope: !"_ZTS1A", baseType: !8)
173 !11 = !DIDerivedType(tag: DW_TAG_member, name: "x6", line: 5, size: 8, align: 8, offset: 128, file: !5, scope: !4, baseType: !8)
174174 !12 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !13)
175175 !13 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
176176 !14 = !DICompositeType(tag: DW_TAG_structure_type, name: "B", line: 8, size: 8, align: 8, file: !5, elements: !15, identifier: "_ZTS1B")
177177 !15 = !{!16, !21}
178 !16 = !DISubprogram(name: "B", line: 9, isLocal: false, isDefinition: false, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 9, file: !5, scope: !"_ZTS1B", type: !17)
178 !16 = !DISubprogram(name: "B", line: 9, isLocal: false, isDefinition: false, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 9, file: !5, scope: !14, type: !17)
179179 !17 = !DISubroutineType(types: !18)
180180 !18 = !{null, !19, !20}
181 !19 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS1B")
181 !19 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !14)
182182 !20 = !DIBasicType(tag: DW_TAG_base_type, name: "long int", size: 64, align: 64, encoding: DW_ATE_signed)
183 !21 = !DISubprogram(name: "~B", line: 10, isLocal: false, isDefinition: false, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 10, file: !5, scope: !"_ZTS1B", type: !22)
183 !21 = !DISubprogram(name: "~B", line: 10, isLocal: false, isDefinition: false, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 10, file: !5, scope: !14, type: !22)
184184 !22 = !DISubroutineType(types: !23)
185185 !23 = !{null, !19}
186186 !25 = distinct !DISubprogram(name: "f13", linkageName: "_Z3f131A", line: 13, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 13, file: !5, scope: !26, type: !27, variables: !29)
187187 !26 = !DIFile(filename: "test.cpp", directory: "")
188188 !27 = !DISubroutineType(types: !28)
189 !28 = !{null, !"_ZTS1A"}
189 !28 = !{null, !4}
190190 !29 = !{!30}
191 !30 = !DILocalVariable(name: "p1", line: 13, arg: 1, scope: !25, file: !26, type: !"_ZTS1A")
191 !30 = !DILocalVariable(name: "p1", line: 13, arg: 1, scope: !25, file: !26, type: !4)
192192 !31 = distinct !DISubprogram(name: "f11", linkageName: "_Z3f111A", line: 17, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 17, file: !5, scope: !26, type: !27, variables: !32)
193193 !32 = !{!33}
194 !33 = !DILocalVariable(name: "p1", line: 17, arg: 1, scope: !31, file: !26, type: !"_ZTS1A")
194 !33 = !DILocalVariable(name: "p1", line: 17, arg: 1, scope: !31, file: !26, type: !4)
195195 !34 = distinct !DISubprogram(name: "f16", linkageName: "_Z3f16v", line: 18, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 18, file: !5, scope: !26, type: !35, variables: !37)
196196 !35 = !DISubroutineType(types: !36)
197197 !36 = !{null}
198198 !37 = !{!38, !39}
199 !38 = !DILocalVariable(name: "c", line: 19, scope: !34, file: !26, type: !"_ZTS1A")
200 !39 = !DILocalVariable(name: "d", line: 20, scope: !34, file: !26, type: !"_ZTS1B")
199 !38 = !DILocalVariable(name: "c", line: 19, scope: !34, file: !26, type: !4)
200 !39 = !DILocalVariable(name: "d", line: 20, scope: !34, file: !26, type: !14)
201201 !40 = !{!41, !42}
202202 !41 = !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !26, type: !20, variable: i64* @a)
203203 !42 = !DIGlobalVariable(name: "b", line: 7, isLocal: false, isDefinition: true, scope: null, file: !26, type: !12, variable: i32** @b)
232232 !71 = !DILocation(line: 15, column: 3, scope: !25, inlinedAt: !66)
233233 !72 = !DILocation(line: 16, column: 1, scope: !25, inlinedAt: !66)
234234 !73 = !DILocation(line: 17, column: 27, scope: !31)
235 !74 = !DILocalVariable(name: "p1", line: 17, arg: 1, scope: !31, file: !26, type: !"_ZTS1A")
235 !74 = !DILocalVariable(name: "p1", line: 17, arg: 1, scope: !31, file: !26, type: !4)
236236 !75 = distinct !DILocation(line: 22, column: 3, scope: !34)
237237 !76 = !DIExpression(DW_OP_bit_piece, 8, 120)
238238 !77 = !DILocation(line: 17, column: 12, scope: !31, inlinedAt: !75)
6565 !1 = !DIFile(filename: "", directory: "")
6666 !2 = !{}
6767 !3 = !{!4, !13}
68 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "B", line: 5, size: 32, align: 32, file: !5, elements: !6, vtableHolder: !"_ZTS1A", identifier: "_ZTS1B")
68 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "B", line: 5, size: 32, align: 32, file: !5, elements: !6, vtableHolder: !13, identifier: "_ZTS1B")
6969 !5 = !DIFile(filename: "test1.cpp", directory: "")
7070 !6 = !{!7, !8, !12}
71 !7 = !DIDerivedType(tag: DW_TAG_inheritance, scope: !"_ZTS1B", baseType: !"_ZTS1A")
72 !8 = !DISubprogram(name: "B", line: 6, isLocal: false, isDefinition: false, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 6, file: !5, scope: !"_ZTS1B", type: !9)
71 !7 = !DIDerivedType(tag: DW_TAG_inheritance, scope: !4, baseType: !13)
72 !8 = !DISubprogram(name: "B", line: 6, isLocal: false, isDefinition: false, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 6, file: !5, scope: !4, type: !9)
7373 !9 = !DISubroutineType(types: !10)
7474 !10 = !{null, !11}
75 !11 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 32, align: 32, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS1B")
76 !12 = !DISubprogram(name: "~B", line: 7, isLocal: false, isDefinition: false, virtuality: DW_VIRTUALITY_virtual, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 7, file: !5, scope: !"_ZTS1B", type: !9, containingType: !"_ZTS1B")
77 !13 = !DICompositeType(tag: DW_TAG_structure_type, name: "A", line: 1, size: 32, align: 32, file: !5, elements: !14, vtableHolder: !"_ZTS1A", identifier: "_ZTS1A")
75 !11 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 32, align: 32, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !4)
76 !12 = !DISubprogram(name: "~B", line: 7, isLocal: false, isDefinition: false, virtuality: DW_VIRTUALITY_virtual, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 7, file: !5, scope: !4, type: !9, containingType: !4)
77 !13 = !DICompositeType(tag: DW_TAG_structure_type, name: "A", line: 1, size: 32, align: 32, file: !5, elements: !14, vtableHolder: !13, identifier: "_ZTS1A")
7878 !14 = !{!15, !22, !26}
7979 !15 = !DIDerivedType(tag: DW_TAG_member, name: "_vptr$A", size: 32, flags: DIFlagArtificial, file: !5, scope: !16, baseType: !17)
8080 !16 = !DIFile(filename: "test1.cpp", directory: "")
8383 !19 = !DISubroutineType(types: !20)
8484 !20 = !{!21}
8585 !21 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
86 !22 = !DISubprogram(name: "A", line: 2, isLocal: false, isDefinition: false, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 2, file: !5, scope: !"_ZTS1A", type: !23)
86 !22 = !DISubprogram(name: "A", line: 2, isLocal: false, isDefinition: false, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 2, file: !5, scope: !13, type: !23)
8787 !23 = !DISubroutineType(types: !24)
8888 !24 = !{null, !25}
89 !25 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 32, align: 32, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS1A")
90 !26 = !DISubprogram(name: "~A", line: 3, isLocal: false, isDefinition: false, virtuality: DW_VIRTUALITY_virtual, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 3, file: !5, scope: !"_ZTS1A", type: !23, containingType: !"_ZTS1A")
91 !28 = distinct !DISubprogram(name: "B", linkageName: "_ZN1BC2Ev", line: 9, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 9, file: !5, scope: !"_ZTS1B", type: !9, declaration: !8, variables: !29)
89 !25 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 32, align: 32, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !13)
90 !26 = !DISubprogram(name: "~A", line: 3, isLocal: false, isDefinition: false, virtuality: DW_VIRTUALITY_virtual, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 3, file: !5, scope: !13, type: !23, containingType: !13)
91 !28 = distinct !DISubprogram(name: "B", linkageName: "_ZN1BC2Ev", line: 9, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 9, file: !5, scope: !4, type: !9, declaration: !8, variables: !29)
9292 !29 = !{!30}
9393 !30 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !28, type: !31)
94 !31 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 32, align: 32, baseType: !"_ZTS1B")
95 !32 = distinct !DISubprogram(name: "B", linkageName: "_ZN1BC1Ev", line: 9, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 9, file: !5, scope: !"_ZTS1B", type: !9, declaration: !8, variables: !33)
94 !31 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 32, align: 32, baseType: !4)
95 !32 = distinct !DISubprogram(name: "B", linkageName: "_ZN1BC1Ev", line: 9, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 9, file: !5, scope: !4, type: !9, declaration: !8, variables: !33)
9696 !33 = !{!34}
9797 !34 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !32, type: !31)
9898 !35 = !{i32 2, !"Dwarf Version", i32 4}
129129 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "C", line: 1, size: 8, align: 8, file: !5, elements: !6, identifier: "_ZTS1C")
130130 !5 = !DIFile(filename: "PR20038.cpp", directory: "/tmp/dbginfo")
131131 !6 = !{!7}
132 !7 = !DISubprogram(name: "~C", line: 2, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 2, file: !5, scope: !"_ZTS1C", type: !8)
132 !7 = !DISubprogram(name: "~C", line: 2, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 2, file: !5, scope: !4, type: !8)
133133 !8 = !DISubroutineType(types: !9)
134134 !9 = !{null, !10}
135 !10 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS1C")
135 !10 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !4)
136136 !12 = distinct !DISubprogram(name: "fun4", linkageName: "_Z4fun4v", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 5, file: !5, scope: !13, type: !14, variables: !2)
137137 !13 = !DIFile(filename: "PR20038.cpp", directory: "/tmp/dbginfo")
138138 !14 = !DISubroutineType(types: !15)
139139 !15 = !{null}
140 !16 = distinct !DISubprogram(name: "~C", linkageName: "_ZN1CD2Ev", line: 6, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 6, file: !5, scope: !"_ZTS1C", type: !8, declaration: !7, variables: !2)
141 !17 = distinct !DISubprogram(name: "~C", linkageName: "_ZN1CD1Ev", line: 6, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 6, file: !5, scope: !"_ZTS1C", type: !8, declaration: !7, variables: !2)
140 !16 = distinct !DISubprogram(name: "~C", linkageName: "_ZN1CD2Ev", line: 6, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 6, file: !5, scope: !4, type: !8, declaration: !7, variables: !2)
141 !17 = distinct !DISubprogram(name: "~C", linkageName: "_ZN1CD1Ev", line: 6, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 6, file: !5, scope: !4, type: !8, declaration: !7, variables: !2)
142142 !18 = !{i32 2, !"Dwarf Version", i32 4}
143143 !19 = !{i32 2, !"Debug Info Version", i32 3}
144144 !20 = !{!"clang version 3.5.0 "}
151151 !27 = !DILocation(line: 5, scope: !28)
152152 !28 = distinct !DILexicalBlock(line: 5, column: 0, file: !5, scope: !12)
153153 !29 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !17, type: !30)
154 !30 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !"_ZTS1C")
154 !30 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !4)
155155 !31 = !DILocation(line: 0, scope: !17, inlinedAt: !22)
156156 !32 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !16, type: !30)
157157 !33 = !DILocation(line: 0, scope: !16, inlinedAt: !21)
6262 !3 = !{!4}
6363 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "S", line: 1, size: 32, align: 32, file: !1, elements: !5, identifier: "_ZTS1S")
6464 !5 = !{!6}
65 !6 = !DIDerivedType(tag: DW_TAG_member, name: "i", line: 1, size: 32, align: 32, file: !1, scope: !"_ZTS1S", baseType: !7)
65 !6 = !DIDerivedType(tag: DW_TAG_member, name: "i", line: 1, size: 32, align: 32, file: !1, scope: !4, baseType: !7)
6666 !7 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
6767 !9 = distinct !DISubprogram(name: "function", linkageName: "_Z8function1Si", line: 2, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 2, file: !1, scope: !10, type: !11, variables: !13)
6868 !10 = !DIFile(filename: "dead-argument-order.cpp", directory: "/tmp/dbginfo")
6969 !11 = !DISubroutineType(types: !12)
7070 !12 = !{!7, !4, !7}
7171 !13 = !{!14, !15}
72 !14 = !DILocalVariable(name: "s", line: 2, arg: 1, scope: !9, file: !10, type: !"_ZTS1S")
72 !14 = !DILocalVariable(name: "s", line: 2, arg: 1, scope: !9, file: !10, type: !4)
7373 !15 = !DILocalVariable(name: "i", line: 2, arg: 2, scope: !9, file: !10, type: !7)
7474 !16 = !{i32 2, !"Dwarf Version", i32 4}
7575 !17 = !{i32 2, !"Debug Info Version", i32 3}
6767 !4 = !DICompositeType(tag: DW_TAG_class_type, name: "A", line: 2, size: 8, align: 8, file: !5, elements: !6, identifier: "_ZTS1A")
6868 !5 = !DIFile(filename: "debug-info-qualifiers.cpp", directory: "")
6969 !6 = !{!7, !13}
70 !7 = !DISubprogram(name: "l", linkageName: "_ZNKR1A1lEv", line: 5, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped | DIFlagLValueReference, isOptimized: false, scopeLine: 5, file: !5, scope: !"_ZTS1A", type: !8)
70 !7 = !DISubprogram(name: "l", linkageName: "_ZNKR1A1lEv", line: 5, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped | DIFlagLValueReference, isOptimized: false, scopeLine: 5, file: !5, scope: !4, type: !8)
7171 !8 = !DISubroutineType(flags: DIFlagLValueReference, types: !9)
7272 !9 = !{null, !10}
7373 !10 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !11)
74 !11 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !"_ZTS1A")
75 !13 = !DISubprogram(name: "r", linkageName: "_ZNKO1A1rEv", line: 7, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagObjectPointer | DIFlagRValueReference, isOptimized: false, scopeLine: 7, file: !5, scope: !"_ZTS1A", type: !14)
74 !11 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !4)
75 !13 = !DISubprogram(name: "r", linkageName: "_ZNKO1A1rEv", line: 7, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagObjectPointer | DIFlagRValueReference, isOptimized: false, scopeLine: 7, file: !5, scope: !4, type: !14)
7676 !14 = !DISubroutineType(flags: DIFlagRValueReference, types: !9)
7777 !17 = distinct !DISubprogram(name: "g", linkageName: "_Z1gv", line: 10, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 10, file: !5, scope: !18, type: !19, variables: !2)
7878 !18 = !DIFile(filename: "debug-info-qualifiers.cpp", directory: "")
8484 !24 = !DILocalVariable(name: "a", line: 11, scope: !17, file: !18, type: !4)
8585 !25 = !DILocation(line: 11, scope: !17)
8686 !26 = !DILocalVariable(name: "pl", line: 16, scope: !17, file: !18, type: !27)
87 !27 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !28, extraData: !"_ZTS1A")
87 !27 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !28, extraData: !4)
8888 !28 = !DISubroutineType(flags: DIFlagLValueReference, types: !29)
8989 !29 = !{null, !30}
90 !30 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS1A")
90 !30 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !4)
9191 !31 = !DILocation(line: 16, scope: !17)
9292 !32 = !DILocalVariable(name: "pr", line: 21, scope: !17, file: !18, type: !33)
93 !33 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !34, extraData: !"_ZTS1A")
93 !33 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !34, extraData: !4)
9494 !34 = !DISubroutineType(flags: DIFlagRValueReference, types: !29)
9595 !35 = !DILocation(line: 21, scope: !17)
9696 !36 = !DILocation(line: 22, scope: !17)
7373 !3 = !{!4}
7474 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "foo", file: !1, line: 1, size: 8, align: 8, elements: !5, identifier: "_ZTS3foo")
7575 !5 = !{!6, !9, !10}
76 !6 = !DISubprogram(name: "f1", linkageName: "_ZN3foo2f1Ev", scope: !"_ZTS3foo", file: !1, line: 2, type: !7, isLocal: false, isDefinition: false, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: false)
76 !6 = !DISubprogram(name: "f1", linkageName: "_ZN3foo2f1Ev", scope: !4, file: !1, line: 2, type: !7, isLocal: false, isDefinition: false, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: false)
7777 !7 = !DISubroutineType(types: !8)
7878 !8 = !{null}
79 !9 = !DISubprogram(name: "f2", linkageName: "_ZN3foo2f2Ev", scope: !"_ZTS3foo", file: !1, line: 4, type: !7, isLocal: false, isDefinition: false, scopeLine: 4, flags: DIFlagPrototyped, isOptimized: false)
80 !10 = !DISubprogram(name: "f3", linkageName: "_ZN3foo2f3Ev", scope: !"_ZTS3foo", file: !1, line: 5, type: !7, isLocal: false, isDefinition: false, scopeLine: 5, flags: DIFlagPrototyped, isOptimized: false)
81 !12 = distinct !DISubprogram(name: "f2", linkageName: "_ZN3foo2f2Ev", scope: !"_ZTS3foo", file: !1, line: 7, type: !7, isLocal: false, isDefinition: true, scopeLine: 7, flags: DIFlagPrototyped, isOptimized: false, unit: !0, declaration: !9, variables: !2)
82 !13 = distinct !DISubprogram(name: "f3", linkageName: "_ZN3foo2f3Ev", scope: !"_ZTS3foo", file: !14, line: 1, type: !7, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, declaration: !10, variables: !2)
79 !9 = !DISubprogram(name: "f2", linkageName: "_ZN3foo2f2Ev", scope: !4, file: !1, line: 4, type: !7, isLocal: false, isDefinition: false, scopeLine: 4, flags: DIFlagPrototyped, isOptimized: false)
80 !10 = !DISubprogram(name: "f3", linkageName: "_ZN3foo2f3Ev", scope: !4, file: !1, line: 5, type: !7, isLocal: false, isDefinition: false, scopeLine: 5, flags: DIFlagPrototyped, isOptimized: false)
81 !12 = distinct !DISubprogram(name: "f2", linkageName: "_ZN3foo2f2Ev", scope: !4, file: !1, line: 7, type: !7, isLocal: false, isDefinition: true, scopeLine: 7, flags: DIFlagPrototyped, isOptimized: false, unit: !0, declaration: !9, variables: !2)
82 !13 = distinct !DISubprogram(name: "f3", linkageName: "_ZN3foo2f3Ev", scope: !4, file: !14, line: 1, type: !7, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, declaration: !10, variables: !2)
8383 !14 = !DIFile(filename: "bar.cpp", directory: "/tmp/dbginfo")
84 !15 = distinct !DISubprogram(name: "f1", linkageName: "_ZN3foo2f1Ev", scope: !"_ZTS3foo", file: !1, line: 2, type: !7, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: false, unit: !0, declaration: !6, variables: !2)
84 !15 = distinct !DISubprogram(name: "f1", linkageName: "_ZN3foo2f1Ev", scope: !4, file: !1, line: 2, type: !7, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: false, unit: !0, declaration: !6, variables: !2)
8585 !16 = !{i32 2, !"Dwarf Version", i32 4}
8686 !17 = !{i32 2, !"Debug Info Version", i32 3}
8787 !18 = !{!"clang version 3.8.0 (trunk 249440) (llvm/trunk 249465)"}
5656 !7 = distinct !DISubprogram(name: "topA", linkageName: "_Z4topA2EA", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 5, file: !1, scope: !8, type: !9, variables: !11)
5757 !8 = !DIFile(filename: "a.cpp", directory: "")
5858 !9 = !DISubroutineType(types: !10)
59 !10 = !{null, !"_ZTS2EA"}
59 !10 = !{null, !3}
6060 !11 = !{}
6161 !12 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.5.0 (trunk 214102:214133) (llvm/trunk 214102:214132)", isOptimized: false, emissionKind: FullDebug, file: !13, enums: !14, retainedTypes: !14, globals: !11, imports: !11)
6262 !13 = !DIFile(filename: "b.cpp", directory: "")
6767 !19 = !{i32 2, !"Dwarf Version", i32 2}
6868 !20 = !{i32 2, !"Debug Info Version", i32 3}
6969 !21 = !{!"clang version 3.5.0 (trunk 214102:214133) (llvm/trunk 214102:214132)"}
70 !22 = !DILocalVariable(name: "sa", line: 5, arg: 1, scope: !7, file: !8, type: !"_ZTS2EA")
70 !22 = !DILocalVariable(name: "sa", line: 5, arg: 1, scope: !7, file: !8, type: !3)
7171 !23 = !DILocation(line: 5, column: 14, scope: !7)
7272 !24 = !DILocation(line: 6, column: 1, scope: !7)
73 !25 = !DILocalVariable(name: "sa", line: 5, arg: 1, scope: !17, file: !18, type: !"_ZTS2EA")
73 !25 = !DILocalVariable(name: "sa", line: 5, arg: 1, scope: !17, file: !18, type: !3)
7474 !26 = !DILocation(line: 5, column: 14, scope: !17)
7575 !27 = !DILocation(line: 6, column: 1, scope: !17)
342342 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "C", line: 10, size: 64, align: 32, file: !5, elements: !6, identifier: "_ZTS1C")
343343 !5 = !DIFile(filename: "incorrect-variable-debug-loc.cpp", directory: "/tmp/dbginfo")
344344 !6 = !{!7, !9, !10}
345 !7 = !DIDerivedType(tag: DW_TAG_member, name: "j", line: 12, size: 32, align: 32, file: !5, scope: !"_ZTS1C", baseType: !8)
345 !7 = !DIDerivedType(tag: DW_TAG_member, name: "j", line: 12, size: 32, align: 32, file: !5, scope: !4, baseType: !8)
346346 !8 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
347 !9 = !DIDerivedType(tag: DW_TAG_member, name: "b", line: 13, size: 32, align: 32, offset: 32, file: !5, scope: !"_ZTS1C", baseType: !"_ZTS1B")
348 !10 = !DISubprogram(name: "m_fn3", linkageName: "_ZN1C5m_fn3Ev", line: 11, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 11, file: !5, scope: !"_ZTS1C", type: !11)
347 !9 = !DIDerivedType(tag: DW_TAG_member, name: "b", line: 13, size: 32, align: 32, offset: 32, file: !5, scope: !4, baseType: !14)
348 !10 = !DISubprogram(name: "m_fn3", linkageName: "_ZN1C5m_fn3Ev", line: 11, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 11, file: !5, scope: !4, type: !11)
349349 !11 = !DISubroutineType(types: !12)
350350 !12 = !{null, !13}
351 !13 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS1C")
351 !13 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !4)
352352 !14 = !DICompositeType(tag: DW_TAG_structure_type, name: "B", line: 5, size: 32, align: 32, file: !5, elements: !15, identifier: "_ZTS1B")
353353 !15 = !{!16, !17}
354 !16 = !DIDerivedType(tag: DW_TAG_member, name: "i", line: 7, size: 32, align: 32, file: !5, scope: !"_ZTS1B", baseType: !8)
355 !17 = !DISubprogram(name: "m_fn2", linkageName: "_ZN1B5m_fn2Ev", line: 6, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 6, file: !5, scope: !"_ZTS1B", type: !18)
354 !16 = !DIDerivedType(tag: DW_TAG_member, name: "i", line: 7, size: 32, align: 32, file: !5, scope: !14, baseType: !8)
355 !17 = !DISubprogram(name: "m_fn2", linkageName: "_ZN1B5m_fn2Ev", line: 6, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 6, file: !5, scope: !14, type: !18)
356356 !18 = !DISubroutineType(types: !19)
357357 !19 = !{null, !20}
358 !20 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS1B")
358 !20 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !14)
359359 !22 = distinct !DISubprogram(name: "fn1", linkageName: "_Z3fn1v", line: 16, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 16, file: !5, scope: !23, type: !24, variables: !26)
360360 !23 = !DIFile(filename: "incorrect-variable-debug-loc.cpp", directory: "/tmp/dbginfo")
361361 !24 = !DISubroutineType(types: !25)
362362 !25 = !{!8}
363363 !26 = !{!27}
364 !27 = !DILocalVariable(name: "A", line: 17, scope: !22, file: !23, type: !"_ZTS1C")
365 !28 = distinct !DISubprogram(name: "m_fn3", linkageName: "_ZN1C5m_fn3Ev", line: 21, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 21, file: !5, scope: !"_ZTS1C", type: !11, declaration: !10, variables: !29)
364 !27 = !DILocalVariable(name: "A", line: 17, scope: !22, file: !23, type: !4)
365 !28 = distinct !DISubprogram(name: "m_fn3", linkageName: "_ZN1C5m_fn3Ev", line: 21, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 21, file: !5, scope: !4, type: !11, declaration: !10, variables: !29)
366366 !29 = !{!30}
367367 !30 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !28, type: !31)
368 !31 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !"_ZTS1C")
369 !32 = distinct !DISubprogram(name: "m_fn2", linkageName: "_ZN1B5m_fn2Ev", line: 6, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 6, file: !5, scope: !"_ZTS1B", type: !18, declaration: !17, variables: !33)
368 !31 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !4)
369 !32 = distinct !DISubprogram(name: "m_fn2", linkageName: "_ZN1B5m_fn2Ev", line: 6, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 6, file: !5, scope: !14, type: !18, declaration: !17, variables: !33)
370370 !33 = !{!34}
371371 !34 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !32, type: !35)
372 !35 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !"_ZTS1B")
372 !35 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !14)
373373 !36 = !{i32 2, !"Dwarf Version", i32 4}
374374 !37 = !{i32 2, !"Debug Info Version", i32 3}
375375 !38 = !{!"clang version 3.5.0 "}
376376 !39 = !DILocation(line: 6, scope: !32, inlinedAt: !40)
377377 !40 = !DILocation(line: 18, scope: !22)
378378 !41 = !{!42, !43, i64 0}
379 !42 = !{!"_ZTS1B", !43, i64 0}
379 !42 = !{!14, !43, i64 0}
380380 !43 = !{!"int", !44, i64 0}
381381 !44 = !{!"omnipotent char", !45, i64 0}
382382 !45 = !{!"Simple C/C++ TBAA"}
5151 !6 = !DISubprogram(name: "f1", linkageName: "_ZN3foo2f1Ev", line: 2, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 2, file: !1, scope: !4, type: !7)
5252 !7 = !DISubroutineType(types: !8)
5353 !8 = !{null, !9}
54 !9 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS3foo")
54 !9 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !4)
5555 !10 = !{i32 786468}
5656 !11 = !DISubprogram(name: "f2", linkageName: "_ZN3foo2f2Ev", line: 3, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 3, file: !1, scope: !4, type: !7)
5757 !12 = !{i32 786468}
5858 !14 = distinct !DISubprogram(name: "f1", linkageName: "_ZN3foo2f1Ev", line: 6, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 6, file: !1, scope: null, type: !7, declaration: !6, variables: !2)
5959 !15 = !{i32 2, !"Dwarf Version", i32 4}
6060 !16 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !14, type: !17)
61 !17 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !"_ZTS3foo")
61 !17 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !4)
6262 !18 = !DILocation(line: 0, scope: !14)
6363 !19 = !DILocation(line: 7, scope: !14)
6464 !20 = !{i32 1, !"Debug Info Version", i32 3}
326326 !38 = distinct !DILexicalBlock(line: 22, column: 10, file: !5, scope: !39)
327327 !39 = distinct !DILexicalBlock(line: 22, column: 7, file: !5, scope: !21)
328328 !40 = !DIImportedEntity(tag: DW_TAG_imported_module, line: 26, scope: !21, entity: !7)
329 !41 = !DIImportedEntity(tag: DW_TAG_imported_declaration, line: 27, scope: !21, entity: !"_ZTSN1A1B3fooE")
330 !42 = !DIImportedEntity(tag: DW_TAG_imported_declaration, line: 28, scope: !21, entity: !"_ZTSN1A1B3barE")
329 !41 = !DIImportedEntity(tag: DW_TAG_imported_declaration, line: 27, scope: !21, entity: !4)
330 !42 = !DIImportedEntity(tag: DW_TAG_imported_declaration, line: 28, scope: !21, entity: !8)
331331 !43 = !DIImportedEntity(tag: DW_TAG_imported_declaration, line: 29, scope: !21, entity: !14)
332332 !44 = !DIImportedEntity(tag: DW_TAG_imported_declaration, line: 30, scope: !21, entity: !31)
333333 !45 = !DIImportedEntity(tag: DW_TAG_imported_declaration, line: 31, scope: !21, entity: !46)
334 !46 = !DIDerivedType(tag: DW_TAG_typedef, name: "baz", line: 7, file: !5, scope: !6, baseType: !"_ZTSN1A1B3barE")
334 !46 = !DIDerivedType(tag: DW_TAG_typedef, name: "baz", line: 7, file: !5, scope: !6, baseType: !8)
335335 !47 = !DIImportedEntity(tag: DW_TAG_imported_declaration, line: 32, name: "X", scope: !21, entity: !7)
336336 !48 = !DIImportedEntity(tag: DW_TAG_imported_declaration, line: 33, name: "Y", scope: !21, entity: !47)
337337 !49 = !DIImportedEntity(tag: DW_TAG_imported_declaration, line: 34, scope: !21, entity: !50)
205205 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "C", line: 5, size: 32, align: 32, file: !5, elements: !6, identifier: "_ZTS1C")
206206 !5 = !DIFile(filename: "recursive_inlining.cpp", directory: "/usr/local/google/home/blaikie/dev/scratch/missing_concrete_variable_on_darwin/reduce")
207207 !6 = !{!7, !9}
208 !7 = !DIDerivedType(tag: DW_TAG_member, name: "b", line: 6, size: 32, align: 32, file: !5, scope: !"_ZTS1C", baseType: !8)
208 !7 = !DIDerivedType(tag: DW_TAG_member, name: "b", line: 6, size: 32, align: 32, file: !5, scope: !4, baseType: !8)
209209 !8 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
210 !9 = !DISubprogram(name: "m_fn2", linkageName: "_ZN1C5m_fn2Ev", line: 7, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 7, file: !5, scope: !"_ZTS1C", type: !10)
210 !9 = !DISubprogram(name: "m_fn2", linkageName: "_ZN1C5m_fn2Ev", line: 7, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 7, file: !5, scope: !4, type: !10)
211211 !10 = !DISubroutineType(types: !11)
212212 !11 = !{null, !12}
213 !12 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS1C")
213 !12 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !4)
214214 !14 = distinct !DISubprogram(name: "fn6", linkageName: "_Z3fn6v", line: 15, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 15, file: !5, scope: !15, type: !16, variables: !2)
215215 !15 = !DIFile(filename: "recursive_inlining.cpp", directory: "/usr/local/google/home/blaikie/dev/scratch/missing_concrete_variable_on_darwin/reduce")
216216 !16 = !DISubroutineType(types: !17)
219219 !19 = distinct !DISubprogram(name: "fn4", linkageName: "_Z3fn4v", line: 21, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 21, file: !5, scope: !15, type: !16, variables: !2)
220220 !20 = distinct !DISubprogram(name: "fn5", linkageName: "_Z3fn5v", line: 22, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 22, file: !5, scope: !15, type: !16, variables: !2)
221221 !21 = distinct !DISubprogram(name: "fn7", linkageName: "_Z3fn7v", line: 14, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 14, file: !5, scope: !15, type: !16, variables: !2)
222 !22 = distinct !DISubprogram(name: "m_fn2", linkageName: "_ZN1C5m_fn2Ev", line: 7, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 7, file: !5, scope: !"_ZTS1C", type: !10, declaration: !9, variables: !23)
222 !22 = distinct !DISubprogram(name: "m_fn2", linkageName: "_ZN1C5m_fn2Ev", line: 7, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 7, file: !5, scope: !4, type: !10, declaration: !9, variables: !23)
223223 !23 = !{!24}
224224 !24 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !22, type: !25)
225 !25 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !"_ZTS1C")
225 !25 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !4)
226226 !26 = !{!27}
227227 !27 = !DIGlobalVariable(name: "x", line: 13, isLocal: false, isDefinition: true, scope: null, file: !15, type: !25, variable: %struct.C** @x)
228228 !28 = !{i32 2, !"Dwarf Version", i32 4}
240240 !40 = !DILocation(line: 9, scope: !41, inlinedAt: !32)
241241 !41 = distinct !DILexicalBlock(line: 9, column: 0, file: !5, scope: !22)
242242 !42 = !{!43, !44, i64 0}
243 !43 = !{!"_ZTS1C", !44, i64 0}
243 !43 = !{!4, !44, i64 0}
244244 !44 = !{!"int", !35, i64 0}
245245 !45 = !DILocation(line: 9, scope: !46, inlinedAt: !32)
246246 !46 = distinct !DILexicalBlock(line: 9, column: 0, file: !5, scope: !41)
126126 !1 = !DIFile(filename: "tmp.cpp", directory: ".")
127127 !2 = !{}
128128 !3 = !{!4, !18, !19, !22, !23, !24}
129 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "C", line: 1, file: !1, elements: !5, vtableHolder: !"_ZTS1C", identifier: "_ZTS1C")
129 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "C", line: 1, file: !1, elements: !5, vtableHolder: !4, identifier: "_ZTS1C")
130130 !5 = !{!6, !13}
131131 !6 = !DIDerivedType(tag: DW_TAG_member, name: "_vptr$C", flags: DIFlagArtificial, file: !1, scope: !7, baseType: !8)
132132 !7 = !DIFile(filename: "tmp.cpp", directory: ".")
135135 !10 = !DISubroutineType(types: !11)
136136 !11 = !{!12}
137137 !12 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
138 !13 = !DISubprogram(name: "foo", linkageName: "_ZN1C3fooEv", line: 2, isLocal: false, isDefinition: false, virtuality: DW_VIRTUALITY_virtual, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 2, file: !1, scope: !"_ZTS1C", type: !14, containingType: !"_ZTS1C")
138 !13 = !DISubprogram(name: "foo", linkageName: "_ZN1C3fooEv", line: 2, isLocal: false, isDefinition: false, virtuality: DW_VIRTUALITY_virtual, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 2, file: !1, scope: !4, type: !14, containingType: !4)
139139 !14 = !DISubroutineType(types: !15)
140140 !15 = !{null, !16}
141 !16 = !DIDerivedType(tag: DW_TAG_pointer_type, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS1C")
141 !16 = !DIDerivedType(tag: DW_TAG_pointer_type, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !4)
142142 !18 = !DICompositeType(tag: DW_TAG_structure_type, name: "bar", line: 7, size: 8, align: 8, file: !1, elements: !2, identifier: "_ZTS3bar")
143143 !19 = !DICompositeType(tag: DW_TAG_structure_type, name: "D", line: 9, size: 8, align: 8, file: !1, elements: !20, identifier: "_ZTS1D")
144144 !20 = !{!21}
145 !21 = !DIDerivedType(tag: DW_TAG_member, name: "a", line: 11, flags: DIFlagStaticMember, file: !1, scope: !"_ZTS1D", baseType: !12)
146 !22 = !DICompositeType(tag: DW_TAG_structure_type, name: "Nested", line: 12, size: 8, align: 8, file: !1, scope: !"_ZTS1D", elements: !2, identifier: "_ZTSN1D6NestedE")
147 !23 = !DICompositeType(tag: DW_TAG_structure_type, name: "Nested2", line: 13, flags: DIFlagFwdDecl, file: !1, scope: !"_ZTS1D", identifier: "_ZTSN1D7Nested2E")
148 !24 = !DICompositeType(tag: DW_TAG_structure_type, name: "virt", line: 15, file: !1, scope: !"_ZTS1D", elements: !25, templateParams: !28, identifier: "_ZTSN1D4virtI3barEE")
145 !21 = !DIDerivedType(tag: DW_TAG_member, name: "a", line: 11, flags: DIFlagStaticMember, file: !1, scope: !19, baseType: !12)
146 !22 = !DICompositeType(tag: DW_TAG_structure_type, name: "Nested", line: 12, size: 8, align: 8, file: !1, scope: !19, elements: !2, identifier: "_ZTSN1D6NestedE")
147 !23 = !DICompositeType(tag: DW_TAG_structure_type, name: "Nested2", line: 13, flags: DIFlagFwdDecl, file: !1, scope: !19, identifier: "_ZTSN1D7Nested2E")
148 !24 = !DICompositeType(tag: DW_TAG_structure_type, name: "virt", line: 15, file: !1, scope: !19, elements: !25, templateParams: !28, identifier: "_ZTSN1D4virtI3barEE")
149149 !25 = !{!26}
150 !26 = !DIDerivedType(tag: DW_TAG_member, name: "values", line: 16, size: 64, align: 64, file: !1, scope: !"_ZTSN1D4virtI3barEE", baseType: !27)
151 !27 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !"_ZTS3bar")
150 !26 = !DIDerivedType(tag: DW_TAG_member, name: "values", line: 16, size: 64, align: 64, file: !1, scope: !24, baseType: !27)
151 !27 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !18)
152152 !28 = !{!29}
153 !29 = !DITemplateTypeParameter(name: "T", type: !"_ZTS3bar")
153 !29 = !DITemplateTypeParameter(name: "T", type: !18)
154154 !31 = distinct !DISubprogram(name: "foo", linkageName: "_ZN1C3fooEv", line: 4, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 4, file: !1, scope: null, type: !14, declaration: !13, variables: !2)
155155 !32 = distinct !DISubprogram(name: "test", linkageName: "_Z4testv", line: 20, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 20, file: !1, scope: !7, type: !33, variables: !2)
156156 !33 = !DISubroutineType(types: !34)
157157 !34 = !{null}
158158 !35 = !{i32 2, !"Dwarf Version", i32 2}
159159 !36 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !31, type: !37)
160 !37 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !"_ZTS1C")
160 !37 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !4)
161161 !38 = !DILocation(line: 0, scope: !31)
162162 !39 = !DILocation(line: 5, scope: !31)
163163 !40 = !DILocalVariable(name: "B", line: 21, scope: !32, file: !7, type: !41)
164 !41 = !DIDerivedType(tag: DW_TAG_typedef, name: "baz", line: 8, file: !1, baseType: !"_ZTS3bar")
164 !41 = !DIDerivedType(tag: DW_TAG_typedef, name: "baz", line: 8, file: !1, baseType: !18)
165165 !42 = !DILocation(line: 21, scope: !32)
166166 !43 = !DILocalVariable(name: "A", line: 22, scope: !32, file: !7, type: !44)
167 !44 = !DICompositeType(tag: DW_TAG_array_type, size: 24, align: 8, baseType: !"_ZTS3bar", elements: !45)
167 !44 = !DICompositeType(tag: DW_TAG_array_type, size: 24, align: 8, baseType: !18, elements: !45)
168168 !45 = !{!46}
169169 !46 = !DISubrange(count: 3)
170170 !47 = !DILocation(line: 22, scope: !32)
171171 !48 = !DILocalVariable(name: "B2", line: 23, scope: !32, file: !7, type: !49)
172 !49 = !DIDerivedType(tag: DW_TAG_typedef, name: "baz2", line: 10, file: !1, scope: !"_ZTS1D", baseType: !"_ZTS3bar")
172 !49 = !DIDerivedType(tag: DW_TAG_typedef, name: "baz2", line: 10, file: !1, scope: !19, baseType: !18)
173173 !50 = !DILocation(line: 23, scope: !32)
174174 !51 = !DILocalVariable(name: "e", line: 24, scope: !32, file: !7, type: !22)
175175 !52 = !DILocation(line: 24, scope: !32)
176176 !53 = !DILocalVariable(name: "p", line: 25, scope: !32, file: !7, type: !54)
177 !54 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !"_ZTSN1D7Nested2E")
177 !54 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !23)
178178 !55 = !DILocation(line: 25, scope: !32)
179179 !56 = !DILocalVariable(name: "t", line: 26, scope: !32, file: !7, type: !24)
180180 !57 = !DILocation(line: 26, scope: !32)
2323 !5 = !{!6}
2424 !6 = !DIGlobalVariable(name: "x", line: 4, isLocal: false, isDefinition: true, scope: null, file: !7, type: !8, variable: i64* @x)
2525 !7 = !DIFile(filename: "foo.cpp", directory: ".")
26 !8 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !9, extraData: !"_ZTS3Foo")
26 !8 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !9, extraData: !4)
2727 !9 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
2828 !10 = !{i32 2, !"Dwarf Version", i32 2}
2929 !11 = !{i32 1, !"Debug Info Version", i32 3}
7777 !3 = !{!4}
7878 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "A", line: 3, size: 8, align: 8, file: !1, elements: !5, identifier: "_ZTS1A")
7979 !5 = !{!6}
80 !6 = !DISubprogram(name: "a", linkageName: "_ZN1A1aEiz", line: 6, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 6, file: !1, scope: !"_ZTS1A", type: !7)
80 !6 = !DISubprogram(name: "a", linkageName: "_ZN1A1aEiz", line: 6, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 6, file: !1, scope: !4, type: !7)
8181 !7 = !DISubroutineType(types: !8)
8282 !8 = !{null, !9, !10, null}
83 !9 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS1A")
83 !9 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !4)
8484 !10 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
8585 !14 = distinct !DISubprogram(name: "b", linkageName: "_Z1biz", line: 13, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 13, file: !1, scope: !15, type: !16, variables: !2)
8686 !15 = !DIFile(filename: "llvm/tools/clang/test/CodeGenCXX/debug-info-varargs.cpp", directory: "radar/13690847")
4141 !1 = !DIFile(filename: "x", directory: "x")
4242 !2 = !{}
4343 !3 = !{!4}
44 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "A", file: !1, line: 1, size: 64, align: 64, elements: !5, vtableHolder: !"_ZTS1A", identifier: "_ZTS1A")
44 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "A", file: !1, line: 1, size: 64, align: 64, elements: !5, vtableHolder: !4, identifier: "_ZTS1A")
4545 !5 = !{!6, !12, !16}
4646 !6 = !DIDerivedType(tag: DW_TAG_member, name: "_vptr$A", scope: !1, file: !1, baseType: !7, size: 64, flags: DIFlagArtificial)
4747 !7 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !8, size: 64)
4949 !9 = !DISubroutineType(types: !10)
5050 !10 = !{!11}
5151 !11 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
52 !12 = !DISubprogram(name: "f", linkageName: "_ZN1A1fEv", scope: !"_ZTS1A", file: !1, line: 2, type: !13, isLocal: false, isDefinition: false, scopeLine: 2, containingType: !"_ZTS1A", virtuality: DW_VIRTUALITY_virtual, virtualIndex: 0, flags: DIFlagPrototyped, isOptimized: false)
52 !12 = !DISubprogram(name: "f", linkageName: "_ZN1A1fEv", scope: !4, file: !1, line: 2, type: !13, isLocal: false, isDefinition: false, scopeLine: 2, containingType: !4, virtuality: DW_VIRTUALITY_virtual, virtualIndex: 0, flags: DIFlagPrototyped, isOptimized: false)
5353 !13 = !DISubroutineType(types: !14)
5454 !14 = !{null, !15}
55 !15 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !"_ZTS1A", size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
56 !16 = !DISubprogram(name: "g", linkageName: "_ZN1A1gEv", scope: !"_ZTS1A", file: !1, line: 3, type: !13, isLocal: false, isDefinition: false, scopeLine: 3, containingType: !"_ZTS1A", virtuality: DW_VIRTUALITY_virtual, virtualIndex: 4294967295, flags: DIFlagPrototyped, isOptimized: false)
57 !18 = distinct !DISubprogram(name: "f", linkageName: "_ZN1A1fEv", scope: !"_ZTS1A", file: !1, line: 6, type: !13, isLocal: false, isDefinition: true, scopeLine: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, declaration: !12, variables: !2)
58 !19 = distinct !DISubprogram(name: "g", linkageName: "_ZN1A1gEv", scope: !"_ZTS1A", file: !1, line: 7, type: !13, isLocal: false, isDefinition: true, scopeLine: 7, flags: DIFlagPrototyped, isOptimized: false, unit: !0, declaration: !16, variables: !2)
55 !15 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !4, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
56 !16 = !DISubprogram(name: "g", linkageName: "_ZN1A1gEv", scope: !4, file: !1, line: 3, type: !13, isLocal: false, isDefinition: false, scopeLine: 3, containingType: !4, virtuality: DW_VIRTUALITY_virtual, virtualIndex: 4294967295, flags: DIFlagPrototyped, isOptimized: false)
57 !18 = distinct !DISubprogram(name: "f", linkageName: "_ZN1A1fEv", scope: !4, file: !1, line: 6, type: !13, isLocal: false, isDefinition: true, scopeLine: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, declaration: !12, variables: !2)
58 !19 = distinct !DISubprogram(name: "g", linkageName: "_ZN1A1gEv", scope: !4, file: !1, line: 7, type: !13, isLocal: false, isDefinition: true, scopeLine: 7, flags: DIFlagPrototyped, isOptimized: false, unit: !0, declaration: !16, variables: !2)
5959 !20 = !{i32 2, !"Dwarf Version", i32 4}
6060 !21 = !{i32 2, !"Debug Info Version", i32 3}
6161 !22 = !{!"clang version 3.9.0 (trunk 263469) (llvm/trunk 263156)"}
6262 !23 = !DILocalVariable(name: "this", arg: 1, scope: !18, type: !24, flags: DIFlagArtificial | DIFlagObjectPointer)
63 !24 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !"_ZTS1A", size: 64, align: 64)
63 !24 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !4, size: 64, align: 64)
6464 !25 = !DIExpression()
6565 !26 = !DILocation(line: 0, scope: !18)
6666 !27 = !DILocation(line: 6, column: 14, scope: !18)
8282 !3 = !{!4}
8383 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "A", line: 1, size: 8, align: 8, file: !1, elements: !5, identifier: "_ZTS1A")
8484 !5 = !{!6, !12}
85 !6 = !DISubprogram(name: "A", line: 2, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 2, file: !1, scope: !"_ZTS1A", type: !7)
85 !6 = !DISubprogram(name: "A", line: 2, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 2, file: !1, scope: !4, type: !7)
8686 !7 = !DISubroutineType(types: !8)
8787 !8 = !{null, !9, !10}
88 !9 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS1A")
88 !9 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !4)
8989 !10 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
90 !12 = !DISubprogram(name: "~A", line: 3, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 3, file: !1, scope: !"_ZTS1A", type: !13)
90 !12 = !DISubprogram(name: "~A", line: 3, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 3, file: !1, scope: !4, type: !13)
9191 !13 = !DISubroutineType(types: !14)
9292 !14 = !{null, !9}
93 !17 = distinct !DISubprogram(name: "~A", linkageName: "_ZN1AD2Ev", line: 6, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 6, file: !1, scope: !"_ZTS1A", type: !13, declaration: !12, variables: !2)
94 !18 = distinct !DISubprogram(name: "~A", linkageName: "_ZN1AD1Ev", line: 6, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 6, file: !1, scope: !"_ZTS1A", type: !13, declaration: !12, variables: !2)
93 !17 = distinct !DISubprogram(name: "~A", linkageName: "_ZN1AD2Ev", line: 6, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 6, file: !1, scope: !4, type: !13, declaration: !12, variables: !2)
94 !18 = distinct !DISubprogram(name: "~A", linkageName: "_ZN1AD1Ev", line: 6, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 6, file: !1, scope: !4, type: !13, declaration: !12, variables: !2)
9595 !19 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", line: 10, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 10, file: !1, scope: !20, type: !21, variables: !2)
9696 !20 = !DIFile(filename: "linkage-name.cpp", directory: "")
9797 !21 = !DISubroutineType(types: !22)
100100 !24 = !{i32 1, !"Debug Info Version", i32 3}
101101 !25 = !{!"clang version 3.5.0 "}
102102 !26 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !17, type: !27)
103 !27 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !"_ZTS1A")
103 !27 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !4)
104104 !28 = !DILocation(line: 0, scope: !17)
105105 !29 = !DILocation(line: 8, scope: !17)
106106 !30 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !18, type: !27)
107107 !31 = !DILocation(line: 0, scope: !18)
108108 !32 = !DILocation(line: 6, scope: !18)
109109 !33 = !DILocation(line: 8, scope: !18)
110 !34 = !DILocalVariable(name: "a", line: 11, scope: !19, file: !20, type: !"_ZTS1A")
110 !34 = !DILocalVariable(name: "a", line: 11, scope: !19, file: !20, type: !4)
111111 !35 = !DILocation(line: 11, scope: !19)
112112 !36 = !DILocation(line: 12, scope: !19)
7777 !3 = !{!4, !8}
7878 !4 = !DICompositeType(tag: DW_TAG_structure_type, line: 1, size: 32, align: 32, file: !1, elements: !5, identifier: "_ZTS1S")
7979 !5 = !{!6}
80 !6 = !DIDerivedType(tag: DW_TAG_member, name: "i", line: 1, size: 32, align: 32, file: !1, scope: !"_ZTS1S", baseType: !7)
80 !6 = !DIDerivedType(tag: DW_TAG_member, name: "i", line: 1, size: 32, align: 32, file: !1, scope: !4, baseType: !7)
8181 !7 = !DIBasicType(tag: DW_TAG_base_type, name: "unsigned int", size: 32, align: 32, encoding: DW_ATE_unsigned)
8282 !8 = !DICompositeType(tag: DW_TAG_class_type, name: "C", line: 8, size: 32, align: 32, file: !1, elements: !9, identifier: "_ZTS1C")
8383 !9 = !{!10}
84 !10 = !DIDerivedType(tag: DW_TAG_member, name: "i", line: 8, size: 32, align: 32, flags: DIFlagPublic, file: !1, scope: !"_ZTS1C", baseType: !7)
84 !10 = !DIDerivedType(tag: DW_TAG_member, name: "i", line: 8, size: 32, align: 32, flags: DIFlagPublic, file: !1, scope: !8, baseType: !7)
8585 !12 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foo1S", line: 3, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 3, file: !1, scope: !13, type: !14, variables: !17)
8686 !13 = !DIFile(filename: "sroasplit-4.cpp", directory: "")
8787 !14 = !DISubroutineType(types: !15)
8888 !15 = !{!7, !16}
89 !16 = !DIDerivedType(tag: DW_TAG_typedef, name: "S", line: 1, file: !1, baseType: !"_ZTS1S")
89 !16 = !DIDerivedType(tag: DW_TAG_typedef, name: "S", line: 1, file: !1, baseType: !4)
9090 !17 = !{!18}
9191 !18 = !DILocalVariable(name: "s", line: 3, arg: 1, scope: !12, file: !13, type: !16)
9292 !19 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foo1C", line: 10, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 10, file: !1, scope: !13, type: !20, variables: !22)
9393 !20 = !DISubroutineType(types: !21)
94 !21 = !{!7, !"_ZTS1C"}
94 !21 = !{!7, !8}
9595 !22 = !{!23}
96 !23 = !DILocalVariable(name: "c", line: 10, arg: 1, scope: !19, file: !13, type: !"_ZTS1C")
96 !23 = !DILocalVariable(name: "c", line: 10, arg: 1, scope: !19, file: !13, type: !8)
9797 !24 = distinct !DISubprogram(name: "bar", linkageName: "_Z3barv", line: 15, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 15, file: !1, scope: !13, type: !25, variables: !27)
9898 !25 = !DISubroutineType(types: !26)
9999 !26 = !{!7}
6666 !3 = !{!4}
6767 !4 = !DICompositeType(tag: DW_TAG_class_type, name: "A", line: 1, size: 32, align: 32, file: !1, elements: !5, identifier: "_ZTS1A")
6868 !5 = !{!6, !8}
69 !6 = !DIDerivedType(tag: DW_TAG_member, name: "a", line: 5, size: 32, align: 32, flags: DIFlagPrivate, file: !1, scope: !"_ZTS1A", baseType: !7)
69 !6 = !DIDerivedType(tag: DW_TAG_member, name: "a", line: 5, size: 32, align: 32, flags: DIFlagPrivate, file: !1, scope: !4, baseType: !7)
7070 !7 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
71 !8 = !DISubprogram(name: "A", line: 3, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 3, file: !1, scope: !"_ZTS1A", type: !9)
71 !8 = !DISubprogram(name: "A", line: 3, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 3, file: !1, scope: !4, type: !9)
7272 !9 = !DISubroutineType(types: !10)
7373 !10 = !{null, !11, !7}
74 !11 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS1A")
74 !11 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !4)
7575 !14 = distinct !DISubprogram(name: "__cxx_global_var_init", line: 8, isLocal: true, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 8, file: !1, scope: !15, type: !16, variables: !2)
7676 !15 = !DIFile(filename: "baz.cpp", directory: "/usr/local/google/home/echristo/tmp")
7777 !16 = !DISubroutineType(types: !17)
7878 !17 = !{null}
79 !18 = distinct !DISubprogram(name: "A", linkageName: "_ZN1AC2Ei", line: 3, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 3, file: !1, scope: !"_ZTS1A", type: !9, declaration: !8, variables: !2)
79 !18 = distinct !DISubprogram(name: "A", linkageName: "_ZN1AC2Ei", line: 3, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 3, file: !1, scope: !4, type: !9, declaration: !8, variables: !2)
8080 !19 = distinct !DISubprogram(name: "", linkageName: "_GLOBAL__I_a", line: 3, isLocal: true, isDefinition: true, virtualIndex: 6, flags: DIFlagArtificial, isOptimized: false, unit: !0, scopeLine: 3, file: !1, scope: !15, type: !20, variables: !2)
8181 !20 = !DISubroutineType(types: !2)
8282 !21 = !{!22}
8686 !25 = !{!"clang version 3.5 (trunk 199923) (llvm/trunk 199940)"}
8787 !26 = !DILocation(line: 8, scope: !14)
8888 !27 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !18, type: !28)
89 !28 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !"_ZTS1A")
89 !28 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !4)
9090 !29 = !DILocation(line: 0, scope: !18)
9191 !30 = !DILocalVariable(name: "i", line: 3, arg: 2, scope: !18, file: !15, type: !7)
9292 !31 = !DILocation(line: 3, scope: !18)
3939 !3 = !{!4}
4040 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "foo", line: 1, size: 64, align: 32, file: !1, elements: !5, identifier: "_ZTS3foo")
4141 !5 = !{!6, !8}
42 !6 = !DIDerivedType(tag: DW_TAG_member, name: "c", line: 2, size: 8, align: 8, file: !1, scope: !"_ZTS3foo", baseType: !7)
42 !6 = !DIDerivedType(tag: DW_TAG_member, name: "c", line: 2, size: 8, align: 8, file: !1, scope: !4, baseType: !7)
4343 !7 = !DIBasicType(tag: DW_TAG_base_type, name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
44 !8 = !DIDerivedType(tag: DW_TAG_member, name: "i", line: 3, size: 32, align: 32, offset: 32, file: !1, scope: !"_ZTS3foo", baseType: !9)
44 !8 = !DIDerivedType(tag: DW_TAG_member, name: "i", line: 3, size: 32, align: 32, offset: 32, file: !1, scope: !4, baseType: !9)
4545 !9 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
4646 !10 = !{!11}
4747 !11 = !DIGlobalVariable(name: "f", line: 6, isLocal: false, isDefinition: true, scope: null, file: !12, type: !4, variable: %struct.foo* @f)
111111 !3 = !{!4, !12, !22}
112112 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "A", line: 3, size: 8, align: 8, file: !1, elements: !5, identifier: "_ZTS1A")
113113 !5 = !{!6, !8}
114 !6 = !DIDerivedType(tag: DW_TAG_member, name: "pub_default_static", line: 7, flags: DIFlagStaticMember, file: !1, scope: !"_ZTS1A", baseType: !7)
114 !6 = !DIDerivedType(tag: DW_TAG_member, name: "pub_default_static", line: 7, flags: DIFlagStaticMember, file: !1, scope: !4, baseType: !7)
115115 !7 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
116 !8 = !DISubprogram(name: "pub_default", linkageName: "_ZN1A11pub_defaultEv", line: 5, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 5, file: !1, scope: !"_ZTS1A", type: !9)
116 !8 = !DISubprogram(name: "pub_default", linkageName: "_ZN1A11pub_defaultEv", line: 5, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 5, file: !1, scope: !4, type: !9)
117117 !9 = !DISubroutineType(types: !10)
118118 !10 = !{null, !11}
119 !11 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS1A")
119 !11 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !4)
120120 !12 = !DICompositeType(tag: DW_TAG_class_type, name: "B", line: 11, size: 8, align: 8, file: !1, elements: !13, identifier: "_ZTS1B")
121121 !13 = !{!14, !15, !16, !20, !21}
122 !14 = !DIDerivedType(tag: DW_TAG_inheritance, flags: DIFlagPublic, scope: !"_ZTS1B", baseType: !"_ZTS1A")
123 !15 = !DIDerivedType(tag: DW_TAG_member, name: "public_static", line: 16, flags: DIFlagPublic | DIFlagStaticMember, file: !1, scope: !"_ZTS1B", baseType: !7)
124 !16 = !DISubprogram(name: "pub", linkageName: "_ZN1B3pubEv", line: 14, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPublic | DIFlagPrototyped, isOptimized: false, scopeLine: 14, file: !1, scope: !"_ZTS1B", type: !17)
122 !14 = !DIDerivedType(tag: DW_TAG_inheritance, flags: DIFlagPublic, scope: !12, baseType: !4)
123 !15 = !DIDerivedType(tag: DW_TAG_member, name: "public_static", line: 16, flags: DIFlagPublic | DIFlagStaticMember, file: !1, scope: !12, baseType: !7)
124 !16 = !DISubprogram(name: "pub", linkageName: "_ZN1B3pubEv", line: 14, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPublic | DIFlagPrototyped, isOptimized: false, scopeLine: 14, file: !1, scope: !12, type: !17)
125125 !17 = !DISubroutineType(types: !18)
126126 !18 = !{null, !19}
127 !19 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS1B")
128 !20 = !DISubprogram(name: "prot", linkageName: "_ZN1B4protEv", line: 19, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagProtected | DIFlagPrototyped, isOptimized: false, scopeLine: 19, file: !1, scope: !"_ZTS1B", type: !17)
129 !21 = !DISubprogram(name: "priv_default", linkageName: "_ZN1B12priv_defaultEv", line: 22, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 22, file: !1, scope: !"_ZTS1B", type: !17)
127 !19 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !12)
128 !20 = !DISubprogram(name: "prot", linkageName: "_ZN1B4protEv", line: 19, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagProtected | DIFlagPrototyped, isOptimized: false, scopeLine: 19, file: !1, scope: !12, type: !17)
129 !21 = !DISubprogram(name: "priv_default", linkageName: "_ZN1B12priv_defaultEv", line: 22, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 22, file: !1, scope: !12, type: !17)
130130 !22 = !DICompositeType(tag: DW_TAG_union_type, name: "U", line: 25, size: 32, align: 32, file: !1, elements: !23, identifier: "_ZTS1U")
131131 !23 = !{!24, !25}
132 !24 = !DIDerivedType(tag: DW_TAG_member, name: "union_priv", line: 30, size: 32, align: 32, flags: DIFlagPrivate, file: !1, scope: !"_ZTS1U", baseType: !7)
133 !25 = !DISubprogram(name: "union_pub_default", linkageName: "_ZN1U17union_pub_defaultEv", line: 27, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 27, file: !1, scope: !"_ZTS1U", type: !26)
132 !24 = !DIDerivedType(tag: DW_TAG_member, name: "union_priv", line: 30, size: 32, align: 32, flags: DIFlagPrivate, file: !1, scope: !22, baseType: !7)
133 !25 = !DISubprogram(name: "union_pub_default", linkageName: "_ZN1U17union_pub_defaultEv", line: 27, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 27, file: !1, scope: !22, type: !26)
134134 !26 = !DISubroutineType(types: !27)
135135 !27 = !{null, !28}
136 !28 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS1U")
136 !28 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !22)
137137 !30 = distinct !DISubprogram(name: "free", linkageName: "_Z4freev", line: 35, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 35, file: !1, scope: !31, type: !32, variables: !2)
138138 !31 = !DIFile(filename: "/llvm/tools/clang/test/CodeGenCXX/debug-info-access.cpp", directory: "")
139139 !32 = !DISubroutineType(types: !33)
140140 !33 = !{null}
141141 !34 = !{!35, !36, !37}
142 !35 = !DIGlobalVariable(name: "a", line: 37, isLocal: false, isDefinition: true, scope: null, file: !31, type: !"_ZTS1A", variable: %struct.A* @a)
143 !36 = !DIGlobalVariable(name: "b", line: 38, isLocal: false, isDefinition: true, scope: null, file: !31, type: !"_ZTS1B", variable: %class.B* @b)
144 !37 = !DIGlobalVariable(name: "u", line: 39, isLocal: false, isDefinition: true, scope: null, file: !31, type: !"_ZTS1U", variable: %union.U* @u)
142 !35 = !DIGlobalVariable(name: "a", line: 37, isLocal: false, isDefinition: true, scope: null, file: !31, type: !4, variable: %struct.A* @a)
143 !36 = !DIGlobalVariable(name: "b", line: 38, isLocal: false, isDefinition: true, scope: null, file: !31, type: !12, variable: %class.B* @b)
144 !37 = !DIGlobalVariable(name: "u", line: 39, isLocal: false, isDefinition: true, scope: null, file: !31, type: !22, variable: %union.U* @u)
145145 !38 = !{i32 2, !"Dwarf Version", i32 2}
146146 !39 = !{i32 2, !"Debug Info Version", i32 3}
147147 !40 = !{!"clang version 3.6.0 "}
137137 !21 = !DILocalVariable(name: "b", line: 1, arg: 1, scope: !4, file: !5, type: !8)
138138 !22 = !DILocation(line: 1, scope: !4)
139139 !23 = !DILocation(line: 2, scope: !4)
140 !24 = !DILocalVariable(name: "a", line: 6, arg: 1, scope: !14, file: !15, type: !"_ZTS1A")
140 !24 = !DILocalVariable(name: "a", line: 6, arg: 1, scope: !14, file: !15, type: !12)
141141 !25 = !DILocation(line: 6, scope: !14)
142142 !26 = !DILocalVariable(name: "z", line: 7, scope: !14, file: !15, type: !8)
143143 !27 = !DILocation(line: 7, scope: !14)
105105 !3 = !{!4, !8}
106106 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "foo", line: 5, size: 64, align: 64, file: !1, elements: !5, identifier: "_ZTS3foo")
107107 !5 = !{!6}
108 !6 = !DIDerivedType(tag: DW_TAG_member, name: "b", line: 6, size: 64, align: 64, file: !1, scope: !"_ZTS3foo", baseType: !7)
109 !7 = !DIDerivedType(tag: DW_TAG_typedef, name: "base_type", line: 4, file: !1, baseType: !"_ZTS4base")
108 !6 = !DIDerivedType(tag: DW_TAG_member, name: "b", line: 6, size: 64, align: 64, file: !1, scope: !4, baseType: !7)
109 !7 = !DIDerivedType(tag: DW_TAG_typedef, name: "base_type", line: 4, file: !1, baseType: !8)
110110 !8 = !DICompositeType(tag: DW_TAG_structure_type, name: "base", line: 1, flags: DIFlagFwdDecl, file: !1, identifier: "_ZTS4base")
111111 !10 = distinct !DISubprogram(name: "__cxx_global_var_init", line: 8, isLocal: true, isDefinition: true, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 8, file: !1, scope: !11, type: !12, variables: !2)
112112 !11 = !DIFile(filename: "decl-derived-member.cpp", directory: "/tmp/dbginfo")
113113 !12 = !DISubroutineType(types: !13)
114114 !13 = !{null}
115 !14 = distinct !DISubprogram(name: "foo", linkageName: "_ZN3fooC2Ev", line: 5, isLocal: false, isDefinition: true, flags: DIFlagArtificial | DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 5, file: !1, scope: !"_ZTS3foo", type: !15, declaration: !18, variables: !2)
115 !14 = distinct !DISubprogram(name: "foo", linkageName: "_ZN3fooC2Ev", line: 5, isLocal: false, isDefinition: true, flags: DIFlagArtificial | DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 5, file: !1, scope: !4, type: !15, declaration: !18, variables: !2)
116116 !15 = !DISubroutineType(types: !16)
117117 !16 = !{null, !17}
118 !17 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS3foo")
119 !18 = !DISubprogram(name: "foo", isLocal: false, isDefinition: false, flags: DIFlagArtificial | DIFlagPrototyped, isOptimized: false, scope: !"_ZTS3foo", type: !15)
120 !19 = distinct !DISubprogram(name: "base", linkageName: "_ZN4baseC2Ev", line: 1, isLocal: false, isDefinition: true, flags: DIFlagArtificial | DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 1, file: !1, scope: !"_ZTS4base", type: !20, declaration: !23, variables: !2)
118 !17 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !4)
119 !18 = !DISubprogram(name: "foo", isLocal: false, isDefinition: false, flags: DIFlagArtificial | DIFlagPrototyped, isOptimized: false, scope: !4, type: !15)
120 !19 = distinct !DISubprogram(name: "base", linkageName: "_ZN4baseC2Ev", line: 1, isLocal: false, isDefinition: true, flags: DIFlagArtificial | DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 1, file: !1, scope: !8, type: !20, declaration: !23, variables: !2)
121121 !20 = !DISubroutineType(types: !21)
122122 !21 = !{null, !22}
123 !22 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS4base")
124 !23 = !DISubprogram(name: "base", isLocal: false, isDefinition: false, flags: DIFlagArtificial | DIFlagPrototyped, isOptimized: false, scope: !"_ZTS4base", type: !20)
125 !24 = distinct !DISubprogram(name: "~foo", linkageName: "_ZN3fooD2Ev", line: 5, isLocal: false, isDefinition: true, flags: DIFlagArtificial | DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 5, file: !1, scope: !"_ZTS3foo", type: !15, declaration: !25, variables: !2)
126 !25 = !DISubprogram(name: "~foo", isLocal: false, isDefinition: false, flags: DIFlagArtificial | DIFlagPrototyped, isOptimized: false, scope: !"_ZTS3foo", type: !15)
123 !22 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !8)
124 !23 = !DISubprogram(name: "base", isLocal: false, isDefinition: false, flags: DIFlagArtificial | DIFlagPrototyped, isOptimized: false, scope: !8, type: !20)
125 !24 = distinct !DISubprogram(name: "~foo", linkageName: "_ZN3fooD2Ev", line: 5, isLocal: false, isDefinition: true, flags: DIFlagArtificial | DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 5, file: !1, scope: !4, type: !15, declaration: !25, variables: !2)
126 !25 = !DISubprogram(name: "~foo", isLocal: false, isDefinition: false, flags: DIFlagArtificial | DIFlagPrototyped, isOptimized: false, scope: !4, type: !15)
127127 !26 = distinct !DISubprogram(name: "", linkageName: "_GLOBAL__sub_I_decl_derived_member.cpp", isLocal: true, isDefinition: true, flags: DIFlagArtificial, isOptimized: false, unit: !0, file: !1, scope: !11, type: !27, variables: !2)
128128 !27 = !DISubroutineType(types: !2)
129129 !28 = !{!29}
130 !29 = !DIGlobalVariable(name: "f", line: 8, isLocal: false, isDefinition: true, scope: null, file: !11, type: !"_ZTS3foo", variable: %struct.foo* @f)
130 !29 = !DIGlobalVariable(name: "f", line: 8, isLocal: false, isDefinition: true, scope: null, file: !11, type: !4, variable: %struct.foo* @f)
131131 !30 = !{i32 2, !"Dwarf Version", i32 4}
132132 !31 = !{i32 2, !"Debug Info Version", i32 3}
133133 !32 = !{!"clang version 3.7.0 (trunk 227104) (llvm/trunk 227103)"}
134134 !33 = !DILocation(line: 8, column: 5, scope: !10)
135135 !34 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !14, type: !35)
136 !35 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !"_ZTS3foo")
136 !35 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !4)
137137 !36 = !DIExpression()
138138 !37 = !DILocation(line: 0, scope: !14)
139139 !38 = !DILocation(line: 5, column: 8, scope: !14)
143143 !42 = distinct !DILexicalBlock(line: 5, column: 8, file: !1, scope: !24)
144144 !43 = !DILocation(line: 5, column: 8, scope: !24)
145145 !44 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !19, type: !45)
146 !45 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !"_ZTS4base")
146 !45 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !8)
147147 !46 = !DILocation(line: 0, scope: !19)
148148 !47 = !DILocation(line: 1, column: 8, scope: !19)
149149 !48 = !DILocation(line: 0, scope: !26)
3333 !5 = !{!6}
3434 !6 = !DICompositeType(tag: DW_TAG_structure_type, name: "Class", size: 64, align: 64, elements: !7, identifier: "_ZT5Class")
3535 !7 = !{!8, !10}
36 !8 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !"_ZT5Class", baseType: !9, size: 32, align: 32)
36 !8 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !6, baseType: !9, size: 32, align: 32)
3737 !9 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
38 !10 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !"_ZT5Class", baseType: !9, size: 32, align: 32)
38 !10 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !6, baseType: !9, size: 32, align: 32)
3939 !12 = distinct !DISubprogram(name: "foo", scope: null, file: !3, type: !13, isLocal: false, isDefinition: true, isOptimized: false, unit: !2)
4040 !13 = !DISubroutineType(types: !14)
4141 !14 = !{null}
42 !15 = !DILocalVariable(name: "v", scope: !12, type: !"_ZT5Class")
42 !15 = !DILocalVariable(name: "v", scope: !12, type: !6)
4343 !16 = !DIExpression(DW_OP_bit_piece, 32, 32)
4444 !17 = !DILocation(line: 2755, column: 9, scope: !12)
3838 !4 = !DICompositeType(tag: DW_TAG_class_type, name: "A", file: !1, flags: DIFlagExternalTypeRef, identifier: "_ZTS1A")
3939 !5 = !{!6}
4040 !6 = !DIGlobalVariable(name: "a", scope: !0, file: !1, line: 2, type: !7, isLocal: false, isDefinition: true, variable: %class.A** @a)
41 !7 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !"_ZTS1A", size: 64, align: 64)
41 !7 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !4, size: 64, align: 64)
4242 !8 = !DICompositeType(tag: DW_TAG_class_type, name: "B", file: !1, flags: DIFlagExternalTypeRef, identifier: "_ZTS1B")
4343 !9 = !DICompositeType(tag: DW_TAG_class_type, name: "A", file: !1, flags: DIFlagExternalTypeRef, identifier: "_ZTSN1N1BE")
4444 !10 = !DINamespace(name: "N", scope: null, file: !1, line: 1)
4545 !11 = !{!12}
46 !12 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !0, entity: !"_ZTSN1N1BE", line: 4)
46 !12 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !0, entity: !9, line: 4)
4747 !13 = !{i32 2, !"Dwarf Version", i32 2}
4848 !14 = !{i32 2, !"Debug Info Version", i32 3}
4949 !15 = !{i32 1, !"PIC Level", i32 2}
9797 !3 = !{!4}
9898 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "foo", line: 1, size: 8, align: 8, file: !1, elements: !5, identifier: "_ZTS3foo")
9999 !5 = !{!6}
100 !6 = !DISubprogram(name: "f3", linkageName: "_ZN3foo2f3Ez", line: 4, isLocal: false, isDefinition: false, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 4, file: !1, scope: !"_ZTS3foo", type: !7)
100 !6 = !DISubprogram(name: "f3", linkageName: "_ZN3foo2f3Ez", line: 4, isLocal: false, isDefinition: false, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 4, file: !1, scope: !4, type: !7)
101101 !7 = !DISubroutineType(types: !8)
102102 !8 = !{null, null}
103 !10 = distinct !DISubprogram(name: "f3", linkageName: "_ZN3foo2f3Ez", line: 15, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 15, file: !1, scope: !"_ZTS3foo", type: !7, declaration: !6, variables: !2)
104 !11 = distinct !DISubprogram(name: "f2", linkageName: "_ZN3foo2f2IiEEvv", line: 10, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 10, file: !1, scope: !"_ZTS3foo", type: !12, templateParams: !14, declaration: !17, variables: !2)
103 !10 = distinct !DISubprogram(name: "f3", linkageName: "_ZN3foo2f3Ez", line: 15, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 15, file: !1, scope: !4, type: !7, declaration: !6, variables: !2)
104 !11 = distinct !DISubprogram(name: "f2", linkageName: "_ZN3foo2f2IiEEvv", line: 10, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 10, file: !1, scope: !4, type: !12, templateParams: !14, declaration: !17, variables: !2)
105105 !12 = !DISubroutineType(types: !13)
106106 !13 = !{null}
107107 !14 = !{!15}
108108 !15 = !DITemplateTypeParameter(name: "T", type: !16)
109109 !16 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
110 !17 = !DISubprogram(name: "f2", linkageName: "_ZN3foo2f2IiEEvv", line: 10, isLocal: false, isDefinition: false, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 10, file: !1, scope: !"_ZTS3foo", type: !12, templateParams: !14)
110 !17 = !DISubprogram(name: "f2", linkageName: "_ZN3foo2f2IiEEvv", line: 10, isLocal: false, isDefinition: false, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 10, file: !1, scope: !4, type: !12, templateParams: !14)
111111 !18 = !{!19}
112 !19 = !DIImportedEntity(tag: DW_TAG_imported_declaration, line: 19, scope: !20, entity: !"_ZTS3foo")
112 !19 = !DIImportedEntity(tag: DW_TAG_imported_declaration, line: 19, scope: !20, entity: !4)
113113 !20 = distinct !DILexicalBlock(line: 16, column: 13, file: !1, scope: !21)
114114 !21 = distinct !DILexicalBlock(line: 16, column: 7, file: !1, scope: !10)
115115 !22 = !{i32 2, !"Dwarf Version", i32 4}
229229 !8 = !DINamespace(name: "capybara", line: 11, file: !1, scope: !9)
230230 !9 = !DINamespace(name: "echidna", line: 10, file: !1, scope: null)
231231 !10 = !{!11, !13}
232 !11 = !DIDerivedType(tag: DW_TAG_member, name: "a", line: 14, size: 32, align: 32, flags: DIFlagPrivate, file: !1, scope: !"_ZTSN7echidna8capybara8mongoose6fluffyE", baseType: !12)
232 !11 = !DIDerivedType(tag: DW_TAG_member, name: "a", line: 14, size: 32, align: 32, flags: DIFlagPrivate, file: !1, scope: !6, baseType: !12)
233233 !12 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
234 !13 = !DIDerivedType(tag: DW_TAG_member, name: "b", line: 15, size: 32, align: 32, offset: 32, flags: DIFlagPrivate, file: !1, scope: !"_ZTSN7echidna8capybara8mongoose6fluffyE", baseType: !12)
234 !13 = !DIDerivedType(tag: DW_TAG_member, name: "b", line: 15, size: 32, align: 32, offset: 32, flags: DIFlagPrivate, file: !1, scope: !6, baseType: !12)
235235 !14 = !DICompositeType(tag: DW_TAG_structure_type, name: "wombat", line: 31, size: 64, align: 32, file: !1, elements: !15, identifier: "_ZTS6wombat")
236236 !15 = !{!16}
237 !16 = !DIDerivedType(tag: DW_TAG_member, name: "a_b", line: 35, size: 64, align: 32, file: !1, scope: !"_ZTS6wombat", baseType: !"_ZTSN6wombatUt_E")
238 !17 = !DICompositeType(tag: DW_TAG_structure_type, line: 32, size: 64, align: 32, file: !1, scope: !"_ZTS6wombat", elements: !18, identifier: "_ZTSN6wombatUt_E")
237 !16 = !DIDerivedType(tag: DW_TAG_member, name: "a_b", line: 35, size: 64, align: 32, file: !1, scope: !14, baseType: !17)
238 !17 = !DICompositeType(tag: DW_TAG_structure_type, line: 32, size: 64, align: 32, file: !1, scope: !14, elements: !18, identifier: "_ZTSN6wombatUt_E")
239239 !18 = !{!19, !20}
240 !19 = !DIDerivedType(tag: DW_TAG_member, name: "a", line: 33, size: 32, align: 32, file: !1, scope: !"_ZTSN6wombatUt_E", baseType: !12)
241 !20 = !DIDerivedType(tag: DW_TAG_member, name: "b", line: 34, size: 32, align: 32, offset: 32, file: !1, scope: !"_ZTSN6wombatUt_E", baseType: !12)
240 !19 = !DIDerivedType(tag: DW_TAG_member, name: "a", line: 33, size: 32, align: 32, file: !1, scope: !17, baseType: !12)
241 !20 = !DIDerivedType(tag: DW_TAG_member, name: "b", line: 34, size: 32, align: 32, offset: 32, file: !1, scope: !17, baseType: !12)
242242 !22 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 5, file: !1, scope: !23, type: !24, variables: !2)
243243 !23 = !DIFile(filename: "bar.cpp", directory: "/tmp/dbginfo")
244244 !24 = !DISubroutineType(types: !25)
305305 !3 = !{!4, !15}
306306 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "C", file: !1, line: 1, size: 8, align: 8, elements: !5, identifier: "_ZTS1C")
307307 !5 = !{!6, !8, !12}
308 !6 = !DIDerivedType(tag: DW_TAG_member, name: "static_member_variable", scope: !"_ZTS1C", file: !1, line: 4, baseType: !7, flags: DIFlagStaticMember)
308 !6 = !DIDerivedType(tag: DW_TAG_member, name: "static_member_variable", scope: !4, file: !1, line: 4, baseType: !7, flags: DIFlagStaticMember)
309309 !7 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
310 !8 = !DISubprogram(name: "member_function", linkageName: "_ZN1C15member_functionEv", scope: !"_ZTS1C", file: !1, line: 2, type: !9, isLocal: false, isDefinition: false, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: false)
310 !8 = !DISubprogram(name: "member_function", linkageName: "_ZN1C15member_functionEv", scope: !4, file: !1, line: 2, type: !9, isLocal: false, isDefinition: false, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: false)
311311 !9 = !DISubroutineType(types: !10)
312312 !10 = !{null, !11}
313 !11 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !"_ZTS1C", size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
314 !12 = !DISubprogram(name: "static_member_function", linkageName: "_ZN1C22static_member_functionEv", scope: !"_ZTS1C", file: !1, line: 3, type: !13, isLocal: false, isDefinition: false, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: false)
313 !11 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !4, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
314 !12 = !DISubprogram(name: "static_member_function", linkageName: "_ZN1C22static_member_functionEv", scope: !4, file: !1, line: 3, type: !13, isLocal: false, isDefinition: false, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: false)
315315 !13 = !DISubroutineType(types: !14)
316316 !14 = !{!7}
317317 !15 = !DICompositeType(tag: DW_TAG_structure_type, name: "D", scope: !16, file: !1, line: 29, size: 32, align: 32, elements: !17, identifier: "_ZTSN2ns1DE")
318318 !16 = !DINamespace(name: "ns", scope: null, file: !1, line: 23)
319319 !17 = !{!18}
320 !18 = !DIDerivedType(tag: DW_TAG_member, name: "A", scope: !"_ZTSN2ns1DE", file: !1, line: 30, baseType: !7, size: 32, align: 32)
321 !20 = distinct !DISubprogram(name: "member_function", linkageName: "_ZN1C15member_functionEv", scope: !"_ZTS1C", file: !1, line: 9, type: !9, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: false, unit: !0, declaration: !8, variables: !2)
322 !21 = distinct !DISubprogram(name: "static_member_function", linkageName: "_ZN1C22static_member_functionEv", scope: !"_ZTS1C", file: !1, line: 13, type: !13, isLocal: false, isDefinition: true, scopeLine: 13, flags: DIFlagPrototyped, isOptimized: false, unit: !0, declaration: !12, variables: !2)
320 !18 = !DIDerivedType(tag: DW_TAG_member, name: "A", scope: !15, file: !1, line: 30, baseType: !7, size: 32, align: 32)
321 !20 = distinct !DISubprogram(name: "member_function", linkageName: "_ZN1C15member_functionEv", scope: !4, file: !1, line: 9, type: !9, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: false, unit: !0, declaration: !8, variables: !2)
322 !21 = distinct !DISubprogram(name: "static_member_function", linkageName: "_ZN1C22static_member_functionEv", scope: !4, file: !1, line: 13, type: !13, isLocal: false, isDefinition: true, scopeLine: 13, flags: DIFlagPrototyped, isOptimized: false, unit: !0, declaration: !12, variables: !2)
323323 !22 = distinct !DISubprogram(name: "global_function", linkageName: "_Z15global_functionv", scope: !1, file: !1, line: 19, type: !13, isLocal: false, isDefinition: true, scopeLine: 19, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
324324 !23 = distinct !DISubprogram(name: "global_namespace_function", linkageName: "_ZN2ns25global_namespace_functionEv", scope: !16, file: !1, line: 24, type: !24, isLocal: false, isDefinition: true, scopeLine: 24, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
325325 !24 = !DISubroutineType(types: !25)
331331 !30 = distinct !DISubprogram(name: "f7", linkageName: "_Z2f7v", scope: !1, file: !1, line: 57, type: !13, isLocal: false, isDefinition: true, scopeLine: 57, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
332332 !31 = !{!32, !33, !34, !35, !36, !37, !39, !41}
333333 !32 = !DIGlobalVariable(name: "static_member_variable", linkageName: "_ZN1C22static_member_variableE", scope: !0, file: !1, line: 7, type: !7, isLocal: false, isDefinition: true, variable: i32* @_ZN1C22static_member_variableE, declaration: !6)
334 !33 = !DIGlobalVariable(name: "global_variable", scope: !0, file: !1, line: 17, type: !"_ZTS1C", isLocal: false, isDefinition: true, variable: %struct.C* @global_variable)
334 !33 = !DIGlobalVariable(name: "global_variable", scope: !0, file: !1, line: 17, type: !4, isLocal: false, isDefinition: true, variable: %struct.C* @global_variable)
335335 !34 = !DIGlobalVariable(name: "global_namespace_variable", linkageName: "_ZN2ns25global_namespace_variableE", scope: !16, file: !1, line: 27, type: !7, isLocal: false, isDefinition: true, variable: i32* @_ZN2ns25global_namespace_variableE)
336 !35 = !DIGlobalVariable(name: "d", linkageName: "_ZN2ns1dE", scope: !16, file: !1, line: 31, type: !"_ZTSN2ns1DE", isLocal: false, isDefinition: true, variable: %"struct.ns::D"* @_ZN2ns1dE)
336 !35 = !DIGlobalVariable(name: "d", linkageName: "_ZN2ns1dE", scope: !16, file: !1, line: 31, type: !15, isLocal: false, isDefinition: true, variable: %"struct.ns::D"* @_ZN2ns1dE)
337337 !36 = !DIGlobalVariable(name: "z", scope: !26, file: !1, line: 41, type: !7, isLocal: true, isDefinition: true, variable: i32* @_ZZ2f3vE1z)
338338 !37 = !DIGlobalVariable(name: "i", linkageName: "_ZN12_GLOBAL__N_11iE", scope: !38, file: !1, line: 37, type: !7, isLocal: true, isDefinition: true, variable: i32* @_ZN12_GLOBAL__N_11iE)
339339 !38 = !DINamespace(scope: null, file: !1, line: 36)
350350 !49 = !{i32 2, !"Debug Info Version", i32 3}
351351 !50 = !{!"clang version 3.7.0 (trunk 234897) (llvm/trunk 234911)"}
352352 !51 = !DILocalVariable(name: "this", arg: 1, scope: !20, type: !52, flags: DIFlagArtificial | DIFlagObjectPointer)
353 !52 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !"_ZTS1C", size: 64, align: 64)
353 !52 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !4, size: 64, align: 64)
354354 !53 = !DIExpression()
355355 !54 = !DILocation(line: 0, scope: !20)
356356 !55 = !DILocation(line: 10, scope: !20)
7070 !3 = !{!4}
7171 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "foo", line: 1, size: 8, align: 8, file: !1, elements: !5, identifier: "_ZTS3foo")
7272 !5 = !{!6}
73 !6 = !DISubprogram(name: "func", linkageName: "_ZN3foo4funcEi", line: 2, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 2, file: !1, scope: !"_ZTS3foo", type: !7)
73 !6 = !DISubprogram(name: "func", linkageName: "_ZN3foo4funcEi", line: 2, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 2, file: !1, scope: !4, type: !7)
7474 !7 = !DISubroutineType(types: !8)
7575 !8 = !{!9, !10, !9}
7676 !9 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
77 !10 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS3foo")
77 !10 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !4)
7878 !13 = distinct !DISubprogram(name: "main", line: 7, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 7, file: !1, scope: !14, type: !15, variables: !2)
7979 !14 = !DIFile(filename: "inline.cpp", directory: "/tmp/dbginfo")
8080 !15 = !DISubroutineType(types: !16)
8181 !16 = !{!9}
82 !17 = distinct !DISubprogram(name: "func", linkageName: "_ZN3foo4funcEi", line: 2, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 2, file: !1, scope: !"_ZTS3foo", type: !7, declaration: !6, variables: !2)
82 !17 = distinct !DISubprogram(name: "func", linkageName: "_ZN3foo4funcEi", line: 2, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 2, file: !1, scope: !4, type: !7, declaration: !6, variables: !2)
8383 !18 = !{!19}
8484 !19 = !DIGlobalVariable(name: "i", line: 5, isLocal: false, isDefinition: true, scope: null, file: !14, type: !9, variable: i32* @i)
8585 !20 = !{i32 2, !"Dwarf Version", i32 4}
8787 !22 = !{!"clang version 3.5.0 "}
8888 !23 = !DILocation(line: 8, scope: !13)
8989 !24 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !17, type: !25)
90 !25 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !"_ZTS3foo")
90 !25 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !4)
9191 !26 = !DILocation(line: 0, scope: !17, inlinedAt: !23)
9292 !27 = !DILocalVariable(name: "x", line: 2, arg: 2, scope: !17, file: !14, type: !9)
9393 !28 = !DILocation(line: 2, scope: !17, inlinedAt: !23)
2929 !3 = !{!4}
3030 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "A", line: 1, size: 8, align: 8, file: !1, elements: !5, identifier: "_ZTS1A")
3131 !5 = !{!6}
32 !6 = !DISubprogram(name: "foo", linkageName: "_ZN1A3fooEv", line: 2, isLocal: false, isDefinition: false, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 2, file: !1, scope: !"_ZTS1A", type: !7)
32 !6 = !DISubprogram(name: "foo", linkageName: "_ZN1A3fooEv", line: 2, isLocal: false, isDefinition: false, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 2, file: !1, scope: !4, type: !7)
3333 !7 = !DISubroutineType(types: !8)
3434 !8 = !{null, !9}
35 !9 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS1A")
35 !9 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !4)
3636 !10 = !{!11}
3737 !11 = !DIGlobalVariable(name: "p", line: 5, isLocal: false, isDefinition: true, scope: null, file: !12, type: !13, variable: { i64, i64 }* @p)
3838 !12 = !DIFile(filename: "memberfnptr.cpp", directory: "")
39 !13 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, size: 64, baseType: !7, extraData: !"_ZTS1A")
39 !13 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, size: 64, baseType: !7, extraData: !4)
4040 !14 = !{i32 2, !"Dwarf Version", i32 2}
4141 !15 = !{i32 2, !"Debug Info Version", i32 3}
4242 !16 = !{i32 1, !"PIC Level", i32 2}
103103 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "string", line: 7, size: 32, align: 32, file: !5, elements: !6, identifier: "_ZTS6string")
104104 !5 = !DIFile(filename: "repro.cpp", directory: "/tmp/dbginfo")
105105 !6 = !{!7}
106 !7 = !DIDerivedType(tag: DW_TAG_member, name: "mem", line: 8, size: 32, align: 32, file: !5, scope: !"_ZTS6string", baseType: !8)
106 !7 = !DIDerivedType(tag: DW_TAG_member, name: "mem", line: 8, size: 32, align: 32, file: !5, scope: !4, baseType: !8)
107107 !8 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 32, align: 32, baseType: !9)
108108 !9 = !DIBasicType(tag: DW_TAG_base_type, name: "unsigned int", size: 32, align: 32, encoding: DW_ATE_unsigned)
109109 !11 = distinct !DISubprogram(name: "f", linkageName: "_Z1fv", line: 14, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 14, file: !5, scope: !12, type: !13, variables: !15)
111111 !13 = !DISubroutineType(types: !14)
112112 !14 = !{null}
113113 !15 = !{!16}
114 !16 = !DILocalVariable(name: "str2", line: 15, scope: !11, file: !12, type: !"_ZTS6string")
114 !16 = !DILocalVariable(name: "str2", line: 15, scope: !11, file: !12, type: !4)
115115 !17 = distinct !DISubprogram(name: "s2", linkageName: "_Z2s2P6string", line: 13, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 13, file: !5, scope: !12, type: !18, variables: !21)
116116 !18 = !DISubroutineType(types: !19)
117117 !19 = !{null, !20}
118 !20 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 32, align: 32, baseType: !"_ZTS6string")
118 !20 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 32, align: 32, baseType: !4)
119119 !21 = !{!22}
120120 !22 = !DILocalVariable(name: "lhs", line: 13, arg: 1, scope: !17, file: !12, type: !20)
121121 !23 = !{i32 2, !"Dwarf Version", i32 4}
128128 !30 = !DILocation(line: 17, scope: !11)
129129 !31 = !DILocation(line: 18, scope: !11)
130130 !32 = !{!33, !34, i64 0}
131 !33 = !{!"_ZTS6string", !34, i64 0}
131 !33 = !{!4, !34, i64 0}
132132 !34 = !{!"any pointer", !35, i64 0}
133133 !35 = !{!"omnipotent char", !36, i64 0}
134134 !36 = !{!"Simple C/C++ TBAA"}
141141 !3 = !{!4}
142142 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "A", line: 1, size: 128, align: 64, file: !1, elements: !5, identifier: "_ZTS1A")
143143 !5 = !{!6, !9}
144 !6 = !DIDerivedType(tag: DW_TAG_member, name: "m1", line: 2, size: 64, align: 64, file: !1, scope: !"_ZTS1A", baseType: !7)
144 !6 = !DIDerivedType(tag: DW_TAG_member, name: "m1", line: 2, size: 64, align: 64, file: !1, scope: !4, baseType: !7)
145145 !7 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !8)
146146 !8 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
147 !9 = !DIDerivedType(tag: DW_TAG_member, name: "m2", line: 3, size: 32, align: 32, offset: 64, file: !1, scope: !"_ZTS1A", baseType: !8)
147 !9 = !DIDerivedType(tag: DW_TAG_member, name: "m2", line: 3, size: 32, align: 32, offset: 64, file: !1, scope: !4, baseType: !8)
148148 !11 = distinct !DISubprogram(name: "f2", linkageName: "_Z2f21A", line: 7, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 7, file: !1, scope: !12, type: !13, variables: !15)
149149 !12 = !DIFile(filename: "test.cpp", directory: "")
150150 !13 = !DISubroutineType(types: !14)
151 !14 = !{null, !"_ZTS1A"}
151 !14 = !{null, !4}
152152 !15 = !{!16}
153 !16 = !DILocalVariable(name: "p5", line: 7, arg: 1, scope: !11, file: !12, type: !"_ZTS1A")
153 !16 = !DILocalVariable(name: "p5", line: 7, arg: 1, scope: !11, file: !12, type: !4)
154154 !17 = distinct !DISubprogram(name: "f", linkageName: "_Z1fv", line: 12, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 12, file: !1, scope: !12, type: !18, variables: !20)
155155 !18 = !DISubroutineType(types: !19)
156156 !19 = !{null}
162162 !25 = !DIBasicType(tag: DW_TAG_base_type, name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
163163 !26 = !DILocalVariable(name: "j", line: 19, scope: !24, file: !12, type: !25)
164164 !27 = !DILocalVariable(name: "I", line: 21, scope: !24, file: !12, type: !25)
165 !28 = !DILocalVariable(name: "g", line: 24, scope: !24, file: !12, type: !"_ZTS1A")
165 !28 = !DILocalVariable(name: "g", line: 24, scope: !24, file: !12, type: !4)
166166 !29 = !{i32 2, !"Dwarf Version", i32 2}
167167 !30 = !{i32 2, !"Debug Info Version", i32 3}
168168 !31 = !{i32 1, !"PIC Level", i32 2}
194194 !57 = !DILocation(line: 23, column: 15, scope: !24)
195195 !58 = !DILocation(line: 23, column: 7, scope: !24)
196196 !59 = !DILocation(line: 24, column: 9, scope: !24)
197 !60 = !DILocalVariable(name: "p5", line: 7, arg: 1, scope: !11, file: !12, type: !"_ZTS1A")
197 !60 = !DILocalVariable(name: "p5", line: 7, arg: 1, scope: !11, file: !12, type: !4)
198198 !61 = distinct !DILocation(line: 26, column: 7, scope: !24)
199199 !62 = !DILocation(line: 7, column: 42, scope: !11, inlinedAt: !61)
200200 !63 = !DILocation(line: 7, column: 48, scope: !11, inlinedAt: !61)
101101 !16 = !{null, !17, !17, !19}
102102 !17 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !18)
103103 !18 = !DIBasicType(tag: DW_TAG_base_type, name: "long long unsigned int", size: 64, align: 64, encoding: DW_ATE_unsigned)
104 !19 = !DIDerivedType(tag: DW_TAG_typedef, name: "string", line: 65, file: !20, scope: !10, baseType: !"_ZTSSs")
104 !19 = !DIDerivedType(tag: DW_TAG_typedef, name: "string", line: 65, file: !20, scope: !10, baseType: !8)
105105 !20 = !DIFile(filename: "/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/stringfwd.h", directory: "/llvm_cmake_gcc")
106106 !21 = !{!22, !26, !29, !33, !38, !41}
107107 !22 = !DIImportedEntity(tag: DW_TAG_imported_module, line: 57, scope: !23, entity: !25)
110110 !25 = !DINamespace(name: "__debug", line: 49, file: !24, scope: !10)
111111 !26 = !DIImportedEntity(tag: DW_TAG_imported_declaration, line: 66, scope: !10, entity: !27)
112112 !27 = !DIDerivedType(tag: DW_TAG_typedef, name: "mbstate_t", line: 106, file: !5, baseType: !28)
113 !28 = !DIDerivedType(tag: DW_TAG_typedef, name: "__mbstate_t", line: 95, file: !5, baseType: !"_ZTS11__mbstate_t")
113 !28 = !DIDerivedType(tag: DW_TAG_typedef, name: "__mbstate_t", line: 95, file: !5, baseType: !4)
114114 !29 = !DIImportedEntity(tag: DW_TAG_imported_declaration, line: 141, scope: !10, entity: !30)
115115 !30 = !DIDerivedType(tag: DW_TAG_typedef, name: "wint_t", line: 141, file: !31, baseType: !32)
116116 !31 = !DIFile(filename: "/llvm_cmake_gcc/bin/../lib/clang/3.5.0/include/stddef.h", directory: "/llvm_cmake_gcc")
123123 !38 = !DIImportedEntity(tag: DW_TAG_imported_declaration, line: 43, scope: !34, entity: !39)
124124 !39 = !DIDerivedType(tag: DW_TAG_typedef, name: "ptrdiff_t", line: 156, file: !11, scope: !10, baseType: !40)
125125 !40 = !DIBasicType(tag: DW_TAG_base_type, name: "long int", size: 64, align: 64, encoding: DW_ATE_signed)
126 !41 = !DIImportedEntity(tag: DW_TAG_imported_declaration, line: 55, scope: !10, entity: !"_ZTS5lconv")
126 !41 = !DIImportedEntity(tag: DW_TAG_imported_declaration, line: 55, scope: !10, entity: !6)
127127 !42 = !{i32 2, !"Dwarf Version", i32 4}
128128 !43 = !{i32 2, !"Debug Info Version", i32 3}
129129 !44 = !{!"clang version 3.5.0 (209308)"}
6262 !3 = !{!4}
6363 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "S", file: !1, line: 4, size: 3200, align: 32, elements: !5, identifier: "_ZTS1S")
6464 !5 = !{!6}
65 !6 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !"_ZTS1S", file: !1, line: 5, baseType: !7, size: 3200, align: 32)
65 !6 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !4, file: !1, line: 5, baseType: !7, size: 3200, align: 32)
6666 !7 = !DICompositeType(tag: DW_TAG_array_type, baseType: !8, size: 3200, align: 32, elements: !9)
6767 !8 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
6868 !9 = !{!10}
6969 !10 = !DISubrange(count: 100)
7070 !12 = distinct !DISubprogram(name: "f", linkageName: "_Z1f1Sm", scope: !1, file: !1, line: 8, type: !13, isLocal: false, isDefinition: true, scopeLine: 8, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !16)
7171 !13 = !DISubroutineType(types: !14)
72 !14 = !{!8, !"_ZTS1S", !15}
72 !14 = !{!8, !4, !15}
7373 !15 = !DIBasicType(name: "long unsigned int", size: 64, align: 64, encoding: DW_ATE_unsigned)
7474 !16 = !{!17, !18}
75 !17 = !DILocalVariable(name: "zzz", arg: 1, scope: !12, file: !1, line: 8, type: !"_ZTS1S")
75 !17 = !DILocalVariable(name: "zzz", arg: 1, scope: !12, file: !1, line: 8, type: !4)
7676 !18 = !DILocalVariable(name: "len", arg: 2, scope: !12, file: !1, line: 8, type: !15)
7777 !19 = !{i32 2, !"Dwarf Version", i32 4}
7878 !20 = !{i32 2, !"Debug Info Version", i32 3}
266266 !1 = !DIFile(filename: "sret.cpp", directory: "/usr/local/google/home/echristo/tmp")
267267 !2 = !{}
268268 !3 = !{!4, !37}
269 !4 = !DICompositeType(tag: DW_TAG_class_type, name: "A", line: 1, size: 128, align: 64, file: !1, elements: !5, vtableHolder: !"_ZTS1A", identifier: "_ZTS1A")
269 !4 = !DICompositeType(tag: DW_TAG_class_type, name: "A", line: 1, size: 128, align: 64, file: !1, elements: !5, vtableHolder: !4, identifier: "_ZTS1A")
270270 !5 = !{!6, !13, !14, !19, !25, !29, !33}
271271 !6 = !DIDerivedType(tag: DW_TAG_member, name: "_vptr$A", size: 64, flags: DIFlagArtificial, file: !1, scope: !7, baseType: !8)
272272 !7 = !DIFile(filename: "sret.cpp", directory: "/usr/local/google/home/echristo/tmp")
275275 !10 = !DISubroutineType(types: !11)
276276 !11 = !{!12}
277277 !12 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
278 !13 = !DIDerivedType(tag: DW_TAG_member, name: "m_int", line: 13, size: 32, align: 32, offset: 64, flags: DIFlagProtected, file: !1, scope: !"_ZTS1A", baseType: !12)
279 !14 = !DISubprogram(name: "A", line: 4, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 4, file: !1, scope: !"_ZTS1A", type: !15)
278 !13 = !DIDerivedType(tag: DW_TAG_member, name: "m_int", line: 13, size: 32, align: 32, offset: 64, flags: DIFlagProtected, file: !1, scope: !4, baseType: !12)
279 !14 = !DISubprogram(name: "A", line: 4, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 4, file: !1, scope: !4, type: !15)
280280 !15 = !DISubroutineType(types: !16)
281281 !16 = !{null, !17, !12}
282 !17 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS1A")
283 !19 = !DISubprogram(name: "A", line: 5, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 5, file: !1, scope: !"_ZTS1A", type: !20)
282 !17 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !4)
283 !19 = !DISubprogram(name: "A", line: 5, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 5, file: !1, scope: !4, type: !20)
284284 !20 = !DISubroutineType(types: !21)
285285 !21 = !{null, !17, !22}
286286 !22 = !DIDerivedType(tag: DW_TAG_reference_type, size: 64, align: 64, baseType: !23)
287 !23 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !"_ZTS1A")
288 !25 = !DISubprogram(name: "operator=", linkageName: "_ZN1AaSERKS_", line: 7, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 7, file: !1, scope: !"_ZTS1A", type: !26)
287 !23 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !4)
288 !25 = !DISubprogram(name: "operator=", linkageName: "_ZN1AaSERKS_", line: 7, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 7, file: !1, scope: !4, type: !26)
289289 !26 = !DISubroutineType(types: !27)
290290 !27 = !{!22, !17, !22}
291 !29 = !DISubprogram(name: "~A", line: 8, isLocal: false, isDefinition: false, virtuality: DW_VIRTUALITY_virtual, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 8, file: !1, scope: !"_ZTS1A", type: !30, containingType: !"_ZTS1A")
291 !29 = !DISubprogram(name: "~A", line: 8, isLocal: false, isDefinition: false, virtuality: DW_VIRTUALITY_virtual, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 8, file: !1, scope: !4, type: !30, containingType: !4)
292292 !30 = !DISubroutineType(types: !31)
293293 !31 = !{null, !17}
294 !33 = !DISubprogram(name: "get_int", linkageName: "_ZN1A7get_intEv", line: 10, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 10, file: !1, scope: !"_ZTS1A", type: !34)
294 !33 = !DISubprogram(name: "get_int", linkageName: "_ZN1A7get_intEv", line: 10, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 10, file: !1, scope: !4, type: !34)
295295 !34 = !DISubroutineType(types: !35)
296296 !35 = !{!12, !17}
297297 !37 = !DICompositeType(tag: DW_TAG_class_type, name: "B", line: 38, size: 8, align: 8, file: !1, elements: !38, identifier: "_ZTS1B")
298298 !38 = !{!39, !44}
299 !39 = !DISubprogram(name: "B", line: 41, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 41, file: !1, scope: !"_ZTS1B", type: !40)
299 !39 = !DISubprogram(name: "B", line: 41, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 41, file: !1, scope: !37, type: !40)
300300 !40 = !DISubroutineType(types: !41)
301301 !41 = !{null, !42}
302 !42 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS1B")
303 !44 = !DISubprogram(name: "AInstance", linkageName: "_ZN1B9AInstanceEv", line: 43, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 43, file: !1, scope: !"_ZTS1B", type: !45)
302 !42 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !37)
303 !44 = !DISubprogram(name: "AInstance", linkageName: "_ZN1B9AInstanceEv", line: 43, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 43, file: !1, scope: !37, type: !45)
304304 !45 = !DISubroutineType(types: !46)
305305 !46 = !{!4, !42}
306 !49 = distinct !DISubprogram(name: "A", linkageName: "_ZN1AC2Ei", line: 16, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 18, file: !1, scope: !"_ZTS1A", type: !15, declaration: !14, variables: !2)
307 !50 = distinct !DISubprogram(name: "A", linkageName: "_ZN1AC2ERKS_", line: 21, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 23, file: !1, scope: !"_ZTS1A", type: !20, declaration: !19, variables: !2)
308 !51 = distinct !DISubprogram(name: "operator=", linkageName: "_ZN1AaSERKS_", line: 27, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 28, file: !1, scope: !"_ZTS1A", type: !26, declaration: !25, variables: !2)
309 !52 = distinct !DISubprogram(name: "get_int", linkageName: "_ZN1A7get_intEv", line: 33, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 34, file: !1, scope: !"_ZTS1A", type: !34, declaration: !33, variables: !2)
310 !53 = distinct !DISubprogram(name: "AInstance", linkageName: "_ZN1B9AInstanceEv", line: 47, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 48, file: !1, scope: !"_ZTS1B", type: !45, declaration: !44, variables: !2)
306 !49 = distinct !DISubprogram(name: "A", linkageName: "_ZN1AC2Ei", line: 16, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 18, file: !1, scope: !4, type: !15, declaration: !14, variables: !2)
307 !50 = distinct !DISubprogram(name: "A", linkageName: "_ZN1AC2ERKS_", line: 21, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 23, file: !1, scope: !4, type: !20, declaration: !19, variables: !2)
308 !51 = distinct !DISubprogram(name: "operator=", linkageName: "_ZN1AaSERKS_", line: 27, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 28, file: !1, scope: !4, type: !26, declaration: !25, variables: !2)
309 !52 = distinct !DISubprogram(name: "get_int", linkageName: "_ZN1A7get_intEv", line: 33, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 34, file: !1, scope: !4, type: !34, declaration: !33, variables: !2)
310 !53 = distinct !DISubprogram(name: "AInstance", linkageName: "_ZN1B9AInstanceEv", line: 47, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 48, file: !1, scope: !37, type: !45, declaration: !44, variables: !2)
311311 !54 = distinct !DISubprogram(name: "main", line: 53, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 54, file: !1, scope: !7, type: !55, variables: !2)
312312 !55 = !DISubroutineType(types: !56)
313313 !56 = !{!12, !12, !57}
315315 !58 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !59)
316316 !59 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !60)
317317 !60 = !DIBasicType(tag: DW_TAG_base_type, name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
318 !61 = distinct !DISubprogram(name: "~A", linkageName: "_ZN1AD0Ev", line: 8, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 8, file: !1, scope: !"_ZTS1A", type: !30, declaration: !29, variables: !2)
319 !62 = distinct !DISubprogram(name: "B", linkageName: "_ZN1BC2Ev", line: 41, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 41, file: !1, scope: !"_ZTS1B", type: !40, declaration: !39, variables: !2)
320 !63 = distinct !DISubprogram(name: "~A", linkageName: "_ZN1AD2Ev", line: 8, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 8, file: !1, scope: !"_ZTS1A", type: !30, declaration: !29, variables: !2)
318 !61 = distinct !DISubprogram(name: "~A", linkageName: "_ZN1AD0Ev", line: 8, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 8, file: !1, scope: !4, type: !30, declaration: !29, variables: !2)
319 !62 = distinct !DISubprogram(name: "B", linkageName: "_ZN1BC2Ev", line: 41, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 41, file: !1, scope: !37, type: !40, declaration: !39, variables: !2)
320 !63 = distinct !DISubprogram(name: "~A", linkageName: "_ZN1AD2Ev", line: 8, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 8, file: !1, scope: !4, type: !30, declaration: !29, variables: !2)
321321 !64 = !{i32 2, !"Dwarf Version", i32 4}
322322 !65 = !{i32 1, !"Debug Info Version", i32 3}
323323 !66 = !{!"clang version 3.5.0 (trunk 203283) (llvm/trunk 203307)"}
324324 !67 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !49, type: !68)
325 !68 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !"_ZTS1A")
325 !68 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !4)
326326 !69 = !DILocation(line: 0, scope: !49)
327327 !70 = !DILocalVariable(name: "i", line: 16, arg: 2, scope: !49, file: !7, type: !12)
328328 !71 = !DILocation(line: 16, scope: !49)
344344 !87 = !DILocation(line: 0, scope: !52)
345345 !88 = !DILocation(line: 35, scope: !52)
346346 !89 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !53, type: !90)
347 !90 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !"_ZTS1B")
347 !90 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !37)
348348 !91 = !DILocation(line: 0, scope: !53)
349349 !92 = !DILocation(line: 49, scope: !53)
350350 !93 = !DILocalVariable(name: "a", line: 49, scope: !53, file: !7, type: !4)
115115 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "p", line: 3, size: 128, align: 64, file: !5, elements: !6, identifier: "_ZTS1p")
116116 !5 = !DIFile(filename: "pr22393.cc", directory: "")
117117 !6 = !{!7, !9}
118 !7 = !DIDerivedType(tag: DW_TAG_member, name: "s", line: 4, size: 64, align: 64, file: !5, scope: !"_ZTS1p", baseType: !8)
118 !7 = !DIDerivedType(tag: DW_TAG_member, name: "s", line: 4, size: 64, align: 64, file: !5, scope: !4, baseType: !8)
119119 !8 = !DIBasicType(tag: DW_TAG_base_type, name: "long unsigned int", size: 64, align: 64, encoding: DW_ATE_unsigned)
120 !9 = !DIDerivedType(tag: DW_TAG_member, name: "t", line: 5, size: 64, align: 64, offset: 64, file: !5, scope: !"_ZTS1p", baseType: !8)
120 !9 = !DIDerivedType(tag: DW_TAG_member, name: "t", line: 5, size: 64, align: 64, offset: 64, file: !5, scope: !4, baseType: !8)
121121 !10 = !DICompositeType(tag: DW_TAG_structure_type, name: "r", line: 8, size: 320, align: 64, file: !5, elements: !11, identifier: "_ZTS1r")
122122 !11 = !{!12, !14, !15}
123 !12 = !DIDerivedType(tag: DW_TAG_member, name: "i", line: 9, size: 32, align: 32, file: !5, scope: !"_ZTS1r", baseType: !13)
123 !12 = !DIDerivedType(tag: DW_TAG_member, name: "i", line: 9, size: 32, align: 32, file: !5, scope: !10, baseType: !13)
124124 !13 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
125 !14 = !DIDerivedType(tag: DW_TAG_member, name: "x", line: 10, size: 128, align: 64, offset: 64, file: !5, scope: !"_ZTS1r", baseType: !"_ZTS1p")
126 !15 = !DIDerivedType(tag: DW_TAG_member, name: "y", line: 11, size: 128, align: 64, offset: 192, file: !5, scope: !"_ZTS1r", baseType: !"_ZTS1p")
125 !14 = !DIDerivedType(tag: DW_TAG_member, name: "x", line: 10, size: 128, align: 64, offset: 64, file: !5, scope: !10, baseType: !4)
126 !15 = !DIDerivedType(tag: DW_TAG_member, name: "y", line: 11, size: 128, align: 64, offset: 192, file: !5, scope: !10, baseType: !4)
127127 !17 = distinct !DISubprogram(name: "test", linkageName: "_Z4testv", line: 18, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 18, file: !5, scope: !18, type: !19, variables: !2)
128128 !18 = !DIFile(filename: "pr22393.cc", directory: "")
129129 !19 = !DISubroutineType(types: !20)
135135 !25 = distinct !DILexicalBlock(line: 19, column: 0, file: !5, scope: !17)
136136 !26 = !DILocation(line: 19, scope: !17)
137137 !27 = !DILocation(line: 20, scope: !25)
138 !28 = !DILocalVariable(name: "y", line: 21, scope: !17, file: !18, type: !"_ZTS1p")
138 !28 = !DILocalVariable(name: "y", line: 21, scope: !17, file: !18, type: !4)
139139 !29 = !DIExpression()
140140 !30 = !DILocation(line: 21, scope: !17)
141 !31 = !DILocalVariable(name: "r", line: 22, scope: !17, file: !18, type: !"_ZTS1r")
141 !31 = !DILocalVariable(name: "r", line: 22, scope: !17, file: !18, type: !10)
142142 !32 = !DILocation(line: 22, scope: !17)
143143 !33 = !DILocation(line: 23, scope: !17)
144144 !34 = !DILocation(line: 24, scope: !17)
9696 !5 = !{!6}
9797 !6 = !DITemplateTypeParameter(type: !7)
9898 !7 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
99 !8 = !DICompositeType(tag: DW_TAG_structure_type, name: "nested", line: 2, size: 8, align: 8, file: !1, scope: !"_ZTS6y_implIiE", elements: !2, identifier: "_ZTSN6y_implIiE6nestedE")
99 !8 = !DICompositeType(tag: DW_TAG_structure_type, name: "nested", line: 2, size: 8, align: 8, file: !1, scope: !4, elements: !2, identifier: "_ZTSN6y_implIiE6nestedE")
100100 !10 = distinct !DISubprogram(name: "__cxx_global_var_init", line: 3, isLocal: true, isDefinition: true, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 3, file: !1, scope: !11, type: !12, variables: !2)
101101 !11 = !DIFile(filename: "template.cpp", directory: "/tmp/dbginfo")
102102 !12 = !DISubroutineType(types: !13)
119119 !29 = !DISubroutineType(types: !2)
120120 !30 = !{!31, !32}
121121 !31 = !DIGlobalVariable(name: "glbl", line: 3, isLocal: false, isDefinition: true, scope: null, file: !11, type: !7, variable: i32* @glbl)
122 !32 = !DIGlobalVariable(name: "n", line: 4, isLocal: false, isDefinition: true, scope: null, file: !11, type: !"_ZTSN6y_implIiE6nestedE", variable: %"struct.y_impl::nested"* @n)
122 !32 = !DIGlobalVariable(name: "n", line: 4, isLocal: false, isDefinition: true, scope: null, file: !11, type: !8, variable: %"struct.y_impl::nested"* @n)
123123 !33 = !{i32 2, !"Dwarf Version", i32 4}
124124 !34 = !{i32 2, !"Debug Info Version", i32 3}
125125 !35 = !{!"clang version 3.6.0 (trunk 224394) (llvm/trunk 224384)"}
122122 !8 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
123123 !9 = !DICompositeType(tag: DW_TAG_structure_type, name: "S2", line: 11, size: 8, align: 8, file: !1, elements: !10, identifier: "_ZTS2S2")
124124 !10 = !{!11}
125 !11 = !DIDerivedType(tag: DW_TAG_member, name: "s2_1", line: 12, size: 8, align: 8, file: !1, scope: !"_ZTS2S2", baseType: !"_ZTS4S2_1IXadL_Z1iEEE")
125 !11 = !DIDerivedType(tag: DW_TAG_member, name: "s2_1", line: 12, size: 8, align: 8, file: !1, scope: !9, baseType: !12)
126126 !12 = !DICompositeType(tag: DW_TAG_structure_type, name: "S2_1<&i>", line: 9, size: 8, align: 8, file: !1, elements: !2, templateParams: !5, identifier: "_ZTS4S2_1IXadL_Z1iEEE")
127127 !13 = !DICompositeType(tag: DW_TAG_structure_type, name: "S3", line: 22, size: 16, align: 8, file: !1, elements: !14, identifier: "_ZTS2S3")
128128 !14 = !{!15, !16}
129 !15 = !DIDerivedType(tag: DW_TAG_member, name: "s3_1", line: 23, size: 8, align: 8, file: !1, scope: !"_ZTS2S3", baseType: !"_ZTS4S3_1IXadL_Z1iEEE")
130 !16 = !DIDerivedType(tag: DW_TAG_member, name: "s3_2", line: 24, size: 8, align: 8, offset: 8, file: !1, scope: !"_ZTS2S3", baseType: !"_ZTS4S3_2")
129 !15 = !DIDerivedType(tag: DW_TAG_member, name: "s3_1", line: 23, size: 8, align: 8, file: !1, scope: !13, baseType: !17)
130 !16 = !DIDerivedType(tag: DW_TAG_member, name: "s3_2", line: 24, size: 8, align: 8, offset: 8, file: !1, scope: !13, baseType: !18)
131131 !17 = !DICompositeType(tag: DW_TAG_structure_type, name: "S3_1<&i>", line: 18, size: 8, align: 8, file: !1, elements: !2, templateParams: !5, identifier: "_ZTS4S3_1IXadL_Z1iEEE")
132132 !18 = !DICompositeType(tag: DW_TAG_structure_type, name: "S3_2", line: 20, size: 8, align: 8, file: !1, elements: !2, identifier: "_ZTS4S3_2")
133133 !19 = !DICompositeType(tag: DW_TAG_structure_type, name: "S4", line: 34, size: 16, align: 8, file: !1, elements: !20, identifier: "_ZTS2S4")
134134 !20 = !{!21, !22}
135 !21 = !DIDerivedType(tag: DW_TAG_member, name: "s4_1", line: 35, size: 8, align: 8, file: !1, scope: !"_ZTS2S4", baseType: !"_ZTS4S4_1")
136 !22 = !DIDerivedType(tag: DW_TAG_member, name: "s4_2", line: 36, size: 8, align: 8, offset: 8, file: !1, scope: !"_ZTS2S4", baseType: !"_ZTS4S4_2IXadL_Z1iEEE")
135 !21 = !DIDerivedType(tag: DW_TAG_member, name: "s4_1", line: 35, size: 8, align: 8, file: !1, scope: !19, baseType: !23)
136 !22 = !DIDerivedType(tag: DW_TAG_member, name: "s4_2", line: 36, size: 8, align: 8, offset: 8, file: !1, scope: !19, baseType: !24)
137137 !23 = !DICompositeType(tag: DW_TAG_structure_type, name: "S4_1", line: 29, size: 8, align: 8, file: !1, elements: !2, identifier: "_ZTS4S4_1")
138138 !24 = !DICompositeType(tag: DW_TAG_structure_type, name: "S4_2<&i>", line: 32, size: 8, align: 8, file: !1, elements: !2, templateParams: !25, identifier: "_ZTS4S4_2IXadL_Z1iEEE")
139139 !25 = !{!26}
141141 !27 = !{!28, !30, !31, !32, !33}
142142 !28 = !DIGlobalVariable(name: "i", line: 1, isLocal: false, isDefinition: true, scope: null, file: !29, type: !8, variable: i32* @i)
143143 !29 = !DIFile(filename: "tu.cpp", directory: "/tmp/dbginfo")
144 !30 = !DIGlobalVariable(name: "a", line: 6, isLocal: false, isDefinition: true, scope: null, file: !29, type: !"