llvm.org GIT mirror llvm / eb38a2a
[IR] Remove the DIExpression field from DIGlobalVariable. This patch implements PR31013 by introducing a DIGlobalVariableExpression that holds a pair of DIGlobalVariable and DIExpression. Currently, DIGlobalVariables holds a DIExpression. This is not the best way to model this: (1) The DIGlobalVariable should describe the source level variable, not how to get to its location. (2) It makes it unsafe/hard to update the expressions when we call replaceExpression on the DIGLobalVariable. (3) It makes it impossible to represent a global variable that is in more than one location (e.g., a variable with multiple DW_OP_LLVM_fragment-s). We also moved away from attaching the DIExpression to DILocalVariable for the same reasons. This reapplies r289902 with additional testcase upgrades. <rdar://problem/29250149> https://llvm.org/bugs/show_bug.cgi?id=31013 Differential Revision: https://reviews.llvm.org/D26769 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@289920 91177308-0d34-0410-b5e6-96231b3b80d8 Adrian Prantl 2 years ago
191 changed file(s) with 1022 addition(s) and 659 deletion(s). Raw diff Collapse all Expand all
251251 METADATA_MACRO_FILE = 34, // [distinct, macinfo, line, file, ...]
252252 METADATA_STRINGS = 35, // [count, offset] blob([lengths][chars])
253253 METADATA_GLOBAL_DECL_ATTACHMENT = 36, // [valueid, n x [id, mdnode]]
254 METADATA_GLOBAL_VAR_EXPR = 37, // [distinct, var, expr]
254255 };
255256
256257 // The constants block (CONSTANTS_BLOCK_ID) describes emission for each
448448 /// implicitly uniques the values returned.
449449 DISubrange *getOrCreateSubrange(int64_t Lo, int64_t Count);
450450
451 /// Create a new descriptor for the specified
452 /// variable.
451 /// Create a new descriptor for the specified variable.
453452 /// \param Context Variable scope.
454453 /// \param Name Name of the variable.
455454 /// \param LinkageName Mangled name of the variable.
463462 /// \param Decl Reference to the corresponding declaration.
464463 /// \param AlignInBits Variable alignment(or 0 if no alignment attr was
465464 /// specified)
466 DIGlobalVariable *createGlobalVariable(DIScope *Context, StringRef Name,
467 StringRef LinkageName, DIFile *File,
468 unsigned LineNo, DIType *Ty,
469 bool isLocalToUnit,
470 DIExpression *Expr = nullptr,
471 MDNode *Decl = nullptr,
472 uint32_t AlignInBits = 0);
465 DIGlobalVariableExpression *createGlobalVariableExpression(
466 DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *File,
467 unsigned LineNo, DIType *Ty, bool isLocalToUnit,
468 DIExpression *Expr = nullptr, MDNode *Decl = nullptr,
469 uint32_t AlignInBits = 0);
473470
474471 /// Identical to createGlobalVariable
475472 /// except that the resulting DbgNode is temporary and meant to be RAUWed.
476473 DIGlobalVariable *createTempGlobalVariableFwdDecl(
477474 DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *File,
478 unsigned LineNo, DIType *Ty, bool isLocalToUnit, DIExpression *Expr,
479 MDNode *Decl = nullptr, uint32_t AlignInBits = 0);
475 unsigned LineNo, DIType *Ty, bool isLocalToUnit, MDNode *Decl = nullptr,
476 uint32_t AlignInBits = 0);
480477
481478 /// Create a new descriptor for an auto variable. This is a local variable
482479 /// that is not a subprogram parameter.
8888 void processSubprogram(DISubprogram *SP);
8989 void processScope(DIScope *Scope);
9090 bool addCompileUnit(DICompileUnit *CU);
91 bool addGlobalVariable(DIGlobalVariable *DIG);
91 bool addGlobalVariable(DIGlobalVariableExpression *DIG);
9292 bool addSubprogram(DISubprogram *SP);
9393 bool addType(DIType *DT);
9494 bool addScope(DIScope *Scope);
9797 typedef SmallVectorImpl::const_iterator
9898 compile_unit_iterator;
9999 typedef SmallVectorImpl::const_iterator subprogram_iterator;
100 typedef SmallVectorImpl::const_iterator
101 global_variable_iterator;
100 typedef SmallVectorImpl::const_iterator
101 global_variable_expression_iterator;
102102 typedef SmallVectorImpl::const_iterator type_iterator;
103103 typedef SmallVectorImpl::const_iterator scope_iterator;
104104
110110 return make_range(SPs.begin(), SPs.end());
111111 }
112112
113 iterator_rangeiterator> global_variables() const {
113 iterator_rangeexpression_iterator> global_variables() const {
114114 return make_range(GVs.begin(), GVs.end());
115115 }
116116
131131 private:
132132 SmallVector CUs;
133133 SmallVector SPs;
134 SmallVector *, 8> GVs;
134 SmallVectorExpression *, 8> GVs;
135135 SmallVector TYs;
136136 SmallVector Scopes;
137137 SmallPtrSet NodesSeen;
10371037 StringRef Producer, bool IsOptimized, StringRef Flags,
10381038 unsigned RuntimeVersion, StringRef SplitDebugFilename,
10391039 unsigned EmissionKind, DICompositeTypeArray EnumTypes,
1040 DIScopeArray RetainedTypes, DIGlobalVariableArray GlobalVariables,
1040 DIScopeArray RetainedTypes,
1041 DIGlobalVariableExpressionArray GlobalVariables,
10411042 DIImportedEntityArray ImportedEntities, DIMacroNodeArray Macros,
10421043 uint64_t DWOId, bool SplitDebugInlining, StorageType Storage,
10431044 bool ShouldCreate = true) {
10771078 bool IsOptimized, StringRef Flags, unsigned RuntimeVersion,
10781079 StringRef SplitDebugFilename, DebugEmissionKind EmissionKind,
10791080 DICompositeTypeArray EnumTypes, DIScopeArray RetainedTypes,
1080 DIGlobalVariableArray GlobalVariables,
1081 DIGlobalVariableExpressionArray GlobalVariables,
10811082 DIImportedEntityArray ImportedEntities, DIMacroNodeArray Macros,
10821083 uint64_t DWOId, bool SplitDebugInlining),
10831084 (SourceLanguage, File, Producer, IsOptimized, Flags, RuntimeVersion,
11121113 DIScopeArray getRetainedTypes() const {
11131114 return cast_or_null(getRawRetainedTypes());
11141115 }
1115 DIGlobalVariableArray getGlobalVariables() const {
1116 DIGlobalVariableExpressionArray getGlobalVariables() const {
11161117 return cast_or_null(getRawGlobalVariables());
11171118 }
11181119 DIImportedEntityArray getImportedEntities() const {
11511152 void replaceRetainedTypes(DITypeArray N) {
11521153 replaceOperandWith(5, N.get());
11531154 }
1154 void replaceGlobalVariables(DIGlobalVariableArray N) {
1155 void replaceGlobalVariables(DIGlobalVariableExpressionArray N) {
11551156 replaceOperandWith(6, N.get());
11561157 }
11571158 void replaceImportedEntities(DIImportedEntityArray N) {
19801981 /// Return the size of this fragment in bits.
19811982 uint64_t getFragmentSizeInBits() const;
19821983
1984 /// Determine whether this represents a standalone constant value.
1985 bool isConstant() const;
1986
19831987 typedef ArrayRef::iterator element_iterator;
19841988 element_iterator elements_begin() const { return getElements().begin(); }
19851989 element_iterator elements_end() const { return getElements().end(); }
20992103 IsLocalToUnit(IsLocalToUnit), IsDefinition(IsDefinition) {}
21002104 ~DIGlobalVariable() = default;
21012105
2102 static DIGlobalVariable *
2103 getImpl(LLVMContext &Context, DIScope *Scope, StringRef Name,
2104 StringRef LinkageName, DIFile *File, unsigned Line, DITypeRef Type,
2105 bool IsLocalToUnit, bool IsDefinition, DIExpression *Expr,
2106 DIDerivedType *StaticDataMemberDeclaration, uint32_t AlignInBits,
2107 StorageType Storage, bool ShouldCreate = true) {
2106 static DIGlobalVariable *getImpl(LLVMContext &Context, DIScope *Scope,
2107 StringRef Name, StringRef LinkageName,
2108 DIFile *File, unsigned Line, DITypeRef Type,
2109 bool IsLocalToUnit, bool IsDefinition,
2110 DIDerivedType *StaticDataMemberDeclaration,
2111 uint32_t AlignInBits, StorageType Storage,
2112 bool ShouldCreate = true) {
21082113 return getImpl(Context, Scope, getCanonicalMDString(Context, Name),
21092114 getCanonicalMDString(Context, LinkageName), File, Line, Type,
2110 IsLocalToUnit, IsDefinition, Expr,
2111 StaticDataMemberDeclaration, AlignInBits, Storage,
2112 ShouldCreate);
2115 IsLocalToUnit, IsDefinition, StaticDataMemberDeclaration,
2116 AlignInBits, Storage, ShouldCreate);
21132117 }
21142118 static DIGlobalVariable *
21152119 getImpl(LLVMContext &Context, Metadata *Scope, MDString *Name,
21162120 MDString *LinkageName, Metadata *File, unsigned Line, Metadata *Type,
2117 bool IsLocalToUnit, bool IsDefinition, Metadata *Expr,
2121 bool IsLocalToUnit, bool IsDefinition,
21182122 Metadata *StaticDataMemberDeclaration, uint32_t AlignInBits,
21192123 StorageType Storage, bool ShouldCreate = true);
21202124
21212125 TempDIGlobalVariable cloneImpl() const {
21222126 return getTemporary(getContext(), getScope(), getName(), getLinkageName(),
21232127 getFile(), getLine(), getType(), isLocalToUnit(),
2124 isDefinition(), getExpr(),
2125 getStaticDataMemberDeclaration(), getAlignInBits());
2128 isDefinition(), getStaticDataMemberDeclaration(),
2129 getAlignInBits());
21262130 }
21272131
21282132 public:
21302134 (DIScope * Scope, StringRef Name, StringRef LinkageName,
21312135 DIFile *File, unsigned Line, DITypeRef Type,
21322136 bool IsLocalToUnit, bool IsDefinition,
2133 DIExpression *Expr,
21342137 DIDerivedType *StaticDataMemberDeclaration,
21352138 uint32_t AlignInBits),
21362139 (Scope, Name, LinkageName, File, Line, Type, IsLocalToUnit,
2137 IsDefinition, Expr, StaticDataMemberDeclaration,
2138 AlignInBits))
2140 IsDefinition, StaticDataMemberDeclaration, AlignInBits))
21392141 DEFINE_MDNODE_GET(DIGlobalVariable,
21402142 (Metadata * Scope, MDString *Name, MDString *LinkageName,
21412143 Metadata *File, unsigned Line, Metadata *Type,
21422144 bool IsLocalToUnit, bool IsDefinition,
2143 Metadata *Expr, Metadata *StaticDataMemberDeclaration,
2145 Metadata *StaticDataMemberDeclaration,
21442146 uint32_t AlignInBits),
21452147 (Scope, Name, LinkageName, File, Line, Type, IsLocalToUnit,
2146 IsDefinition, Expr, StaticDataMemberDeclaration,
2147 AlignInBits))
2148 IsDefinition, StaticDataMemberDeclaration, AlignInBits))
21482149
21492150 TempDIGlobalVariable clone() const { return cloneImpl(); }
21502151
21522153 bool isDefinition() const { return IsDefinition; }
21532154 StringRef getDisplayName() const { return getStringOperand(4); }
21542155 StringRef getLinkageName() const { return getStringOperand(5); }
2155 DIExpression *getExpr() const {
2156 return cast_or_null(getRawExpr());
2157 }
2158 void replaceExpr(DIExpression *E) {
2159 replaceOperandWith(6, E);
2160 }
21612156 DIDerivedType *getStaticDataMemberDeclaration() const {
21622157 return cast_or_null(getRawStaticDataMemberDeclaration());
21632158 }
21642159
21652160 MDString *getRawLinkageName() const { return getOperandAs(5); }
2166 Metadata *getRawExpr() const { return getOperand(6); }
2167 Metadata *getRawStaticDataMemberDeclaration() const { return getOperand(7); }
2161 Metadata *getRawStaticDataMemberDeclaration() const { return getOperand(6); }
21682162
21692163 static bool classof(const Metadata *MD) {
21702164 return MD->getMetadataID() == DIGlobalVariableKind;
23902384 }
23912385 };
23922386
2387 /// A pair of DIGlobalVariable and DIExpression.
2388 class DIGlobalVariableExpression : public MDNode {
2389 friend class LLVMContextImpl;
2390 friend class MDNode;
2391
2392 DIGlobalVariableExpression(LLVMContext &C, StorageType Storage,
2393 ArrayRef Ops)
2394 : MDNode(C, DIGlobalVariableExpressionKind, Storage, Ops) {}
2395 ~DIGlobalVariableExpression() = default;
2396
2397 static DIGlobalVariableExpression *
2398 getImpl(LLVMContext &Context, Metadata *Variable, Metadata *Expression,
2399 StorageType Storage, bool ShouldCreate = true);
2400
2401 TempDIGlobalVariableExpression cloneImpl() const {
2402 return getTemporary(getContext(), getVariable(), getExpression());
2403 }
2404
2405 public:
2406 DEFINE_MDNODE_GET(DIGlobalVariableExpression,
2407 (Metadata * Variable, Metadata *Expression),
2408 (Variable, Expression))
2409
2410 TempDIGlobalVariableExpression clone() const { return cloneImpl(); }
2411
2412 Metadata *getRawVariable() const { return getOperand(0); }
2413 DIGlobalVariable *getVariable() const {
2414 return cast_or_null(getRawVariable());
2415 }
2416 Metadata *getRawExpression() const { return getOperand(1); }
2417 DIExpression *getExpression() const {
2418 return cast_or_null(getRawExpression());
2419 }
2420
2421 static bool classof(const Metadata *MD) {
2422 return MD->getMetadataID() == DIGlobalVariableExpressionKind;
2423 }
2424 };
2425
23932426 /// Macro Info DWARF-like metadata node.
23942427 ///
23952428 /// A metadata node with a DWARF macro info (i.e., a constant named
1919 #ifndef LLVM_IR_GLOBALVARIABLE_H
2020 #define LLVM_IR_GLOBALVARIABLE_H
2121
22 #include "llvm/ADT/PointerUnion.h"
2223 #include "llvm/ADT/Twine.h"
2324 #include "llvm/ADT/ilist_node.h"
2425 #include "llvm/IR/GlobalObject.h"
3031 namespace llvm {
3132
3233 class Constant;
33 class DIGlobalVariable;
3434 class Module;
3535
3636 template class SymbolTableListTraits;
37 class DIGlobalVariable;
38 class DIGlobalVariableExpression;
3739
3840 class GlobalVariable : public GlobalObject, public ilist_node {
3941 friend class SymbolTableListTraits;
169171 /// drops not only the reference to the initializer but also to any metadata.
170172 void dropAllReferences();
171173
172 void addDebugInfo(DIGlobalVariable *GV);
173 void getDebugInfo(SmallVectorImpl &GVs) const;
174 /// Attach a DIGlobalVariableExpression.
175 void addDebugInfo(DIGlobalVariableExpression *GV);
176
177 /// Fill the vector with all debug info attachements.
178 void getDebugInfo(SmallVectorImpl &GVs) const;
174179
175180 // Methods for support type inquiry through isa, cast, and dyn_cast:
176181 static inline bool classof(const Value *V) {
8181 HANDLE_MDNODE_LEAF_UNIQUABLE(MDTuple)
8282 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DILocation)
8383 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIExpression)
84 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIGlobalVariableExpression)
8485 HANDLE_SPECIALIZED_MDNODE_BRANCH(DINode)
8586 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(GenericDINode)
8687 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DISubrange)
9090 O << '\n';
9191 }
9292
93 for (const DIGlobalVariable *GV : Finder.global_variables()) {
93 for (auto GVU : Finder.global_variables()) {
94 const auto *GV = GVU->getVariable();
9495 O << "Global variable: " << GV->getName();
9596 printFile(O, GV->getFilename(), GV->getDirectory(), GV->getLine());
9697 if (!GV->getLinkageName().empty())
41964196 /// ParseDIGlobalVariable:
41974197 /// ::= !DIGlobalVariable(scope: !0, name: "foo", linkageName: "foo",
41984198 /// file: !1, line: 7, type: !2, isLocal: false,
4199 /// isDefinition: true, variable: i32* @foo,
4200 /// declaration: !3, align: 8)
4199 /// isDefinition: true, declaration: !3, align: 8)
42014200 bool LLParser::ParseDIGlobalVariable(MDNode *&Result, bool IsDistinct) {
42024201 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \
42034202 REQUIRED(name, MDStringField, (/* AllowEmpty */ false)); \
42084207 OPTIONAL(type, MDField, ); \
42094208 OPTIONAL(isLocal, MDBoolField, ); \
42104209 OPTIONAL(isDefinition, MDBoolField, (true)); \
4211 OPTIONAL(expr, MDField, ); \
42124210 OPTIONAL(declaration, MDField, ); \
42134211 OPTIONAL(align, MDUnsignedField, (0, UINT32_MAX));
42144212 PARSE_MD_FIELDS();
42174215 Result = GET_OR_DISTINCT(DIGlobalVariable,
42184216 (Context, scope.Val, name.Val, linkageName.Val,
42194217 file.Val, line.Val, type.Val, isLocal.Val,
4220 isDefinition.Val, expr.Val, declaration.Val,
4221 align.Val));
4218 isDefinition.Val, declaration.Val, align.Val));
42224219 return false;
42234220 }
42244221
42834280 return true;
42844281
42854282 Result = GET_OR_DISTINCT(DIExpression, (Context, Elements));
4283 return false;
4284 }
4285
4286 /// ParseDIGlobalVariableExpression:
4287 /// ::= !DIGlobalVariableExpression(var: !0, expr: !1)
4288 bool LLParser::ParseDIGlobalVariableExpression(MDNode *&Result,
4289 bool IsDistinct) {
4290 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \
4291 REQUIRED(var, MDField, ); \
4292 OPTIONAL(expr, MDField, );
4293 PARSE_MD_FIELDS();
4294 #undef VISIT_MD_FIELDS
4295
4296 Result =
4297 GET_OR_DISTINCT(DIGlobalVariableExpression, (Context, var.Val, expr.Val));
42864298 return false;
42874299 }
42884300
977977 DIGlobalVariable,
978978 (Context, getMDOrNull(Record[1]), getMDString(Record[2]),
979979 getMDString(Record[3]), getMDOrNull(Record[4]), Record[5],
980 getDITypeRefOrNull(Record[6]), Record[7], Record[8], Expr,
980 getDITypeRefOrNull(Record[6]), Record[7], Record[8],
981981 getMDOrNull(Record[10]), AlignInBits));
982 MetadataList.assignValue(DGV, NextMetadataNo++);
983
984 if (Attach)
985 Attach->addDebugInfo(DGV);
982
983 if (Expr || Attach) {
984 auto *DGVE = DIGlobalVariableExpression::getDistinct(Context, DGV, Expr);
985 MetadataList.assignValue(DGVE, NextMetadataNo++);
986 if (Attach)
987 Attach->addDebugInfo(DGVE);
988 } else
989 MetadataList.assignValue(DGV, NextMetadataNo++);
986990
987991 break;
988992 }
10301034 GET_OR_DISTINCT(DIExpression,
10311035 (Context, makeArrayRef(Record).slice(1))),
10321036 NextMetadataNo++);
1037 break;
1038 }
1039 case bitc::METADATA_GLOBAL_VAR_EXPR: {
1040 if (Record.size() != 3)
1041 return error("Invalid record");
1042
1043 IsDistinct = Record[0];
1044 MetadataList.assignValue(GET_OR_DISTINCT(DIGlobalVariableExpression,
1045 (Context, getMDOrNull(Record[1]),
1046 getMDOrNull(Record[2]))),
1047 NextMetadataNo++);
10331048 break;
10341049 }
10351050 case bitc::METADATA_OBJC_PROPERTY: {
209209 SmallVectorImpl &Record, unsigned Abbrev);
210210 void writeDIExpression(const DIExpression *N,
211211 SmallVectorImpl &Record, unsigned Abbrev);
212 void writeDIGlobalVariableExpression(const DIGlobalVariableExpression *N,
213 SmallVectorImpl &Record,
214 unsigned Abbrev);
212215 void writeDIObjCProperty(const DIObjCProperty *N,
213216 SmallVectorImpl &Record, unsigned Abbrev);
214217 void writeDIImportedEntity(const DIImportedEntity *N,
16821685 Record.push_back(VE.getMetadataOrNullID(N->getType()));
16831686 Record.push_back(N->isLocalToUnit());
16841687 Record.push_back(N->isDefinition());
1685 Record.push_back(VE.getMetadataOrNullID(N->getRawExpr()));
1688 Record.push_back(/* expr */ 0);
16861689 Record.push_back(VE.getMetadataOrNullID(N->getStaticDataMemberDeclaration()));
16871690 Record.push_back(N->getAlignInBits());
16881691
17311734 Record.append(N->elements_begin(), N->elements_end());
17321735
17331736 Stream.EmitRecord(bitc::METADATA_EXPRESSION, Record, Abbrev);
1737 Record.clear();
1738 }
1739
1740 void ModuleBitcodeWriter::writeDIGlobalVariableExpression(
1741 const DIGlobalVariableExpression *N, SmallVectorImpl &Record,
1742 unsigned Abbrev) {
1743 Record.push_back(N->isDistinct());
1744 Record.push_back(VE.getMetadataOrNullID(N->getVariable()));
1745 Record.push_back(VE.getMetadataOrNullID(N->getExpression()));
1746
1747 Stream.EmitRecord(bitc::METADATA_GLOBAL_VAR_EXPR, Record, Abbrev);
17341748 Record.clear();
17351749 }
17361750
21802180 }
21812181
21822182 void CodeViewDebug::emitDebugInfoForGlobals() {
2183 DenseMap *, const GlobalVariable *> GlobalMap;
2183 DenseMapExpression *, const GlobalVariable *>
2184 GlobalMap;
21842185 for (const GlobalVariable &GV : MMI->getModule()->globals()) {
2185 SmallVector MDs;
2186 GV.getMetadata(LLVMContext::MD_dbg, MDs);
2187 for (MDNode *MD : MDs)
2188 GlobalMap[cast(MD)] = &GV;
2186 SmallVector GVEs;
2187 GV.getDebugInfo(GVEs);
2188 for (const auto *GVE : GVEs)
2189 GlobalMap[GVE] = &GV;
21892190 }
21902191
21912192 NamedMDNode *CUs = MMI->getModule()->getNamedMetadata("llvm.dbg.cu");
21972198 // it if we have at least one global to emit.
21982199 switchToDebugSectionForSymbol(nullptr);
21992200 MCSymbol *EndLabel = nullptr;
2200 for (const DIGlobalVariable *G : CU->getGlobalVariables()) {
2201 if (const auto *GV = GlobalMap.lookup(G))
2201 for (const auto *GVE : CU->getGlobalVariables()) {
2202 if (const auto *GV = GlobalMap.lookup(GVE))
22022203 if (!GV->hasComdat() && !GV->isDeclarationForLinker()) {
22032204 if (!EndLabel) {
22042205 OS.AddComment("Symbol subsection for globals");
22052206 EndLabel = beginCVSubsection(ModuleSubstreamKind::Symbols);
22062207 }
2207 emitDebugInfoForGlobal(G, GV, Asm->getSymbol(GV));
2208 // FIXME: emitDebugInfoForGlobal() doesn't handle DIExpressions.
2209 emitDebugInfoForGlobal(GVE->getVariable(), GV, Asm->getSymbol(GV));
22082210 }
22092211 }
22102212 if (EndLabel)
22122214
22132215 // Second, emit each global that is in a comdat into its own .debug$S
22142216 // section along with its own symbol substream.
2215 for (const DIGlobalVariable *G : CU->getGlobalVariables()) {
2216 if (const auto *GV = GlobalMap.lookup(G)) {
2217 for (const auto *GVE : CU->getGlobalVariables()) {
2218 if (const auto *GV = GlobalMap.lookup(GVE)) {
22172219 if (GV->hasComdat()) {
22182220 MCSymbol *GVSym = Asm->getSymbol(GV);
22192221 OS.AddComment("Symbol subsection for " +
22202222 Twine(GlobalValue::getRealLinkageName(GV->getName())));
22212223 switchToDebugSectionForSymbol(GVSym);
22222224 EndLabel = beginCVSubsection(ModuleSubstreamKind::Symbols);
2223 emitDebugInfoForGlobal(G, GV, GVSym);
2225 // FIXME: emitDebugInfoForGlobal() doesn't handle DIExpressions.
2226 emitDebugInfoForGlobal(GVE->getVariable(), GV, GVSym);
22242227 endCVSubsection(EndLabel);
22252228 }
22262229 }
7272 Asm->OutStreamer->hasRawTextSupport() ? 0 : getUniqueID());
7373 }
7474
75 /// getOrCreateGlobalVariableDIE - get or create global variable DIE.
7675 DIE *DwarfCompileUnit::getOrCreateGlobalVariableDIE(
77 const DIGlobalVariable *GV, const GlobalVariable *Global) {
76 const DIGlobalVariable *GV, ArrayRef GlobalExprs) {
7877 // Check for pre-existence.
7978 if (DIE *Die = getDIE(GV))
8079 return Die;
127126
128127 // Add location.
129128 bool addToAccelTable = false;
130
131 DIExpression *Expr = GV->getExpr();
132
133 // For compatibility with DWARF 3 and earlier,
134 // DW_AT_location(DW_OP_constu, X, DW_OP_stack_value) becomes
135 // DW_AT_const_value(X).
136 if (Expr && Expr->getNumElements() == 3 &&
137 Expr->getElement(0) == dwarf::DW_OP_constu &&
138 Expr->getElement(2) == dwarf::DW_OP_stack_value) {
139 addConstantValue(*VariableDIE, /*Unsigned=*/true, Expr->getElement(1));
140 // We cannot describe the location of dllimport'd variables: the computation
141 // of their address requires loads from the IAT.
142 } else if (!Global || !Global->hasDLLImportStorageClass()) {
143 DIELoc *Loc = new (DIEValueAllocator) DIELoc;
144 if (Global) {
129 DIELoc *Loc = nullptr;
130 std::unique_ptr DwarfExpr;
131 bool AllConstant = std::all_of(
132 GlobalExprs.begin(), GlobalExprs.end(),
133 [&](const GlobalExpr GE) {
134 return GE.Expr && GE.Expr->isConstant();
135 });
136
137 for (const auto &GE : GlobalExprs) {
138 const GlobalVariable *Global = GE.Var;
139 const DIExpression *Expr = GE.Expr;
140 // For compatibility with DWARF 3 and earlier,
141 // DW_AT_location(DW_OP_constu, X, DW_OP_stack_value) becomes
142 // DW_AT_const_value(X).
143 if (GlobalExprs.size() == 1 && Expr && Expr->isConstant()) {
144 addConstantValue(*VariableDIE, /*Unsigned=*/true, Expr->getElement(1));
145 // We cannot describe the location of dllimport'd variables: the
146 // computation of their address requires loads from the IAT.
147 } else if ((Global && !Global->hasDLLImportStorageClass()) || AllConstant) {
148 if (!Loc) {
149 Loc = new (DIEValueAllocator) DIELoc;
150 DwarfExpr = llvm::make_unique(*Asm, *this, *Loc);
151 }
145152 addToAccelTable = true;
146 const MCSymbol *Sym = Asm->getSymbol(Global);
147 if (Global->isThreadLocal()) {
148 if (Asm->TM.Options.EmulatedTLS) {
149 // TODO: add debug info for emulated thread local mode.
153 if (Global) {
154 const MCSymbol *Sym = Asm->getSymbol(Global);
155 if (Global->isThreadLocal()) {
156 if (Asm->TM.Options.EmulatedTLS) {
157 // TODO: add debug info for emulated thread local mode.
158 } else {
159 // FIXME: Make this work with -gsplit-dwarf.
160 unsigned PointerSize = Asm->getDataLayout().getPointerSize();
161 assert((PointerSize == 4 || PointerSize == 8) &&
162 "Add support for other sizes if necessary");
163 // Based on GCC's support for TLS:
164 if (!DD->useSplitDwarf()) {
165 // 1) Start with a constNu of the appropriate pointer size
166 addUInt(*Loc, dwarf::DW_FORM_data1,
167 PointerSize == 4 ? dwarf::DW_OP_const4u
168 : dwarf::DW_OP_const8u);
169 // 2) containing the (relocated) offset of the TLS variable
170 // within the module's TLS block.
171 addExpr(*Loc, dwarf::DW_FORM_udata,
172 Asm->getObjFileLowering().getDebugThreadLocalSymbol(Sym));
173 } else {
174 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_const_index);
175 addUInt(*Loc, dwarf::DW_FORM_udata,
176 DD->getAddressPool().getIndex(Sym, /* TLS */ true));
177 }
178 // 3) followed by an OP to make the debugger do a TLS lookup.
179 addUInt(*Loc, dwarf::DW_FORM_data1,
180 DD->useGNUTLSOpcode() ? dwarf::DW_OP_GNU_push_tls_address
181 : dwarf::DW_OP_form_tls_address);
182 }
150183 } else {
151 // FIXME: Make this work with -gsplit-dwarf.
152 unsigned PointerSize = Asm->getDataLayout().getPointerSize();
153 assert((PointerSize == 4 || PointerSize == 8) &&
154 "Add support for other sizes if necessary");
155 // Based on GCC's support for TLS:
156 if (!DD->useSplitDwarf()) {
157 // 1) Start with a constNu of the appropriate pointer size
158 addUInt(*Loc, dwarf::DW_FORM_data1, PointerSize == 4
159 ? dwarf::DW_OP_const4u
160 : dwarf::DW_OP_const8u);
161 // 2) containing the (relocated) offset of the TLS variable
162 // within the module's TLS block.
163 addExpr(*Loc, dwarf::DW_FORM_udata,
164 Asm->getObjFileLowering().getDebugThreadLocalSymbol(Sym));
165 } else {
166 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_const_index);
167 addUInt(*Loc, dwarf::DW_FORM_udata,
168 DD->getAddressPool().getIndex(Sym, /* TLS */ true));
169 }
170 // 3) followed by an OP to make the debugger do a TLS lookup.
171 addUInt(*Loc, dwarf::DW_FORM_data1,
172 DD->useGNUTLSOpcode() ? dwarf::DW_OP_GNU_push_tls_address
173 : dwarf::DW_OP_form_tls_address);
184 DD->addArangeLabel(SymbolCU(this, Sym));
185 addOpAddress(*Loc, Sym);
174186 }
175 } else {
176 DD->addArangeLabel(SymbolCU(this, Sym));
177 addOpAddress(*Loc, Sym);
178187 }
179
180188 if (Expr) {
181 DIEDwarfExpression DwarfExpr(*Asm, *this, *Loc);
182 DwarfExpr.addFragmentOffset(Expr);
183 DwarfExpr.AddExpression(Expr);
184 DwarfExpr.finalize();
189 DwarfExpr->addFragmentOffset(Expr);
190 DwarfExpr->AddExpression(Expr);
185191 }
186192 }
187
188 addBlock(*VariableDIE, dwarf::DW_AT_location, Loc);
189
190 if (DD->useAllLinkageNames())
191 addLinkageName(*VariableDIE, GV->getLinkageName());
192 }
193 }
194 if (Loc)
195 addBlock(*VariableDIE, dwarf::DW_AT_location, DwarfExpr->finalize());
196
197 if (DD->useAllLinkageNames())
198 addLinkageName(*VariableDIE, GV->getLinkageName());
193199
194200 if (addToAccelTable) {
195201 DD->addAccelName(GV->getName(), *VariableDIE);
502508 DwarfExpr.addFragmentOffset(Expr);
503509 DwarfExpr.AddUnsignedConstant(DVInsn->getOperand(0).getImm());
504510 DwarfExpr.AddExpression(Expr);
505 DwarfExpr.finalize();
506 addBlock(*VariableDie, dwarf::DW_AT_location, Loc);
511 addBlock(*VariableDie, dwarf::DW_AT_location, DwarfExpr.finalize());
507512 } else
508513 addConstantValue(*VariableDie, DVInsn->getOperand(0), DV.getType());
509514 } else if (DVInsn->getOperand(0).isFPImm())
533538 DwarfExpr.AddExpression(*Expr);
534539 ++Expr;
535540 }
536 DwarfExpr.finalize();
537 addBlock(*VariableDie, dwarf::DW_AT_location, Loc);
541 addBlock(*VariableDie, dwarf::DW_AT_location, DwarfExpr.finalize());
538542
539543 return VariableDie;
540544 }
653657 else if (auto *T = dyn_cast(Entity))
654658 EntityDie = getOrCreateTypeDIE(T);
655659 else if (auto *GV = dyn_cast(Entity))
656 EntityDie = getOrCreateGlobalVariableDIE(GV, nullptr);
660 EntityDie = getOrCreateGlobalVariableDIE(GV, {});
657661 else
658662 EntityDie = getDIE(Entity);
659663 assert(EntityDie);
739743 if (!validReg)
740744 return;
741745
742 Expr.finalize();
743
744746 // Now attach the location information to the DIE.
745 addBlock(Die, Attribute, Loc);
747 addBlock(Die, Attribute, Expr.finalize());
746748 }
747749
748750 /// Start with the address based on the location provided, and generate the
9090 /// Apply the DW_AT_stmt_list from this compile unit to the specified DIE.
9191 void applyStmtList(DIE &D);
9292
93 /// getOrCreateGlobalVariableDIE - get or create global variable DIE.
94 DIE *getOrCreateGlobalVariableDIE(const DIGlobalVariable *GV,
95 const GlobalVariable *Global);
93 /// A pair of GlobalVariable and DIExpression.
94 struct GlobalExpr {
95 const GlobalVariable *Var;
96 const DIExpression *Expr;
97 };
98
99 /// Get or create global variable DIE.
100 DIE *
101 getOrCreateGlobalVariableDIE(const DIGlobalVariable *GV,
102 ArrayRef GlobalExprs);
96103
97104 /// addLabelAddress - Add a dwarf label attribute data and value using
98105 /// either DW_FORM_addr or DW_FORM_GNU_addr_index.
463463 D->addChild(TheCU.constructImportedEntityDIE(N));
464464 }
465465
466 /// Sort and unique GVEs by comparing their fragment offset.
467 static SmallVectorImpl &
468 sortGlobalExprs(SmallVectorImpl &GVEs) {
469 std::sort(GVEs.begin(), GVEs.end(),
470 [](DwarfCompileUnit::GlobalExpr A, DwarfCompileUnit::GlobalExpr B) {
471 if (A.Expr != B.Expr && A.Expr && B.Expr &&
472 A.Expr->isFragment() && B.Expr->isFragment())
473 return A.Expr->getFragmentOffsetInBits() <
474 B.Expr->getFragmentOffsetInBits();
475 return false;
476 });
477 GVEs.erase(std::unique(GVEs.begin(), GVEs.end(),
478 [](DwarfCompileUnit::GlobalExpr A,
479 DwarfCompileUnit::GlobalExpr B) {
480 return A.Expr == B.Expr;
481 }),
482 GVEs.end());
483 return GVEs;
484 }
485
466486 // Emit all Dwarf sections that should come prior to the content. Create
467487 // global DIEs and emit initial debug info sections. This is invoked by
468488 // the target AsmPrinter.
479499 // Tell MMI whether we have debug info.
480500 MMI->setDebugInfoAvailability(NumDebugCUs > 0);
481501 SingleCU = NumDebugCUs == 1;
482
483 DenseMapconst GlobalVariable *> GVMap;
502 DenseMapSmallVector>
503 GVMap;
484504 for (const GlobalVariable &Global : M->globals()) {
485 SmallVector *, 1> GVs;
505 SmallVectorExpression *, 1> GVs;
486506 Global.getDebugInfo(GVs);
487 for (auto &GV : GVs)
488 GVMap[GV] = &Global;
507 for (auto *GVE : GVs)
508 GVMap[GVE->getVariable()].push_back({&Global, GVE->getExpression()});
489509 }
490510
491511 for (DICompileUnit *CUNode : M->debug_compile_units()) {
492512 DwarfCompileUnit &CU = constructDwarfCompileUnit(CUNode);
493513 for (auto *IE : CUNode->getImportedEntities())
494514 CU.addImportedEntity(IE);
495 for (auto *GV : CUNode->getGlobalVariables())
496 CU.getOrCreateGlobalVariableDIE(GV, GVMap.lookup(GV));
515
516 // Global Variables.
517 for (auto *GVE : CUNode->getGlobalVariables())
518 GVMap[GVE->getVariable()].push_back({nullptr, GVE->getExpression()});
519 DenseSet Processed;
520 for (auto *GVE : CUNode->getGlobalVariables()) {
521 DIGlobalVariable *GV = GVE->getVariable();
522 if (Processed.insert(GV).second)
523 CU.getOrCreateGlobalVariableDIE(GV, sortGlobalExprs(GVMap[GV]));
524 }
525
497526 for (auto *Ty : CUNode->getEnumTypes()) {
498527 // The enum types array by design contains pointers to
499528 // MDNodes rather than DIRefs. Unique them here.
214214 void EmitUnsigned(uint64_t Value) override;
215215 bool isFrameRegister(const TargetRegisterInfo &TRI,
216216 unsigned MachineReg) override;
217 DIELoc *finalize() {
218 DwarfExpression::finalize();
219 return &DIE;
220 }
217221 };
218222 }
219223
18261826 Printer.printMetadata("type", N->getRawType());
18271827 Printer.printBool("isLocal", N->isLocalToUnit());
18281828 Printer.printBool("isDefinition", N->isDefinition());
1829 Printer.printMetadata("expr", N->getExpr());
18301829 Printer.printMetadata("declaration", N->getRawStaticDataMemberDeclaration());
18311830 Printer.printInt("align", N->getAlignInBits());
18321831 Out << ")";
18661865 for (const auto &I : N->getElements())
18671866 Out << FS << I;
18681867 }
1868 Out << ")";
1869 }
1870
1871 static void writeDIGlobalVariableExpression(raw_ostream &Out,
1872 const DIGlobalVariableExpression *N,
1873 TypePrinting *TypePrinter,
1874 SlotTracker *Machine,
1875 const Module *Context) {
1876 Out << "!DIGlobalVariableExpression(";
1877 MDFieldPrinter Printer(Out, TypePrinter, Machine, Context);
1878 Printer.printMetadata("var", N->getVariable());
1879 Printer.printMetadata("expr", N->getExpression());
18691880 Out << ")";
18701881 }
18711882
531531 #endif
532532 }
533533
534 DIGlobalVariable *DIBuilder::createGlobalVariable(
534 DIGlobalVariableExpression *DIBuilder::createGlobalVariableExpression(
535535 DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *F,
536 unsigned LineNumber, DIType *Ty, bool isLocalToUnit,
537 DIExpression *Expr, MDNode *Decl, uint32_t AlignInBits) {
536 unsigned LineNumber, DIType *Ty, bool isLocalToUnit, DIExpression *Expr,
537 MDNode *Decl, uint32_t AlignInBits) {
538538 checkGlobalVariableScope(Context);
539539
540 auto *N = DIGlobalVariable::getDistinct(
540 auto *GV = DIGlobalVariable::getDistinct(
541541 VMContext, cast_or_null(Context), Name, LinkageName, F,
542 LineNumber, Ty, isLocalToUnit, true, Expr,
543 cast_or_null(Decl), AlignInBits);
542 LineNumber, Ty, isLocalToUnit, true, cast_or_null(Decl),
543 AlignInBits);
544 auto *N = DIGlobalVariableExpression::get(VMContext, GV, Expr);
544545 AllGVs.push_back(N);
545546 return N;
546547 }
547548
548549 DIGlobalVariable *DIBuilder::createTempGlobalVariableFwdDecl(
549550 DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *F,
550 unsigned LineNumber, DIType *Ty, bool isLocalToUnit,
551 DIExpression *Expr, MDNode *Decl, uint32_t AlignInBits) {
551 unsigned LineNumber, DIType *Ty, bool isLocalToUnit, MDNode *Decl,
552 uint32_t AlignInBits) {
552553 checkGlobalVariableScope(Context);
553554
554555 return DIGlobalVariable::getTemporary(
555556 VMContext, cast_or_null(Context), Name, LinkageName, F,
556 LineNumber, Ty, isLocalToUnit, false, Expr,
557 LineNumber, Ty, isLocalToUnit, false,
557558 cast_or_null(Decl), AlignInBits)
558559 .release();
559560 }
5252 void DebugInfoFinder::processModule(const Module &M) {
5353 for (auto *CU : M.debug_compile_units()) {
5454 addCompileUnit(CU);
55 for (auto *DIG : CU->getGlobalVariables()) {
56 if (addGlobalVariable(DIG)) {
57 processScope(DIG->getScope());
58 processType(DIG->getType().resolve());
59 }
55 for (auto DIG : CU->getGlobalVariables()) {
56 if (!addGlobalVariable(DIG))
57 continue;
58 auto *GV = DIG->getVariable();
59 processScope(GV->getScope());
60 processType(GV->getType().resolve());
6061 }
6162 for (auto *ET : CU->getEnumTypes())
6263 processType(ET);
205206 return true;
206207 }
207208
208 bool DebugInfoFinder::addGlobalVariable(DIGlobalVariable *DIG) {
209 if (!DIG)
210 return false;
211
209 bool DebugInfoFinder::addGlobalVariable(DIGlobalVariableExpression *DIG) {
212210 if (!NodesSeen.insert(DIG).second)
213211 return false;
214212
513513 DIGlobalVariable::getImpl(LLVMContext &Context, Metadata *Scope, MDString *Name,
514514 MDString *LinkageName, Metadata *File, unsigned Line,
515515 Metadata *Type, bool IsLocalToUnit, bool IsDefinition,
516 Metadata *Variable,
517516 Metadata *StaticDataMemberDeclaration,
518 uint32_t AlignInBits,
519 StorageType Storage, bool ShouldCreate) {
517 uint32_t AlignInBits, StorageType Storage,
518 bool ShouldCreate) {
520519 assert(isCanonical(Name) && "Expected canonical MDString");
521520 assert(isCanonical(LinkageName) && "Expected canonical MDString");
522521 DEFINE_GETIMPL_LOOKUP(DIGlobalVariable,
523522 (Scope, Name, LinkageName, File, Line, Type,
524 IsLocalToUnit, IsDefinition, Variable,
523 IsLocalToUnit, IsDefinition,
525524 StaticDataMemberDeclaration, AlignInBits));
526 Metadata *Ops[] = {Scope, Name, File, Type,
527 Name, LinkageName, Variable, StaticDataMemberDeclaration};
525 Metadata *Ops[] = {
526 Scope, Name, File, Type, Name, LinkageName, StaticDataMemberDeclaration};
528527 DEFINE_GETIMPL_STORE(DIGlobalVariable,
529528 (Line, IsLocalToUnit, IsDefinition, AlignInBits),
530529 Ops);
580579 default:
581580 return false;
582581 case dwarf::DW_OP_LLVM_fragment:
583 case dwarf::DW_OP_stack_value:
584 // We only support fragment and stack value expressions which appear at
585 // the end.
582 // A fragment operator must appear at the end.
586583 return I->get() + I->getSize() == E->get();
584 case dwarf::DW_OP_stack_value: {
585 // Must be the last one or followed by a DW_OP_LLVM_fragment.
586 if (I->get() + I->getSize() == E->get())
587 break;
588 auto J = I;
589 if ((++J)->getOp() != dwarf::DW_OP_LLVM_fragment)
590 return false;
591 break;
592 }
587593 case dwarf::DW_OP_constu:
588594 case dwarf::DW_OP_plus:
589595 case dwarf::DW_OP_minus:
610616 uint64_t DIExpression::getFragmentSizeInBits() const {
611617 assert(isFragment() && "Expected fragment");
612618 return getElement(getNumElements() - 1);
619 }
620
621 bool DIExpression::isConstant() const {
622 // Recognize DW_OP_constu C DW_OP_stack_value (DW_OP_LLVM_fragment Len Ofs)?.
623 if (getNumElements() != 3 && getNumElements() != 6)
624 return false;
625 if (getElement(0) != dwarf::DW_OP_constu ||
626 getElement(2) != dwarf::DW_OP_stack_value)
627 return false;
628 if (getNumElements() == 6 && getElement(3) != dwarf::DW_OP_LLVM_fragment)
629 return false;
630 return true;
631 }
632
633 DIGlobalVariableExpression *
634 DIGlobalVariableExpression::getImpl(LLVMContext &Context, Metadata *Variable,
635 Metadata *Expression, StorageType Storage,
636 bool ShouldCreate) {
637 DEFINE_GETIMPL_LOOKUP(DIGlobalVariableExpression, (Variable, Expression));
638 Metadata *Ops[] = {Variable, Expression};
639 DEFINE_GETIMPL_STORE_NO_CONSTRUCTOR_ARGS(DIGlobalVariableExpression, Ops);
613640 }
614641
615642 DIObjCProperty *DIObjCProperty::getImpl(
762762 Metadata *Type;
763763 bool IsLocalToUnit;
764764 bool IsDefinition;
765 Metadata *Expr;
766765 Metadata *StaticDataMemberDeclaration;
767766 uint32_t AlignInBits;
768767
769768 MDNodeKeyImpl(Metadata *Scope, MDString *Name, MDString *LinkageName,
770769 Metadata *File, unsigned Line, Metadata *Type,
771770 bool IsLocalToUnit, bool IsDefinition,
772 Metadata *Expr, Metadata *StaticDataMemberDeclaration,
773 uint32_t AlignInBits)
771 Metadata *StaticDataMemberDeclaration, uint32_t AlignInBits)
774772 : Scope(Scope), Name(Name), LinkageName(LinkageName), File(File),
775773 Line(Line), Type(Type), IsLocalToUnit(IsLocalToUnit),
776 IsDefinition(IsDefinition), Expr(Expr),
774 IsDefinition(IsDefinition),
777775 StaticDataMemberDeclaration(StaticDataMemberDeclaration),
778776 AlignInBits(AlignInBits) {}
779777 MDNodeKeyImpl(const DIGlobalVariable *N)
781779 LinkageName(N->getRawLinkageName()), File(N->getRawFile()),
782780 Line(N->getLine()), Type(N->getRawType()),
783781 IsLocalToUnit(N->isLocalToUnit()), IsDefinition(N->isDefinition()),
784 Expr(N->getRawExpr()),
785782 StaticDataMemberDeclaration(N->getRawStaticDataMemberDeclaration()),
786783 AlignInBits(N->getAlignInBits()) {}
787784
791788 File == RHS->getRawFile() && Line == RHS->getLine() &&
792789 Type == RHS->getRawType() && IsLocalToUnit == RHS->isLocalToUnit() &&
793790 IsDefinition == RHS->isDefinition() &&
794 Expr == RHS->getRawExpr() &&
795791 StaticDataMemberDeclaration ==
796792 RHS->getRawStaticDataMemberDeclaration() &&
797793 AlignInBits == RHS->getAlignInBits();
805801 // generated IR is random for each run and test fails with Align included.
806802 // TODO: make hashing work fine with such situations
807803 return hash_combine(Scope, Name, LinkageName, File, Line, Type,
808 IsLocalToUnit, IsDefinition, /* AlignInBits, */ Expr,
804 IsLocalToUnit, IsDefinition, /* AlignInBits, */
809805 StaticDataMemberDeclaration);
810806 }
811807 };
860856 unsigned getHashValue() const {
861857 return hash_combine_range(Elements.begin(), Elements.end());
862858 }
859 };
860
861 template <> struct MDNodeKeyImpl {
862 Metadata *Variable;
863 Metadata *Expression;
864
865 MDNodeKeyImpl(Metadata *Variable, Metadata *Expression)
866 : Variable(Variable), Expression(Expression) {}
867 MDNodeKeyImpl(const DIGlobalVariableExpression *N)
868 : Variable(N->getRawVariable()), Expression(N->getRawExpression()) {}
869
870 bool isKeyOf(const DIGlobalVariableExpression *RHS) const {
871 return Variable == RHS->getRawVariable() &&
872 Expression == RHS->getRawExpression();
873 }
874 unsigned getHashValue() const { return hash_combine(Variable, Expression); }
863875 };
864876
865877 template <> struct MDNodeKeyImpl {
14181418 // If an offset adjustment was specified we need to modify the DIExpression
14191419 // to prepend the adjustment:
14201420 // !DIExpression(DW_OP_plus, Offset, [original expr])
1421 auto *Attachment = MD.second;
14211422 if (Offset != 0 && MD.first == LLVMContext::MD_dbg) {
1422 DIGlobalVariable *GV = cast(MD.second);
1423 DIExpression *E = GV->getExpr();
1423 DIGlobalVariable *GV = dyn_cast(Attachment);
1424 DIExpression *E = nullptr;
1425 if (!GV) {
1426 auto *GVE = cast(Attachment);
1427 GV = GVE->getVariable();
1428 E = GVE->getExpression();
1429 }
14241430 ArrayRef OrigElements;
14251431 if (E)
14261432 OrigElements = E->getElements();
14281434 Elements[0] = dwarf::DW_OP_plus;
14291435 Elements[1] = Offset;
14301436 std::copy(OrigElements.begin(), OrigElements.end(), Elements.begin() + 2);
1431 GV->replaceExpr(DIExpression::get(getContext(), Elements));
1437 E = DIExpression::get(getContext(), Elements);
1438 Attachment = DIGlobalVariableExpression::get(getContext(), GV, E);
14321439 }
1433 addMetadata(MD.first, *MD.second);
1440 addMetadata(MD.first, *Attachment);
14341441 }
14351442 }
14361443
14511458 return cast_or_null(getMetadata(LLVMContext::MD_dbg));
14521459 }
14531460
1454 void GlobalVariable::addDebugInfo(DIGlobalVariable *GV) {
1461 void GlobalVariable::addDebugInfo(DIGlobalVariableExpression *GV) {
14551462 addMetadata(LLVMContext::MD_dbg, *GV);
14561463 }
14571464
14581465 void GlobalVariable::getDebugInfo(
1459 SmallVectorImpl *> &GVs) const {
1466 SmallVectorImplExpression *> &GVs) const {
14601467 SmallVector MDs;
14611468 getMetadata(LLVMContext::MD_dbg, MDs);
14621469 for (MDNode *MD : MDs)
1463 GVs.push_back(cast(MD));
1464 }
1470 GVs.push_back(cast(MD));
1471 }
593593 "Global variable initializer type does not match global "
594594 "variable type!",
595595 &GV);
596
597596 // If the global has common linkage, it must have a zero initializer and
598597 // cannot be constant.
599598 if (GV.hasCommonLinkage()) {
659658 GV.hasAvailableExternallyLinkage(),
660659 "Global is marked as dllimport, but not external", &GV);
661660
661 // Visit any debug info attachments.
662 SmallVector MDs;
663 GV.getMetadata(LLVMContext::MD_dbg, MDs);
664 for (auto *MD : MDs)
665 if (auto *GVE = dyn_cast(MD))
666 visitDIGlobalVariableExpression(*GVE);
667 else
668 AssertDI(false, "!dbg attachment of global variable must be a DIGlobalVariableExpression");
669
662670 if (!GV.hasInitializer()) {
663671 visitGlobalValue(GV);
664672 return;
10011009 if (auto *Array = N.getRawGlobalVariables()) {
10021010 AssertDI(isa(Array), "invalid global variable list", &N, Array);
10031011 for (Metadata *Op : N.getGlobalVariables()->operands()) {
1004 AssertDI(Op && isa(Op), "invalid global variable ref",
1005 &N, Op);
1012 AssertDI(Op && (isa(Op)),
1013 "invalid global variable ref", &N, Op);
10061014 }
10071015 }
10081016 if (auto *Array = N.getRawImportedEntities()) {
11451153
11461154 AssertDI(N.getTag() == dwarf::DW_TAG_variable, "invalid tag", &N);
11471155 AssertDI(!N.getName().empty(), "missing global variable name", &N);
1148 if (auto *V = N.getRawExpr())
1149 AssertDI(isa(V), "invalid expression location", &N, V);
11501156 if (auto *Member = N.getRawStaticDataMemberDeclaration()) {
11511157 AssertDI(isa(Member),
11521158 "invalid static data member declaration", &N, Member);
11641170
11651171 void Verifier::visitDIExpression(const DIExpression &N) {
11661172 AssertDI(N.isValid(), "invalid expression", &N);
1173 }
1174
1175 void Verifier::visitDIGlobalVariableExpression(
1176 const DIGlobalVariableExpression &GVE) {
1177 AssertDI(GVE.getVariable(), "missing variable");
1178 if (auto *Var = GVE.getVariable())
1179 visitDIGlobalVariable(*Var);
1180 if (auto *Expr = GVE.getExpression())
1181 visitDIExpression(*Expr);
11671182 }
11681183
11691184 void Verifier::visitDIObjCProperty(const DIObjCProperty &N) {
312312 // replace the current list of potentially dead global variables/functions
313313 // with the live list.
314314 SmallVector LiveGlobalVariables;
315 DenseSet VisitedSet;
316
317 std::set LiveGVs;
315 DenseSet VisitedSet;
316
317 std::set LiveGVs;
318318 for (GlobalVariable &GV : M.globals()) {
319 SmallVector DIs;
320 GV.getDebugInfo(DIs);
321 for (DIGlobalVariable *DI : DIs)
322 LiveGVs.insert(DI);
319 SmallVector GVEs;
320 GV.getDebugInfo(GVEs);
321 for (auto *GVE : GVEs)
322 LiveGVs.insert(GVE);
323323 }
324324
325325 for (DICompileUnit *DIC : F.compile_units()) {
326326 // Create our live global variable list.
327327 bool GlobalVariableChange = false;
328 for (DIGlobalVariable *DIG : DIC->getGlobalVariables()) {
328 for (auto *DIG : DIC->getGlobalVariables()) {
329 if (DIG->getExpression() && DIG->getExpression()->isConstant())
330 LiveGVs.insert(DIG);
331
329332 // Make sure we only visit each global variable only once.
330333 if (!VisitedSet.insert(DIG).second)
331334 continue;
16541654
16551655 // Transfer the debug info. The payload starts at offset zero so we can
16561656 // copy the debug info over as is.
1657 SmallVector *, 1> GVs;
1657 SmallVectorExpression *, 1> GVs;
16581658 G->getDebugInfo(GVs);
16591659 for (auto *GV : GVs)
16601660 NewGlobal->addDebugInfo(GV);
22
33 @foo = global i32 0
44
5 ; CHECK: !named = !{!0, !1, !2, !3, !4, !5, !6, !8, !9, !10}
6 !named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9}
5 ; CHECK: !named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8}
6 !named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8}
77
88 !0 = !DIFile(filename: "scope.h", directory: "/path/to/dir")
99 !1 = distinct !{}
1616 file: !2, line: 7, type: !3, isLocal: true,
1717 isDefinition: false, align: 32)
1818
19 ; CHECK: !6 = !DIGlobalVariable(name: "foo", scope: !0, isLocal: false, isDefinition: true, expr: !7)
20 ; CHECK: !7 = !DIExpression(DW_OP_constu, 42, DW_OP_stack_value)
21 !6 = !DIGlobalVariable(name: "foo", scope: !0, expr: !DIExpression(DW_OP_constu, 42, DW_OP_stack_value))
19 !6 = !DICompositeType(tag: DW_TAG_structure_type, name: "Class", size: 8, align: 8)
20 !7 = !DIDerivedType(tag: DW_TAG_member, name: "mem", flags: DIFlagStaticMember, scope: !6, baseType: !3)
2221
23 !7 = !DICompositeType(tag: DW_TAG_structure_type, name: "Class", size: 8, align: 8)
24 !8 = !DIDerivedType(tag: DW_TAG_member, name: "mem", flags: DIFlagStaticMember, scope: !7, baseType: !3)
25
26 ; CHECK: !10 = !DIGlobalVariable(name: "mem", scope: !0, isLocal: false, isDefinition: true, declaration: !9)
27 !9 = !DIGlobalVariable(name: "mem", scope: !0, declaration: !8)
22 ; CHECK: !8 = !DIGlobalVariable(name: "mem", scope: !0, isLocal: false, isDefinition: true, declaration: !7)
23 !8 = !DIGlobalVariable(name: "mem", scope: !0, declaration: !7)
0 ; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | FileCheck %s
1 ; RUN: verify-uselistorder %s
2
3 @foo = global i32 0
4
5 ; CHECK: !named = !{!0, !1, !2, !3, !4, !5, !6, !7}
6 !named = !{!0, !1, !2, !3, !4, !5, !6, !7}
7
8 !0 = !DIFile(filename: "scope.h", directory: "/path/to/dir")
9 !1 = distinct !{}
10 !2 = !DIFile(filename: "path/to/file", directory: "/path/to/dir")
11 !3 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
12 !4 = distinct !{}
13
14 ; CHECK: !5 = !DIGlobalVariable(name: "foo", linkageName: "foo", scope: !0, file: !2, line: 7, type: !3, isLocal: true, isDefinition: false, align: 32)
15 !5 = !DIGlobalVariable(name: "foo", linkageName: "foo", scope: !0,
16 file: !2, line: 7, type: !3, isLocal: true,
17 isDefinition: false, align: 32)
18
19 ; CHECK: !6 = !DIGlobalVariableExpression(var: !5, expr: !7)
20 !6 = !DIGlobalVariableExpression(var: !5, expr: !7)
21 ; CHECK: !7 = !DIExpression(DW_OP_constu, 42, DW_OP_stack_value)
22 !7 = !DIExpression(DW_OP_constu, 42, DW_OP_stack_value)
0 ; RUN: llvm-dis -o - %s.bc | FileCheck %s
1
2 ; CHECK: @g = common global i32 0, align 4, !dbg ![[G:[0-9]+]]
3 ; CHECK: ![[G]] = {{.*}}!DIGlobalVariableExpression(var: ![[GVAR:[0-9]+]], expr: ![[GEXPR:[0-9]+]])
4 ; CHECK: ![[GVAR]] = distinct !DIGlobalVariable(name: "g",
5 ; CHECK: !DIGlobalVariableExpression(var: ![[CVAR:[0-9]+]], expr: ![[CEXPR:[0-9]+]])
6 ; CHECK: ![[CVAR]] = distinct !DIGlobalVariable(name: "c",
7 ; CHECK: ![[CEXPR]] = !DIExpression(DW_OP_constu, 23, DW_OP_stack_value)
8 ; CHECK: ![[GEXPR]] = !DIExpression(DW_OP_plus, 1)
9 @g = common global i32 0, align 4, !dbg !0
10
11 !llvm.dbg.cu = !{!1}
12 !llvm.module.flags = !{!6, !7, !8}
13 !llvm.ident = !{!9}
14
15 !0 = distinct !DIGlobalVariable(name: "g", scope: !1, file: !2, line: 1, type: !5, isLocal: false, isDefinition: true, expr: !DIExpression(DW_OP_plus, 1))
16 !1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, producer: "clang version 4.0.0 (trunk 286129) (llvm/trunk 286128)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !3, globals: !4)
17 !2 = !DIFile(filename: "a.c", directory: "/")
18 !3 = !{}
19 !4 = !{!0, !10}
20 !5 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
21 !6 = !{i32 2, !"Dwarf Version", i32 4}
22 !7 = !{i32 2, !"Debug Info Version", i32 3}
23 !8 = !{i32 1, !"PIC Level", i32 2}
24 !9 = !{!"clang version 4.0.0 (trunk 286129) (llvm/trunk 286128)"}
25 !10 = distinct !DIGlobalVariable(name: "c", scope: !1, file: !2, line: 1, type: !5, isLocal: false, isDefinition: true, expr: !DIExpression(DW_OP_constu, 23, DW_OP_stack_value))
0 ; RUN: llvm-dis -o - %s.bc | FileCheck %s
11
2 ; CHECK: !0 = distinct !DIGlobalVariable(name: "a", scope: null, isLocal: false, isDefinition: true, expr: !1)
3 ; CHECK: !1 = !DIExpression(DW_OP_constu, 42, DW_OP_stack_value)
2 !llvm.dbg.cu = !{!0}
3 !llvm.module.flags = !{!7, !8}
44
5 !named = !{!0}
5 ; CHECK: !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.8.1", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, globals: !3)
6 !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.8.1", isOptimized: true, runtimeVersion: 0, emissionKind: 1, enums: !2, globals: !3)
7 !1 = !DIFile(filename: "g.c", directory: "/")
8 !2 = !{}
9 ; CHECK: !3 = !{!4}
10 !3 = !{!4}
11 ; CHECK: !4 = {{.*}}!DIGlobalVariableExpression(var: !5, expr: !8)
12 ; CHECK: !5 = !DIGlobalVariable(name: "c", scope: !0, file: !1, line: 1, type: !6, isLocal: false, isDefinition: true)
13 ; CHECK: !8 = !DIExpression(DW_OP_constu, 42, DW_OP_stack_value)
14 !4 = !DIGlobalVariable(name: "c", scope: !0, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true, variable: i32 42)
15 !5 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !6)
16 !6 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
17 !7 = !{i32 2, !"Dwarf Version", i32 2}
18 !8 = !{i32 2, !"Debug Info Version", i32 3}
619
7 !0 = distinct !DIGlobalVariable(name: "a", variable: i32 42)
1717 ; CHECK-NEXT: !7 = !DILocalVariable(name: "V1", scope: !6, type: !2)
1818 ; CHECK-NEXT: !8 = !DIObjCProperty(name: "P1", type: !1)
1919 ; CHECK-NEXT: !9 = !DITemplateTypeParameter(type: !1)
20 ; CHECK-NEXT: !10 = !DIGlobalVariable(name: "G",{{.*}} type: !1,
21 ; CHECK-NEXT: !11 = !DITemplateValueParameter(type: !1, value: i32* @G1)
22 ; CHECK-NEXT: !12 = !DIImportedEntity(tag: DW_TAG_imported_module, name: "T2", scope: !0, entity: !1)
23 ; CHECK-NEXT: !13 = !DICompositeType(tag: DW_TAG_structure_type, name: "T3", file: !0, elements: !14, identifier: "T3")
24 ; CHECK-NEXT: !14 = !{!15}
25 ; CHECK-NEXT: !15 = !DISubprogram(scope: !13,
26 ; CHECK-NEXT: !16 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type,{{.*}} extraData: !13)
20 ; CHECK-NEXT: !10 = distinct !DIGlobalVariableExpression(var: !11)
21 ; CHECK-NEXT: !11 = !DIGlobalVariable(name: "G",{{.*}} type: !1,
22 ; CHECK-NEXT: !12 = !DITemplateValueParameter(type: !1, value: i32* @G1)
23 ; CHECK-NEXT: !13 = !DIImportedEntity(tag: DW_TAG_imported_module, name: "T2", scope: !0, entity: !1)
24 ; CHECK-NEXT: !14 = !DICompositeType(tag: DW_TAG_structure_type, name: "T3", file: !0, elements: !15, identifier: "T3")
25 ; CHECK-NEXT: !15 = !{!16}
26 ; CHECK-NEXT: !16 = !DISubprogram(scope: !14,
27 ; CHECK-NEXT: !17 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type,{{.*}} extraData: !14)
2728
2829 !0 = !DIFile(filename: "path/to/file", directory: "/path/to/dir")
2930 !1 = !DICompositeType(tag: DW_TAG_structure_type, name: "T1", file: !0, identifier: "T1")
1919
2020 !llvm.dbg.cu = !{!0}
2121
22 !0 = !DIGlobalVariable(name: "vsplive", line: 617, isLocal: true, isDefinition: true, scope: !1, file: !2, type: !6)
22 !0 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "vsplive", line: 617, isLocal: true, isDefinition: true, scope: !1, file: !2, type: !6))
2323 !1 = distinct !DISubprogram(name: "drt_vsprintf", line: 616, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !3, file: !20, scope: !2, type: !4)
2424 !2 = !DIFile(filename: "print.i", directory: "/Volumes/Ebi/echeng/radars/r9146594")
2525 !3 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.0 (http://llvm.org/git/clang.git git:/git/puzzlebox/clang.git/ c4d1aea01c4444eb81bdbf391f1be309127c3cf1)", isOptimized: true, emissionKind: FullDebug, file: !20, enums: !21, retainedTypes: !21, globals: !{!0})
5959 !11 = distinct !DILexicalBlock(line: 5, column: 1, file: !26, scope: !1)
6060 !12 = !DILocalVariable(name: "c", line: 7, scope: !11, file: !2, type: !13)
6161 !13 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
62 !14 = !DIGlobalVariable(name: "length", linkageName: "length", line: 1, isLocal: false, isDefinition: true, scope: !2, file: !2, type: !13)
62 !14 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "length", linkageName: "length", line: 1, isLocal: false, isDefinition: true, scope: !2, file: !2, type: !13))
6363 !15 = !DILocation(line: 4, column: 24, scope: !1)
6464 !16 = !DILocation(line: 4, column: 43, scope: !1)
6565 !17 = !DILocation(line: 9, column: 2, scope: !11)
9090 !10 = !DILocalVariable(name: "a", line: 4, arg: 1, scope: !0, file: !1, type: !5)
9191 !11 = !DILocalVariable(name: "b", line: 4, scope: !12, file: !1, type: !5)
9292 !12 = distinct !DILexicalBlock(line: 4, column: 0, file: !47, scope: !0)
93 !13 = !DIGlobalVariable(name: "x1", line: 3, isLocal: true, isDefinition: true, scope: !1, file: !1, type: !5)
94 !14 = !DIGlobalVariable(name: "x2", line: 6, isLocal: true, isDefinition: true, scope: !1, file: !1, type: !5)
95 !15 = !DIGlobalVariable(name: "x3", line: 9, isLocal: true, isDefinition: true, scope: !1, file: !1, type: !5)
96 !16 = !DIGlobalVariable(name: "x4", line: 12, isLocal: true, isDefinition: true, scope: !1, file: !1, type: !5)
97 !17 = !DIGlobalVariable(name: "x5", line: 15, isLocal: false, isDefinition: true, scope: !1, file: !1, type: !5)
93 !13 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x1", line: 3, isLocal: true, isDefinition: true, scope: !1, file: !1, type: !5))
94 !14 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x2", line: 6, isLocal: true, isDefinition: true, scope: !1, file: !1, type: !5))
95 !15 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x3", line: 9, isLocal: true, isDefinition: true, scope: !1, file: !1, type: !5))
96 !16 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x4", line: 12, isLocal: true, isDefinition: true, scope: !1, file: !1, type: !5))
97 !17 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x5", line: 15, isLocal: false, isDefinition: true, scope: !1, file: !1, type: !5))
9898 !18 = !DILocalVariable(name: "a", line: 7, arg: 1, scope: !6, file: !1, type: !5)
9999 !19 = !DILocalVariable(name: "b", line: 7, scope: !20, file: !1, type: !5)
100100 !20 = distinct !DILexicalBlock(line: 7, column: 0, file: !47, scope: !6)
9494 !19 = !DILocalVariable(name: "a", line: 14, arg: 1, scope: !8, file: !2, type: !5)
9595 !20 = !DILocalVariable(name: "b", line: 14, scope: !21, file: !2, type: !5)
9696 !21 = distinct !DILexicalBlock(line: 14, column: 19, file: !47, scope: !8)
97 !25 = !DIGlobalVariable(name: "x1", line: 4, isLocal: true, isDefinition: true, scope: !0, file: !2, type: !5)
98 !26 = !DIGlobalVariable(name: "x2", line: 7, isLocal: true, isDefinition: true, scope: !0, file: !2, type: !5)
97 !25 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x1", line: 4, isLocal: true, isDefinition: true, scope: !0, file: !2, type: !5))
98 !26 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x2", line: 7, isLocal: true, isDefinition: true, scope: !0, file: !2, type: !5))
9999 !27 = !DILocalVariable(name: "a", line: 17, arg: 1, scope: !9, file: !2, type: !5)
100100 !28 = !DILocalVariable(name: "b", line: 17, scope: !29, file: !2, type: !5)
101101 !29 = distinct !DILexicalBlock(line: 17, column: 19, file: !47, scope: !9)
9393 !13 = distinct !DILexicalBlock(line: 12, column: 0, file: !1, scope: !4)
9494 !14 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 32, align: 32, baseType: !8)
9595 !15 = !{!16, !18, !19, !20}
96 !16 = !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !17)
96 !16 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !17))
9797 !17 = !DIBasicType(tag: DW_TAG_base_type, name: "long long int", size: 64, align: 32, encoding: DW_ATE_signed)
98 !18 = !DIGlobalVariable(name: "b", line: 2, isLocal: false, isDefinition: true, scope: null, file: !5, type: !8)
99 !19 = !DIGlobalVariable(name: "c", line: 3, isLocal: false, isDefinition: true, scope: null, file: !5, type: !8)
100 !20 = !DIGlobalVariable(name: "d", line: 4, isLocal: false, isDefinition: true, scope: null, file: !5, type: !8)
98 !18 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "b", line: 2, isLocal: false, isDefinition: true, scope: null, file: !5, type: !8))
99 !19 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c", line: 3, isLocal: false, isDefinition: true, scope: null, file: !5, type: !8))
100 !20 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "d", line: 4, isLocal: false, isDefinition: true, scope: null, file: !5, type: !8))
101101 !21 = !DILocation(line: 10, scope: !22)
102102 !22 = distinct !DILexicalBlock(line: 10, column: 0, file: !1, scope: !4)
103103 !26 = !DILocation(line: 12, scope: !13)
2525 !llvm.module.flags = !{!12, !13}
2626 !llvm.ident = !{!14}
2727
28 !0 = distinct !DIGlobalVariable(name: "myvar_c", scope: !1, file: !2, line: 3, type: !5, isLocal: true, isDefinition: true)
28 !0 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "myvar_c", scope: !1, file: !2, line: 3, type: !5, isLocal: true, isDefinition: true))
2929 !1 = distinct !DISubprogram(name: "testprog", scope: !2, file: !2, line: 1, type: !3, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: true, unit: !6, variables: !9)
3030 !2 = !DIFile(filename: "testprog.c", directory: "/w/llvm/bld")
3131 !3 = !DISubroutineType(types: !4)
4141 !3 = !{!4}
4242 ; Find list of global variables and make sure it's the one used by DICompileUnit
4343 ; CHECK: [[GLOBALSNODE]] = !{[[GVNODE:![0-9]+]]}
44 !4 = distinct !DIGlobalVariable(name: "static_var", scope: !0, file: !1, line: 2, type: !5, isLocal: false,
45 isDefinition: true)
44 !4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "static_var", scope: !0, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true))
4645 ; Debug info must also be updated to reflect new address space.
47 ; CHECK: [[GVNODE]] = distinct !DIGlobalVariable(name: "static_var"
46 ; CHECK: [[GVNODE]] = !DIGlobalVariableExpression(var: [[GVVAR:.*]])
47 ; CHECK: [[GVVAR]] = !DIGlobalVariable(name: "static_var"
4848 ; CHECK-SAME: scope: [[CUNODE]]
4949 ; CHECK-SAME: type: [[TYPENODE:![0-9]+]]
5050 !5 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
351351 !296 = !DILocalVariable(name: "j", line: 907, scope: !293, file: !5, type: !8)
352352 !297 = !DILocalVariable(name: "k", line: 907, scope: !293, file: !5, type: !8)
353353 !298 = !{!299, !304, !305, !309, !310, !311, !312, !313, !314, !315, !316, !317, !318, !319, !320, !321, !322, !323, !324, !325, !326, !327, !328, !329, !330, !331, !332, !333, !334, !335, !336, !337, !338, !339, !340, !341, !342, !343, !347, !350, !351, !352, !353, !354, !355, !356, !360, !361, !362, !363, !364, !365, !366, !367, !368, !369, !370, !371, !372, !373, !374, !375, !376, !377, !378, !379, !380, !381, !382, !383, !384, !385, !386, !387, !388, !389, !390, !391, !392, !393, !394, !395, !396, !397, !398, !399, !400, !401, !402, !403, !404, !405, !406, !407, !408, !409, !410, !411, !412, !413, !414, !415, !416, !417, !418, !419, !422, !426, !427, !430, !431, !434, !435, !436, !437}
354 !299 = !DIGlobalVariable(name: "grid_points", line: 28, isLocal: true, isDefinition: true, scope: null, file: !300, type: !302)
354 !299 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "grid_points", line: 28, isLocal: true, isDefinition: true, scope: null, file: !300, type: !302))
355355 !300 = !DIFile(filename: "./header.h", directory: "/home/hfinkel/src/NPB2.3-omp-C/BT")
356356 !301 = !{!"./header.h", !"/home/hfinkel/src/NPB2.3-omp-C/BT"}
357357 !302 = !DICompositeType(tag: DW_TAG_array_type, size: 96, align: 32, baseType: !8, elements: !303)
358358 !303 = !{!178}
359 !304 = !DIGlobalVariable(name: "dt", line: 35, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
360 !305 = !DIGlobalVariable(name: "rhs", line: 68, isLocal: true, isDefinition: true, scope: null, file: !300, type: !306)
359 !304 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dt", line: 35, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
360 !305 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "rhs", line: 68, isLocal: true, isDefinition: true, scope: null, file: !300, type: !306))
361361 !306 = !DICompositeType(tag: DW_TAG_array_type, size: 1385839040, align: 64, baseType: !20, elements: !307)
362362 !307 = !{!308, !308, !308, !93}
363363 !308 = !DISubrange(count: 163)
364 !309 = !DIGlobalVariable(name: "zzcon5", line: 42, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
365 !310 = !DIGlobalVariable(name: "zzcon4", line: 42, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
366 !311 = !DIGlobalVariable(name: "zzcon3", line: 42, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
367 !312 = !DIGlobalVariable(name: "dz5tz1", line: 43, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
368 !313 = !DIGlobalVariable(name: "dz4tz1", line: 43, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
369 !314 = !DIGlobalVariable(name: "dz3tz1", line: 43, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
370 !315 = !DIGlobalVariable(name: "zzcon2", line: 42, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
371 !316 = !DIGlobalVariable(name: "dz2tz1", line: 43, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
372 !317 = !DIGlobalVariable(name: "tz2", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
373 !318 = !DIGlobalVariable(name: "dz1tz1", line: 43, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
374 !319 = !DIGlobalVariable(name: "yycon5", line: 40, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
375 !320 = !DIGlobalVariable(name: "yycon4", line: 40, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
376 !321 = !DIGlobalVariable(name: "yycon3", line: 40, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
377 !322 = !DIGlobalVariable(name: "dy5ty1", line: 41, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
378 !323 = !DIGlobalVariable(name: "dy4ty1", line: 41, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
379 !324 = !DIGlobalVariable(name: "dy3ty1", line: 41, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
380 !325 = !DIGlobalVariable(name: "yycon2", line: 40, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
381 !326 = !DIGlobalVariable(name: "dy2ty1", line: 41, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
382 !327 = !DIGlobalVariable(name: "ty2", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
383 !328 = !DIGlobalVariable(name: "dy1ty1", line: 41, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
384 !329 = !DIGlobalVariable(name: "dssp", line: 35, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
385 !330 = !DIGlobalVariable(name: "c1", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
386 !331 = !DIGlobalVariable(name: "xxcon5", line: 38, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
387 !332 = !DIGlobalVariable(name: "xxcon4", line: 38, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
388 !333 = !DIGlobalVariable(name: "xxcon3", line: 38, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
389 !334 = !DIGlobalVariable(name: "dx5tx1", line: 39, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
390 !335 = !DIGlobalVariable(name: "dx4tx1", line: 39, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
391 !336 = !DIGlobalVariable(name: "dx3tx1", line: 39, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
392 !337 = !DIGlobalVariable(name: "c2", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
393 !338 = !DIGlobalVariable(name: "con43", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
394 !339 = !DIGlobalVariable(name: "xxcon2", line: 38, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
395 !340 = !DIGlobalVariable(name: "dx2tx1", line: 39, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
396 !341 = !DIGlobalVariable(name: "tx2", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
397 !342 = !DIGlobalVariable(name: "dx1tx1", line: 39, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
398 !343 = !DIGlobalVariable(name: "forcing", line: 66, isLocal: true, isDefinition: true, scope: null, file: !300, type: !344)
364 !309 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "zzcon5", line: 42, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
365 !310 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "zzcon4", line: 42, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
366 !311 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "zzcon3", line: 42, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
367 !312 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dz5tz1", line: 43, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
368 !313 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dz4tz1", line: 43, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
369 !314 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dz3tz1", line: 43, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
370 !315 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "zzcon2", line: 42, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
371 !316 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dz2tz1", line: 43, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
372 !317 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "tz2", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
373 !318 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dz1tz1", line: 43, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
374 !319 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "yycon5", line: 40, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
375 !320 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "yycon4", line: 40, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
376 !321 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "yycon3", line: 40, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
377 !322 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dy5ty1", line: 41, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
378 !323 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dy4ty1", line: 41, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
379 !324 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dy3ty1", line: 41, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
380 !325 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "yycon2", line: 40, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
381 !326 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dy2ty1", line: 41, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
382 !327 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ty2", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
383 !328 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dy1ty1", line: 41, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
384 !329 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dssp", line: 35, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
385 !330 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c1", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
386 !331 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "xxcon5", line: 38, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
387 !332 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "xxcon4", line: 38, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
388 !333 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "xxcon3", line: 38, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
389 !334 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dx5tx1", line: 39, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
390 !335 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dx4tx1", line: 39, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
391 !336 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dx3tx1", line: 39, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
392 !337 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c2", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
393 !338 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "con43", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
394 !339 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "xxcon2", line: 38, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
395 !340 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dx2tx1", line: 39, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
396 !341 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "tx2", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
397 !342 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dx1tx1", line: 39, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
398 !343 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "forcing", line: 66, isLocal: true, isDefinition: true, scope: null, file: !300, type: !344))
399399 !344 = !DICompositeType(tag: DW_TAG_array_type, size: 1663006848, align: 64, baseType: !20, elements: !345)
400400 !345 = !{!308, !308, !308, !346}
401401 !346 = !DISubrange(count: 6)
402 !347 = !DIGlobalVariable(name: "qs", line: 63, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348)
402 !347 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "qs", line: 63, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348))
403403 !348 = !DICompositeType(tag: DW_TAG_array_type, size: 277167808, align: 64, baseType: !20, elements: !349)
404404 !349 = !{!308, !308, !308}
405 !350 = !DIGlobalVariable(name: "square", line: 65, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348)
406 !351 = !DIGlobalVariable(name: "ws", line: 62, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348)
407 !352 = !DIGlobalVariable(name: "vs", line: 61, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348)
408 !353 = !DIGlobalVariable(name: "us", line: 60, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348)
409 !354 = !DIGlobalVariable(name: "rho_i", line: 64, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348)
410 !355 = !DIGlobalVariable(name: "u", line: 67, isLocal: true, isDefinition: true, scope: null, file: !300, type: !306)
411 !356 = !DIGlobalVariable(name: "ce", line: 36, isLocal: true, isDefinition: true, scope: null, file: !300, type: !357)
405 !350 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "square", line: 65, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348))
406 !351 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ws", line: 62, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348))
407 !352 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "vs", line: 61, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348))
408 !353 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "us", line: 60, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348))
409 !354 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "rho_i", line: 64, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348))
410 !355 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "u", line: 67, isLocal: true, isDefinition: true, scope: null, file: !300, type: !306))
411 !356 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ce", line: 36, isLocal: true, isDefinition: true, scope: null, file: !300, type: !357))
412412 !357 = !DICompositeType(tag: DW_TAG_array_type, size: 4160, align: 64, baseType: !20, elements: !358)
413413 !358 = !{!93, !359}
414414 !359 = !DISubrange(count: 13)
415 !360 = !DIGlobalVariable(name: "dnzm1", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
416 !361 = !DIGlobalVariable(name: "dnym1", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
417 !362 = !DIGlobalVariable(name: "dnxm1", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
418 !363 = !DIGlobalVariable(name: "zzcon1", line: 42, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
419 !364 = !DIGlobalVariable(name: "yycon1", line: 40, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
420 !365 = !DIGlobalVariable(name: "xxcon1", line: 38, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
421 !366 = !DIGlobalVariable(name: "con16", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
422 !367 = !DIGlobalVariable(name: "c2iv", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
423 !368 = !DIGlobalVariable(name: "c3c4tz3", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
424 !369 = !DIGlobalVariable(name: "c3c4ty3", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
425 !370 = !DIGlobalVariable(name: "c3c4tx3", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
426 !371 = !DIGlobalVariable(name: "comz6", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
427 !372 = !DIGlobalVariable(name: "comz5", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
428 !373 = !DIGlobalVariable(name: "comz4", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
429 !374 = !DIGlobalVariable(name: "comz1", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
430 !375 = !DIGlobalVariable(name: "dtdssp", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
431 !376 = !DIGlobalVariable(name: "c2dttz1", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
432 !377 = !DIGlobalVariable(name: "c2dtty1", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
433 !378 = !DIGlobalVariable(name: "c2dttx1", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
434 !379 = !DIGlobalVariable(name: "dttz2", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
435 !380 = !DIGlobalVariable(name: "dttz1", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
436 !381 = !DIGlobalVariable(name: "dtty2", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
437 !382 = !DIGlobalVariable(name: "dtty1", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
438 !383 = !DIGlobalVariable(name: "dttx2", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
439 !384 = !DIGlobalVariable(name: "dttx1", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
440 !385 = !DIGlobalVariable(name: "c5dssp", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
441 !386 = !DIGlobalVariable(name: "c4dssp", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
442 !387 = !DIGlobalVariable(name: "dzmax", line: 37, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
443 !388 = !DIGlobalVariable(name: "dymax", line: 37, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
444 !389 = !DIGlobalVariable(name: "dxmax", line: 37, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
445 !390 = !DIGlobalVariable(name: "dz5", line: 34, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
446 !391 = !DIGlobalVariable(name: "dz4", line: 34, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
447 !392 = !DIGlobalVariable(name: "dz3", line: 34, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
448 !393 = !DIGlobalVariable(name: "dz2", line: 34, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
449 !394 = !DIGlobalVariable(name: "dz1", line: 34, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
450 !395 = !DIGlobalVariable(name: "dy5", line: 33, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
451 !396 = !DIGlobalVariable(name: "dy4", line: 33, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
452 !397 = !DIGlobalVariable(name: "dy3", line: 33, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
453 !398 = !DIGlobalVariable(name: "dy2", line: 33, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
454 !399 = !DIGlobalVariable(name: "dy1", line: 33, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
455 !400 = !DIGlobalVariable(name: "dx5", line: 32, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
456 !401 = !DIGlobalVariable(name: "dx4", line: 32, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
457 !402 = !DIGlobalVariable(name: "dx3", line: 32, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
458 !403 = !DIGlobalVariable(name: "dx2", line: 32, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
459 !404 = !DIGlobalVariable(name: "dx1", line: 32, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
460 !405 = !DIGlobalVariable(name: "tz3", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
461 !406 = !DIGlobalVariable(name: "tz1", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
462 !407 = !DIGlobalVariable(name: "ty3", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
463 !408 = !DIGlobalVariable(name: "ty1", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
464 !409 = !DIGlobalVariable(name: "tx3", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
465 !410 = !DIGlobalVariable(name: "tx1", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
466 !411 = !DIGlobalVariable(name: "conz1", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
467 !412 = !DIGlobalVariable(name: "c1345", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
468 !413 = !DIGlobalVariable(name: "c3c4", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
469 !414 = !DIGlobalVariable(name: "c1c5", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
470 !415 = !DIGlobalVariable(name: "c1c2", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
471 !416 = !DIGlobalVariable(name: "c5", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
472 !417 = !DIGlobalVariable(name: "c4", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
473 !418 = !DIGlobalVariable(name: "c3", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
474 !419 = !DIGlobalVariable(name: "lhs", line: 69, isLocal: true, isDefinition: true, scope: null, file: !300, type: !420)
415 !360 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dnzm1", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
416 !361 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dnym1", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
417 !362 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dnxm1", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
418 !363 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "zzcon1", line: 42, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
419 !364 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "yycon1", line: 40, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
420 !365 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "xxcon1", line: 38, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
421 !366 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "con16", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
422 !367 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c2iv", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
423 !368 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c3c4tz3", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
424 !369 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c3c4ty3", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
425 !370 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c3c4tx3", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
426 !371 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "comz6", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
427 !372 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "comz5", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
428 !373 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "comz4", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
429 !374 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "comz1", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
430 !375 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dtdssp", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
431 !376 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c2dttz1", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
432 !377 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c2dtty1", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
433 !378 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c2dttx1", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
434 !379 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dttz2", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
435 !380 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dttz1", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
436 !381 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dtty2", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
437 !382 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dtty1", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
438 !383 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dttx2", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
439 !384 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dttx1", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
440 !385 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c5dssp", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
441 !386 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c4dssp", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
442 !387 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dzmax", line: 37, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
443 !388 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dymax", line: 37, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
444 !389 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dxmax", line: 37, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
445 !390 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dz5", line: 34, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
446 !391 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dz4", line: 34, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
447 !392 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dz3", line: 34, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
448 !393 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dz2", line: 34, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
449 !394 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dz1", line: 34, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
450 !395 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dy5", line: 33, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
451 !396 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dy4", line: 33, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
452 !397 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dy3", line: 33, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
453 !398 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dy2", line: 33, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
454 !399 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dy1", line: 33, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
455 !400 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dx5", line: 32, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
456 !401 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dx4", line: 32, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
457 !402 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dx3", line: 32, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
458 !403 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dx2", line: 32, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
459 !404 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dx1", line: 32, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
460 !405 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "tz3", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
461 !406 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "tz1", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
462 !407 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ty3", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
463 !408 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ty1", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
464 !409 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "tx3", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
465 !410 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "tx1", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
466 !411 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "conz1", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
467 !412 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c1345", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
468 !413 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c3c4", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
469 !414 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c1c5", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
470 !415 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c1c2", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
471 !416 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c5", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
472 !417 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c4", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
473 !418 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c3", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
474 !419 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "lhs", line: 69, isLocal: true, isDefinition: true, scope: null, file: !300, type: !420))
475475 !420 = !DICompositeType(tag: DW_TAG_array_type, size: 20787585600, align: 64, baseType: !20, elements: !421)
476476 !421 = !{!308, !308, !308, !178, !93, !93}
477 !422 = !DIGlobalVariable(name: "q", line: 73, isLocal: true, isDefinition: true, scope: null, file: !300, type: !423)
477 !422 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "q", line: 73, isLocal: true, isDefinition: true, scope: null, file: !300, type: !423))
478478 !423 = !DICompositeType(tag: DW_TAG_array_type, size: 10368, align: 64, baseType: !20, elements: !424)
479479 !424 = !{!425}
480480 !425 = !DISubrange(count: 162)
481 !426 = !DIGlobalVariable(name: "cuf", line: 72, isLocal: true, isDefinition: true, scope: null, file: !300, type: !423)
482 !427 = !DIGlobalVariable(name: "buf", line: 75, isLocal: true, isDefinition: true, scope: null, file: !300, type: !428)
481 !426 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "cuf", line: 72, isLocal: true, isDefinition: true, scope: null, file: !300, type: !423))
482 !427 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "buf", line: 75, isLocal: true, isDefinition: true, scope: null, file: !300, type: !428))
483483 !428 = !DICompositeType(tag: DW_TAG_array_type, size: 51840, align: 64, baseType: !20, elements: !429)
484484 !429 = !{!425, !93}
485 !430 = !DIGlobalVariable(name: "ue", line: 74, isLocal: true, isDefinition: true, scope: null, file: !300, type: !428)
486 !431 = !DIGlobalVariable(name: "njac", line: 86, isLocal: true, isDefinition: true, scope: null, file: !300, type: !432)
485 !430 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ue", line: 74, isLocal: true, isDefinition: true, scope: null, file: !300, type: !428))
486 !431 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "njac", line: 86, isLocal: true, isDefinition: true, scope: null, file: !300, type: !432))
487487 !432 = !DICompositeType(tag: DW_TAG_array_type, size: 6886684800, align: 64, baseType: !20, elements: !433)
488488 !433 = !{!308, !308, !425, !93, !93}
489 !434 = !DIGlobalVariable(name: "fjac", line: 84, isLocal: true, isDefinition: true, scope: null, file: !300, type: !432)
490 !435 = !DIGlobalVariable(name: "tmp3", line: 88, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
491 !436 = !DIGlobalVariable(name: "tmp2", line: 88, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
492 !437 = !DIGlobalVariable(name: "tmp1", line: 88, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
489 !434 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "fjac", line: 84, isLocal: true, isDefinition: true, scope: null, file: !300, type: !432))
490 !435 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "tmp3", line: 88, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
491 !436 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "tmp2", line: 88, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
492 !437 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "tmp1", line: 88, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
493493 !438 = !{i32 2, !"Dwarf Version", i32 4}
494494 !439 = !DILocation(line: 1898, scope: !440)
495495 !440 = distinct !DILexicalBlock(line: 1898, column: 0, file: !1, scope: !114)
7878 !21 = !{!22}
7979 !22 = !DILocalVariable(name: "power", arg: 1, scope: !18, file: !1, line: 1, type: !9)
8080 !23 = !{!24}
81 !24 = !DIGlobalVariable(name: "powers", scope: !18, file: !1, line: 3, type: !25, isLocal: true, isDefinition: true)
81 !24 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "powers", scope: !18, file: !1, line: 3, type: !25, isLocal: true, isDefinition: true))
8282 !25 = !DICompositeType(tag: DW_TAG_array_type, baseType: !26, size: 1472, align: 64, elements: !27)
8383 !26 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !4)
8484 !27 = !{!28}
4444 !1 = !DIFile(filename: "crash.c", directory: "wasm/tests")
4545 !2 = !{}
4646 !3 = !{!4}
47 !4 = distinct !DIGlobalVariable(name: "key", scope: !0, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true)
47 !4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "key", scope: !0, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true))
4848 !5 = !DICompositeType(tag: DW_TAG_array_type, baseType: !6, size: 120, align: 8, elements: !9)
4949 !6 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint8_t", file: !7, line: 185, baseType: !8)
5050 !7 = !DIFile(filename: "wasm/emscripten/system/include/libc/bits/alltypes.h", directory: "wasm/tests")
2323 !llvm.dbg.cu = !{!2}
2424 !llvm.module.flags = !{!38}
2525
26 !0 = !DIGlobalVariable(name: "ret", line: 7, isLocal: false, isDefinition: true, scope: !1, file: !1, type: !3)
26 !0 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ret", line: 7, isLocal: false, isDefinition: true, scope: !1, file: !1, type: !3))
2727 !1 = !DIFile(filename: "foo.c", directory: "/tmp/")
2828 !2 = distinct !DICompileUnit(language: DW_LANG_C89, producer: "4.2.1 (Based on Apple Inc. build 5658) (LLVM build)", isOptimized: true, emissionKind: FullDebug, file: !36, enums: !37, retainedTypes: !37, globals: !31, imports: !37)
2929 !3 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
115115 !llvm.module.flags = !{!7, !8, !9}
116116 !llvm.ident = !{!10}
117117
118 !0 = distinct !DIGlobalVariable(name: "ld_ptr", scope: !1, file: !2, line: 17, type: !5, isLocal: false, isDefinition: true)
118 !0 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ld_ptr", scope: !1, file: !2, line: 17, type: !5, isLocal: false, isDefinition: true))
119119 !1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, producer: "clang version 4.0.0 (trunk 281495)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !3, globals: !4)
120120 !2 = !DIFile(filename: "fp128-g.c", directory: "/disk5/chh/Debug/ld.loop")
121121 !3 = !{}
6363 !19 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
6464 !20 = !DILocalVariable(name: "value", line: 16, scope: !4, file: !6, type: !14)
6565 !21 = !{!22, !23}
66 !22 = !DIGlobalVariable(name: "g1", line: 5, isLocal: false, isDefinition: true, scope: null, file: !6, type: !14)
67 !23 = !DIGlobalVariable(name: "g2", line: 6, isLocal: false, isDefinition: true, scope: null, file: !6, type: !19)
66 !22 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "g1", line: 5, isLocal: false, isDefinition: true, scope: null, file: !6, type: !14))
67 !23 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "g2", line: 6, isLocal: false, isDefinition: true, scope: null, file: !6, type: !19))
6868 !24 = !{i32 2, !"Dwarf Version", i32 2}
6969 !25 = !{i32 2, !"Debug Info Version", i32 3}
8181 !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}
84 !21 = !DIGlobalVariable(name: "argc", line: 1, isLocal: false, isDefinition: true, scope: null, file: !14, type: !11)
84 !21 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "argc", line: 1, isLocal: false, isDefinition: true, scope: null, file: !14, type: !11))
8585 !22 = !{i32 2, !"Dwarf Version", i32 4}
8686 !23 = !{i32 2, !"Debug Info Version", i32 3}
8787 !25 = !DILocation(line: 8, column: 3, scope: !13)
2121 !7 = !{!8}
2222 !8 = !DIBasicType(tag: DW_TAG_base_type, size: 32, align: 32, encoding: DW_ATE_signed)
2323 !9 = !{!10}
24 !10 = !DIGlobalVariable(name: "i", linkageName: "_ZL1i", line: 1, isLocal: true, isDefinition: true, scope: null, file: !1, type: !8)
24 !10 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "i", linkageName: "_ZL1i", line: 1, isLocal: true, isDefinition: true, scope: null, file: !1, type: !8))
2525 !11 = !{i32 2, !"Dwarf Version", i32 3}
2626 !13 = !{i32 1, !"Debug Info Version", i32 3}
1212 !1 = !DIFile(filename: "-", directory: "/work/validation")
1313 !2 = !{}
1414 !3 = !{!4}
15 !4 = !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !7)
15 !4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !7))
1616 !5 = !DIFile(filename: "", directory: "/work/validation")
1717 !6 = !{!"", !"/work/validation"}
1818 !7 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
5757 !1 = !DIFile(filename: "bitfields.c", directory: "/")
5858 !2 = !{}
5959 !3 = !{!4}
60 !4 = !DIGlobalVariable(name: "b", scope: !0, file: !5, line: 8, type: !6, isLocal: false, isDefinition: true)
60 !4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "b", scope: !0, file: !5, line: 8, type: !6, isLocal: false, isDefinition: true))
6161 !5 = !DIFile(filename: "bitfields.c", directory: "/")
6262 !6 = !DICompositeType(tag: DW_TAG_structure_type, name: "bitfield", file: !5, line: 1, size: 96, elements: !7)
6363 !7 = !{!8, !10, !11, !12}
199199 !38 = !DILocalVariable(name: "c", line: 19, scope: !34, file: !26, type: !4)
200200 !39 = !DILocalVariable(name: "d", line: 20, scope: !34, file: !26, type: !14)
201201 !40 = !{!41, !42}
202 !41 = !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !26, type: !20)
203 !42 = !DIGlobalVariable(name: "b", line: 7, isLocal: false, isDefinition: true, scope: null, file: !26, type: !12)
202 !41 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !26, type: !20))
203 !42 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "b", line: 7, isLocal: false, isDefinition: true, scope: null, file: !26, type: !12))
204204 !43 = !{i32 2, !"Dwarf Version", i32 2}
205205 !44 = !{i32 2, !"Debug Info Version", i32 3}
206206 !45 = !{!"clang version 3.7.0 "}
2121 !1 = !DIFile(filename: "bitfield.c", directory: "/Volumes/Data/llvm")
2222 !2 = !{}
2323 !3 = !{!4}
24 !4 = distinct !DIGlobalVariable(name: "s", scope: !0, file: !1, line: 6, type: !5, isLocal: false, isDefinition: true)
24 !4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "s", scope: !0, file: !1, line: 6, type: !5, isLocal: false, isDefinition: true))
2525 !5 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S", file: !1, line: 1, size: 32, elements: !6)
2626 !6 = !{!7, !9, !10, !11}
2727 ; CHECK: DW_TAG_member
2929 !1 = !DIFile(filename: "test.i", directory: "/")
3030 !2 = !{}
3131 !3 = !{!4}
32 !4 = !DIGlobalVariable(name: "a", scope: !0, file: !1, line: 5, type: !5, isLocal: false, isDefinition: true)
32 !4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", scope: !0, file: !1, line: 5, type: !5, isLocal: false, isDefinition: true))
3333 !5 = !DICompositeType(tag: DW_TAG_structure_type, file: !1, line: 1, size: 48, align: 8, elements: !6)
3434 !6 = !{!7, !9}
3535 !7 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !5, file: !1, line: 2, baseType: !8, size: 8, align: 8)
3838 !5 = !DISubroutineType(types: !6)
3939 !6 = !{null}
4040 !7 = !{!8, !10}
41 !8 = !DIGlobalVariable(name: "ch", scope: !0, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true)
41 !8 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ch", scope: !0, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true))
4242 !9 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_unsigned_char)
43 !10 = !DIGlobalVariable(name: "b", scope: !0, file: !1, line: 2, type: !11, isLocal: false, isDefinition: true)
43 !10 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "b", scope: !0, file: !1, line: 2, type: !11, isLocal: false, isDefinition: true))
4444 !11 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
4545 !12 = !{i32 2, !"Dwarf Version", i32 4}
4646 !13 = !{i32 2, !"Debug Info Version", i32 3}
2525 !1 = !DIFile(filename: "tls.c", directory: "/tmp")
2626 !2 = !{}
2727 !3 = !{!4}
28 !4 = !DIGlobalVariable(name: "x", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6)
28 !4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6))
2929 !5 = !DIFile(filename: "tls.c", directory: "/tmp")
3030 !6 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
3131 !7 = !{i32 2, !"Dwarf Version", i32 4}
4545 !1 = !DIFile(filename: "-", directory: "/usr/local/google/home/majnemer/llvm/src")
4646 !2 = !{}
4747 !3 = !{!4}
48 !4 = distinct !DIGlobalVariable(name: "s", scope: !0, file: !5, line: 5, type: !6, isLocal: false, isDefinition: true)
48 !4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "s", scope: !0, file: !5, line: 5, type: !6, isLocal: false, isDefinition: true))
4949 !5 = !DIFile(filename: "", directory: "/usr/local/google/home/majnemer/llvm/src")
5050 !6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S", file: !5, line: 2, size: 64, align: 32, elements: !7)
5151 !7 = !{!8, !10}
57655765 !5700 = !DIEnumerator(name: "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE5695", value: 5694)
57665766 !5701 = !DIEnumerator(name: "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE5696", value: 5695)
57675767 !5702 = !{!5703}
5768 !5703 = distinct !DIGlobalVariable(name: "x", linkageName: "\01?x@@3W4BigThing@@A", scope: !0, file: !1, line: 5698, type: !3, isLocal: false, isDefinition: true)
5768 !5703 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", linkageName: "\01?x@@3W4BigThing@@A", scope: !0, file: !1, line: 5698, type: !3, isLocal: false, isDefinition: true))
57695769 !5704 = !{i32 2, !"CodeView", i32 1}
57705770 !5705 = !{i32 2, !"Debug Info Version", i32 3}
57715771 !5706 = !{i32 1, !"PIC Level", i32 2}
192192 !1 = !DIFile(filename: "-", directory: "/usr/local/google/home/majnemer/llvm/src")
193193 !2 = !{}
194194 !3 = !{!4, !10, !29}
195 !4 = distinct !DIGlobalVariable(name: "s0", scope: !0, file: !5, line: 7, type: !6, isLocal: false, isDefinition: true)
195 !4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "s0", scope: !0, file: !5, line: 7, type: !6, isLocal: false, isDefinition: true))
196196 !5 = !DIFile(filename: "", directory: "/usr/local/google/home/majnemer/llvm/src")
197197 !6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S0", file: !5, line: 3, size: 24, elements: !7)
198198 !7 = !{!8}
199199 !8 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !6, file: !5, line: 6, baseType: !9, size: 8, offset: 16, flags: DIFlagBitField, extraData: i64 8)
200200 !9 = !DIBasicType(name: "short", size: 16, encoding: DW_ATE_signed)
201 !10 = distinct !DIGlobalVariable(name: "s1", scope: !0, file: !5, line: 18, type: !11, isLocal: false, isDefinition: true)
201 !10 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "s1", scope: !0, file: !5, line: 18, type: !11, isLocal: false, isDefinition: true))
202202 !11 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S1", file: !5, line: 10, size: 128, elements: !12)
203203 !12 = !{!13, !18, !19, !21, !22, !23, !28}
204204 !13 = !DIDerivedType(tag: DW_TAG_member, name: "x1", scope: !11, file: !5, line: 11, baseType: !14, size: 16)
217217 !26 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !24, file: !5, line: 16, baseType: !15, size: 8)
218218 !27 = !DIDerivedType(tag: DW_TAG_member, name: "s", scope: !24, file: !5, line: 16, baseType: !9, size: 16, offset: 8)
219219 !28 = !DIDerivedType(tag: DW_TAG_member, name: "u", scope: !11, file: !5, line: 17, baseType: !9, size: 3, offset: 112, flags: DIFlagBitField, extraData: i64 112)
220 !29 = distinct !DIGlobalVariable(name: "s2", scope: !0, file: !5, line: 24, type: !30, isLocal: false, isDefinition: true)
220 !29 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "s2", scope: !0, file: !5, line: 24, type: !30, isLocal: false, isDefinition: true))
221221 !30 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S2", file: !5, line: 21, size: 32, elements: !31)
222222 !31 = !{!32}
223223 !32 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !30, file: !5, line: 23, baseType: !20, size: 1, flags: DIFlagBitField, extraData: i64 0)
4141 !6 = !{!7}
4242 !7 = !DIEnumerator(name: "BLAH", value: 0)
4343 !8 = !{!9}
44 !9 = distinct !DIGlobalVariable(name: "e", linkageName: "\01?e@@3W4E@@A", scope: !0, file: !4, line: 2, type: !3, isLocal: false, isDefinition: true)
44 !9 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "e", linkageName: "\01?e@@3W4E@@A", scope: !0, file: !4, line: 2, type: !3, isLocal: false, isDefinition: true))
4545 !10 = !{i32 2, !"CodeView", i32 1}
4646 !11 = !{i32 2, !"Debug Info Version", i32 3}
4747 !12 = !{!"clang version 3.9.0 (trunk 272790) (llvm/trunk 272813)"}
1414 !1 = !DIFile(filename: "/usr/local/google/home/majnemer/Downloads/", directory: "/usr/local/google/home/majnemer/llvm/src")
1515 !2 = !{}
1616 !3 = !{!4}
17 !4 = distinct !DIGlobalVariable(name: "id", linkageName: "\01?id@?$numpunct@D@@0HA", scope: !0, file: !5, line: 4, type: !6, isLocal: false, isDefinition: true, declaration: !7)
17 !4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "id", linkageName: "\01?id@?$numpunct@D@@0HA", scope: !0, file: !5, line: 4, type: !6, isLocal: false, isDefinition: true, declaration: !7))
1818 !5 = !DIFile(filename: "/usr/local/google/home/majnemer/Downloads/t.ii", directory: "/usr/local/google/home/majnemer/llvm/src")
1919 !6 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
2020 !7 = !DIDerivedType(tag: DW_TAG_member, name: "id", scope: !8, file: !5, line: 2, baseType: !6, flags: DIFlagStaticMember)
2424 !1 = !DIFile(filename: "t.c", directory: "foo")
2525 !2 = !{}
2626 !3 = !{!4, !6}
27 !4 = distinct !DIGlobalVariable(name: "_OptionsStorage", scope: !0, file: !1, line: 3, type: !5, isLocal: true, isDefinition: true)
27 !4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "_OptionsStorage", scope: !0, file: !1, line: 3, type: !5, isLocal: true, isDefinition: true))
2828 !5 = !DIBasicType(name: "unsigned int", size: 32, align: 32, encoding: DW_ATE_unsigned)
29 !6 = distinct !DIGlobalVariable(name: "x", scope: !0, file: !1, line: 4, type: !5, isLocal: true, isDefinition: true)
29 !6 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", scope: !0, file: !1, line: 4, type: !5, isLocal: true, isDefinition: true))
3030
3131 !35 = !{i32 2, !"CodeView", i32 1}
3232 !36 = !{i32 2, !"Debug Info Version", i32 3}
128128 !1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
129129 !2 = !{}
130130 !3 = !{!4, !6, !13, !15}
131 !4 = distinct !DIGlobalVariable(name: "first", linkageName: "\01?first@@3HA", scope: !0, file: !1, line: 1, type: !5, isLocal: true, isDefinition: true)
131 !4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "first", linkageName: "\01?first@@3HA", scope: !0, file: !1, line: 1, type: !5, isLocal: true, isDefinition: true))
132132 !5 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
133 !6 = distinct !DIGlobalVariable(name: "comdat", linkageName: "\01?comdat@?$A@X@@2HB", scope: !0, file: !1, line: 2, type: !7, isLocal: false, isDefinition: true, declaration: !8)
133 !6 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "comdat", linkageName: "\01?comdat@?$A@X@@2HB", scope: !0, file: !1, line: 2, type: !7, isLocal: false, isDefinition: true, declaration: !8))
134134 !7 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !5)
135135 !8 = !DIDerivedType(tag: DW_TAG_member, name: "comdat", scope: !9, file: !1, line: 2, baseType: !7, flags: DIFlagStaticMember, extraData: i32 3)
136136 !9 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "A", file: !1, line: 2, size: 8, align: 8, elements: !10, templateParams: !11)
137137 !10 = !{!8}
138138 !11 = !{!12}
139139 !12 = !DITemplateTypeParameter(name: "T", type: null)
140 !13 = distinct !DIGlobalVariable(name: "middle", linkageName: "\01?middle@@3PEBHEB", scope: !0, file: !1, line: 3, type: !14, isLocal: false, isDefinition: true)
140 !13 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "middle", linkageName: "\01?middle@@3PEBHEB", scope: !0, file: !1, line: 3, type: !14, isLocal: false, isDefinition: true))
141141 !14 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !7, size: 64, align: 64)
142 !15 = distinct !DIGlobalVariable(name: "last", linkageName: "\01?last@@3HA", scope: !0, file: !1, line: 4, type: !5, isLocal: false, isDefinition: true)
142 !15 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "last", linkageName: "\01?last@@3HA", scope: !0, file: !1, line: 4, type: !5, isLocal: false, isDefinition: true))
143143 !16 = !{i32 2, !"CodeView", i32 1}
144144 !17 = !{i32 2, !"Debug Info Version", i32 3}
145145 !18 = !{i32 1, !"PIC Level", i32 2}
9292 !llvm.module.flags = !{!31, !32, !33}
9393 !llvm.ident = !{!34}
9494
95 !0 = distinct !DIGlobalVariable(name: "d", linkageName: "\01?d@@3UD@@A", scope: !1, file: !5, line: 8, type: !6, isLocal: false, isDefinition: true)
95 !0 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "d", linkageName: "\01?d@@3UD@@A", scope: !1, file: !5, line: 8, type: !6, isLocal: false, isDefinition: true))
9696 !1 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !2, producer: "clang version 4.0.0 (http://llvm.org/git/clang.git 95626d54d6db7e13087089396a80ebaccc4ffe7c) (http://llvm.org/git/llvm.git 374b6e2fa0b230d13c0fb9ee7af69b2146bfad8a)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !3, globals: !4)
9797 !2 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
9898 !3 = !{}
8383 !6 = !{null}
8484 !7 = distinct !DISubprogram(name: "file_change", scope: !1, file: !1, line: 2, type: !5, isLocal: true, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !2)
8585 !8 = !{!9}
86 !9 = !DIGlobalVariable(name: "x", scope: !0, file: !1, line: 1, type: !10, isLocal: false, isDefinition: true)
86 !9 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", scope: !0, file: !1, line: 1, type: !10, isLocal: false, isDefinition: true))
8787 !10 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !11)
8888 !11 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
8989 !12 = !{i32 2, !"CodeView", i32 1}
139139 !1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
140140 !2 = !{}
141141 !3 = !{!4}
142 !4 = distinct !DIGlobalVariable(name: "x", linkageName: "\01?x@@3HC", scope: !0, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true)
142 !4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", linkageName: "\01?x@@3HC", scope: !0, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true))
143143 !5 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !6)
144144 !6 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
145145 !7 = !{i32 2, !"CodeView", i32 1}
7070 !11 = distinct !DISubprogram(name: "g", linkageName: "\01?g@@YAXXZ", scope: !1, file: !1, line: 6, type: !9, isLocal: true, isDefinition: true, scopeLine: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !2)
7171 !12 = distinct !DISubprogram(name: "f", linkageName: "\01?f@@YAXXZ", scope: !1, file: !1, line: 2, type: !9, isLocal: true, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !2)
7272 !13 = !{!14}
73 !14 = !DIGlobalVariable(name: "x", linkageName: "\01?x@@3HC", scope: !0, file: !1, line: 1, type: !15, isLocal: false, isDefinition: true)
73 !14 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", linkageName: "\01?x@@3HC", scope: !0, file: !1, line: 1, type: !15, isLocal: false, isDefinition: true))
7474 !15 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !7)
7575 !16 = !{i32 2, !"CodeView", i32 1}
7676 !17 = !{i32 2, !"Debug Info Version", i32 3}
3131 !llvm.module.flags = !{!11, !12, !13}
3232 !llvm.ident = !{!14}
3333
34 !0 = distinct !DIGlobalVariable(name: "x", scope: !1, file: !6, line: 4, type: !9, isLocal: false, isDefinition: true)
34 !0 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", scope: !1, file: !6, line: 4, type: !9, isLocal: false, isDefinition: true))
3535 !1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, producer: "clang version 4.0.0 ", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !3, globals: !4)
3636 !2 = !DIFile(filename: "-", directory: "C:\5Csrc\5Cllvm\5Cbuild")
3737 !3 = !{}
3838 !4 = !{!0, !5}
39 !5 = distinct !DIGlobalVariable(name: "y", scope: !1, file: !6, line: 5, type: !7, isLocal: false, isDefinition: true)
39 !5 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "y", scope: !1, file: !6, line: 5, type: !7, isLocal: false, isDefinition: true))
4040 !6 = !DIFile(filename: "", directory: "C:\5Csrc\5Cllvm\5Cbuild")
4141 !7 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint8_t", file: !6, line: 3, baseType: !8)
4242
2727 !llvm.module.flags = !{!7, !8}
2828 !llvm.ident = !{!9}
2929
30 !0 = distinct !DIGlobalVariable(name: "f", linkageName: "\01?f@@3UFoo@@A", scope: !1, file: !5, line: 1, type: !6, isLocal: false, isDefinition: true)
30 !0 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "f", linkageName: "\01?f@@3UFoo@@A", scope: !1, file: !5, line: 1, type: !6, isLocal: false, isDefinition: true))
3131 !1 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !2, producer: "clang version 4.0.0 ", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !3, globals: !4)
3232 !2 = !DIFile(filename: "", directory: "C:\5Csrc\5Cllvm\5Cbuild")
3333 !3 = !{}
260260 !20 = !DILocalVariable(name: "a", arg: 1, scope: !16, file: !1, line: 4, type: !7)
261261 !21 = !DILocalVariable(name: "b", scope: !16, file: !1, line: 5, type: !7)
262262 !22 = !{!23}
263 !23 = !DIGlobalVariable(name: "x", scope: !0, file: !1, line: 1, type: !24, isLocal: false, isDefinition: true)
263 !23 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", scope: !0, file: !1, line: 1, type: !24, isLocal: false, isDefinition: true))
264264 !24 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !7)
265265 !25 = !{i32 2, !"CodeView", i32 1}
266266 !26 = !{i32 2, !"Debug Info Version", i32 3}
112112 !1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
113113 !2 = !{}
114114 !3 = !{!4}
115 !4 = distinct !DIGlobalVariable(name: "g", linkageName: "\01?g@bar@foo@@3UGlobalRecord@12@A", scope: !5, file: !1, line: 12, type: !7, isLocal: false, isDefinition: true)
115 !4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "g", linkageName: "\01?g@bar@foo@@3UGlobalRecord@12@A", scope: !5, file: !1, line: 12, type: !7, isLocal: false, isDefinition: true))
116116 !5 = !DINamespace(name: "bar", scope: !6, file: !1, line: 2)
117117 !6 = !DINamespace(name: "foo", scope: null, file: !1, line: 1)
118118 !7 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "GlobalRecord", scope: !5, file: !1, line: 9, size: 32, align: 32, elements: !8, identifier: ".?AUGlobalRecord@bar@foo@@")
171171 !1 = !DIFile(filename: "t.cpp", directory: "/")
172172 !2 = !{}
173173 !3 = !{!4, !11, !20, !21}
174 !4 = distinct !DIGlobalVariable(name: "multi_dim_arr", linkageName: "\01?multi_dim_arr@@3PAY146DA", scope: !0, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true)
174 !4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "multi_dim_arr", linkageName: "\01?multi_dim_arr@@3PAY146DA", scope: !0, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true))
175175 !5 = !DICompositeType(tag: DW_TAG_array_type, baseType: !6, size: 560, align: 8, elements: !7)
176176 !6 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
177177 !7 = !{!8, !9, !10}
178178 !8 = !DISubrange(count: 2)
179179 !9 = !DISubrange(count: 5)
180180 !10 = !DISubrange(count: 7)
181 !11 = distinct !DIGlobalVariable(name: "p_incomplete_struct_arr", linkageName: "\01?p_incomplete_struct_arr@@3PAY02Uincomplete_struct@@A", scope: !0, file: !1, line: 3, type: !12, isLocal: false, isDefinition: true)
181 !11 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "p_incomplete_struct_arr", linkageName: "\01?p_incomplete_struct_arr@@3PAY02Uincomplete_struct@@A", scope: !0, file: !1, line: 3, type: !12, isLocal: false, isDefinition: true))
182182 !12 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !13, size: 32, align: 32)
183183 !13 = !DICompositeType(tag: DW_TAG_array_type, baseType: !14, elements: !18)
184184 !14 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "incomplete_struct", file: !1, line: 4, size: 32, align: 32, elements: !15, identifier: ".?AUincomplete_struct@@")
187187 !17 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
188188 !18 = !{!19}
189189 !19 = !DISubrange(count: 3)
190 !20 = distinct !DIGlobalVariable(name: "incomplete_struct_arr", linkageName: "\01?incomplete_struct_arr@@3PAUincomplete_struct@@A", scope: !0, file: !1, line: 6, type: !13, isLocal: false, isDefinition: true)
191 !21 = distinct !DIGlobalVariable(name: "typedef_arr", linkageName: "\01?typedef_arr@@3SDHD", scope: !0, file: !1, line: 14, type: !22, isLocal: false, isDefinition: true)
190 !20 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "incomplete_struct_arr", linkageName: "\01?incomplete_struct_arr@@3PAUincomplete_struct@@A", scope: !0, file: !1, line: 6, type: !13, isLocal: false, isDefinition: true))
191 !21 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "typedef_arr", linkageName: "\01?typedef_arr@@3SDHD", scope: !0, file: !1, line: 14, type: !22, isLocal: false, isDefinition: true))
192192 !22 = !DICompositeType(tag: DW_TAG_array_type, baseType: !23, size: 128, align: 32, elements: !26)
193193 !23 = !DIDerivedType(tag: DW_TAG_typedef, name: "T_INT", file: !1, line: 13, baseType: !24)
194194 !24 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !25)
8888 !1 = !DIFile(filename: "hello.cpp", directory: "D:\5Csrc\5Chello")
8989 !2 = !{}
9090 !3 = !{!4}
91 !4 = distinct !DIGlobalVariable(name: "a", linkageName: "\01?a@@3UA@@A", scope: !0, file: !1, line: 3, type: !5, isLocal: false, isDefinition: true)
91 !4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", linkageName: "\01?a@@3UA@@A", scope: !0, file: !1, line: 3, type: !5, isLocal: false, isDefinition: true))
9292 !5 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "A", file: !1, line: 1, size: 8, align: 8, elements: !6, identifier: ".?AUA@@")
9393 !6 = !{!7}
9494 !7 = !DICompositeType(tag: DW_TAG_structure_type, name: "Nested", scope: !5, file: !1, line: 2, size: 8, align: 8, flags: DIFlagFwdDecl, identifier: ".?AUNested@A@@")
202202 !1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
203203 !2 = !{}
204204 !3 = !{!4, !10, !20, !23, !26, !31, !36, !41, !46, !50}
205 !4 = distinct !DIGlobalVariable(name: "pmd_a", linkageName: "\01?pmd_a@@3PEQA@@HEQ1@", scope: !0, file: !1, line: 6, type: !5, isLocal: false, isDefinition: true)
205 !4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "pmd_a", linkageName: "\01?pmd_a@@3PEQA@@HEQ1@", scope: !0, file: !1, line: 6, type: !5, isLocal: false, isDefinition: true))
206206 !5 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !6, size: 32, flags: DIFlagSingleInheritance, extraData: !7)
207207 !6 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
208208 !7 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "A", file: !1, line: 1, size: 32, align: 32, elements: !8, identifier: ".?AUA@@")
209209 !8 = !{!9}
210210 !9 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !7, file: !1, line: 1, baseType: !6, size: 32, align: 32)
211 !10 = distinct !DIGlobalVariable(name: "pmd_b", linkageName: "\01?pmd_b@@3PEQC@@HEQ1@", scope: !0, file: !1, line: 7, type: !11, isLocal: false, isDefinition: true)
211 !10 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "pmd_b", linkageName: "\01?pmd_b@@3PEQC@@HEQ1@", scope: !0, file: !1, line: 7, type: !11, isLocal: false, isDefinition: true))
212212 !11 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !6, size: 32, flags: DIFlagMultipleInheritance, extraData: !12)
213213 !12 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "C", file: !1, line: 3, size: 96, align: 32, elements: !13, identifier: ".?AUC@@")
214214 !13 = !{!14, !15, !19}
218218 !17 = !{!18}
219219 !18 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !16, file: !1, line: 2, baseType: !6, size: 32, align: 32)
220220 !19 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !12, file: !1, line: 3, baseType: !6, size: 32, align: 32, offset: 64)
221 !20 = distinct !DIGlobalVariable(name: "pmd_c", linkageName: "\01?pmd_c@@3PEQD@@HEQ1@", scope: !0, file: !1, line: 8, type: !21, isLocal: false, isDefinition: true)
221 !20 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "pmd_c", linkageName: "\01?pmd_c@@3PEQD@@HEQ1@", scope: !0, file: !1, line: 8, type: !21, isLocal: false, isDefinition: true))
222222 !21 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !6, size: 64, flags: DIFlagVirtualInheritance, extraData: !22)
223223 !22 = !DICompositeType(tag: DW_TAG_structure_type, name: "D", file: !1, line: 4, size: 256, align: 64, flags: DIFlagFwdDecl, identifier: ".?AUD@@")
224 !23 = distinct !DIGlobalVariable(name: "pmd_d", linkageName: "\01?pmd_d@@3PEQE@@HEQ1@", scope: !0, file: !1, line: 9, type: !24, isLocal: false, isDefinition: true)
224 !23 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "pmd_d", linkageName: "\01?pmd_d@@3PEQE@@HEQ1@", scope: !0, file: !1, line: 9, type: !24, isLocal: false, isDefinition: true))
225225 !24 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !6, size: 96, extraData: !25)
226226 !25 = !DICompositeType(tag: DW_TAG_structure_type, name: "E", file: !1, line: 5, flags: DIFlagFwdDecl, identifier: ".?AUE@@")
227 !26 = distinct !DIGlobalVariable(name: "pmf_a", linkageName: "\01?pmf_a@@3P8A@@EAAXXZEQ1@", scope: !0, file: !1, line: 10, type: !27, isLocal: false, isDefinition: true)
227 !26 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "pmf_a", linkageName: "\01?pmf_a@@3P8A@@EAAXXZEQ1@", scope: !0, file: !1, line: 10, type: !27, isLocal: false, isDefinition: true))
228228 !27 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !28, size: 64, flags: DIFlagSingleInheritance, extraData: !7)
229229 !28 = !DISubroutineType(types: !29)
230230 !29 = !{null, !30}
231231 !30 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !7, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
232 !31 = distinct !DIGlobalVariable(name: "pmf_b", linkageName: "\01?pmf_b@@3P8C@@EAAXXZEQ1@", scope: !0, file: !1, line: 11, type: !32, isLocal: false, isDefinition: true)
232 !31 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "pmf_b", linkageName: "\01?pmf_b@@3P8C@@EAAXXZEQ1@", scope: !0, file: !1, line: 11, type: !32, isLocal: false, isDefinition: true))
233233 !32 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !33, size: 128, flags: DIFlagMultipleInheritance, extraData: !12)
234234 !33 = !DISubroutineType(types: !34)
235235 !34 = !{null, !35}
236236 !35 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !12, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
237 !36 = distinct !DIGlobalVariable(name: "pmf_c", linkageName: "\01?pmf_c@@3P8D@@EAAXXZEQ1@", scope: !0, file: !1, line: 12, type: !37, isLocal: false, isDefinition: true)
237 !36 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "pmf_c", linkageName: "\01?pmf_c@@3P8D@@EAAXXZEQ1@", scope: !0, file: !1, line: 12, type: !37, isLocal: false, isDefinition: true))
238238 !37 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !38, size: 128, flags: DIFlagVirtualInheritance, extraData: !22)
239239 !38 = !DISubroutineType(types: !39)
240240 !39 = !{null, !40}
241241 !40 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !22, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
242 !41 = distinct !DIGlobalVariable(name: "pmf_d", linkageName: "\01?pmf_d@@3P8E@@EAAXXZEQ1@", scope: !0, file: !1, line: 13, type: !42, isLocal: false, isDefinition: true)
242 !41 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "pmf_d", linkageName: "\01?pmf_d@@3P8E@@EAAXXZEQ1@", scope: !0, file: !1, line: 13, type: !42, isLocal: false, isDefinition: true))
243243 !42 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !43, size: 192, extraData: !25)
244244 !43 = !DISubroutineType(types: !44)
245245 !44 = !{null, !45}
246246 !45 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !25, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
247 !46 = distinct !DIGlobalVariable(name: "ppmd", linkageName: "\01?ppmd@@3PEAPEQIncomplete@@HEA", scope: !0, file: !1, line: 15, type: !47, isLocal: false, isDefinition: true)
247 !46 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ppmd", linkageName: "\01?ppmd@@3PEAPEQIncomplete@@HEA", scope: !0, file: !1, line: 15, type: !47, isLocal: false, isDefinition: true))
248248 !47 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !48, size: 64, align: 64)
249249 !48 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !6, extraData: !49)
250250 !49 = !DICompositeType(tag: DW_TAG_structure_type, name: "Incomplete", file: !1, line: 14, flags: DIFlagFwdDecl, identifier: ".?AUIncomplete@@")
251 !50 = distinct !DIGlobalVariable(name: "ppmf", linkageName: "\01?ppmf@@3PEAP8Incomplete@@EAAXXZEA", scope: !0, file: !1, line: 16, type: !51, isLocal: false, isDefinition: true)
251 !50 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ppmf", linkageName: "\01?ppmf@@3PEAP8Incomplete@@EAAXXZEA", scope: !0, file: !1, line: 16, type: !51, isLocal: false, isDefinition: true))
252252 !51 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !52, size: 64, align: 64)
253253 !52 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !53, extraData: !49)
254254 !53 = !DISubroutineType(types: !54)
9696 !1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
9797 !2 = !{}
9898 !3 = !{!4}
99 !4 = distinct !DIGlobalVariable(name: "u", linkageName: "\01?u@@3UU@@A", scope: !0, file: !1, line: 13, type: !5, isLocal: false, isDefinition: true)
99 !4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "u", linkageName: "\01?u@@3UU@@A", scope: !0, file: !1, line: 13, type: !5, isLocal: false, isDefinition: true))
100100 !5 = !DIDerivedType(tag: DW_TAG_typedef, name: "U", file: !1, line: 12, baseType: !6)
101101 !6 = distinct !DICompositeType(tag: DW_TAG_structure_type, file: !1, line: 12, size: 32, align: 32, elements: !7, identifier: ".?AUU@@")
102102 !7 = !{!8}
236236 !1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
237237 !2 = !{}
238238 !3 = !{!4}
239 !4 = distinct !DIGlobalVariable(name: "p", linkageName: "\01?p@@3PEAUC@@EA", scope: !0, file: !1, line: 13, type: !5, isLocal: false, isDefinition: true)
239 !4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "p", linkageName: "\01?p@@3PEAUC@@EA", scope: !0, file: !1, line: 13, type: !5, isLocal: false, isDefinition: true))
240240 !5 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !6, size: 64, align: 64)
241241 !6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "C", file: !1, line: 9, size: 64, align: 64, elements: !7, vtableHolder: !12, identifier: ".?AUC@@")
242242 !7 = !{!8, !30, !34}
9999 !1 = !DIFile(filename: "", directory: "C:\5Csrc\5Cllvm\5Cbuild")
100100 !2 = !{}
101101 !3 = !{!4, !10}
102 !4 = distinct !DIGlobalVariable(name: "force_fwd_decl", linkageName: "\01?force_fwd_decl@@3UGetFwdDecl@@A", scope: !0, file: !5, line: 5, type: !6, isLocal: false, isDefinition: true)
102 !4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "force_fwd_decl", linkageName: "\01?force_fwd_decl@@3UGetFwdDecl@@A", scope: !0, file: !5, line: 5, type: !6, isLocal: false, isDefinition: true))
103103 !5 = !DIFile(filename: "t.cpp", directory: "C:\5Csrc\5Cllvm\5Cbuild")
104104 !6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "GetFwdDecl", file: !5, line: 2, size: 8, align: 8, elements: !7, identifier: ".?AUGetFwdDecl@@")
105105 !7 = !{!8}
106106 !8 = !DIDerivedType(tag: DW_TAG_member, name: "format", scope: !6, file: !5, line: 3, baseType: !9, flags: DIFlagStaticMember)
107107 !9 = !DICompositeType(tag: DW_TAG_structure_type, name: "UnicodeString", file: !5, line: 1, flags: DIFlagFwdDecl, identifier: ".?AUUnicodeString@@")
108 !10 = distinct !DIGlobalVariable(name: "require_complete", linkageName: "\01?require_complete@@3UUseCompleteType@@A", scope: !0, file: !5, line: 15, type: !11, isLocal: false, isDefinition: true)
108 !10 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "require_complete", linkageName: "\01?require_complete@@3UUseCompleteType@@A", scope: !0, file: !5, line: 15, type: !11, isLocal: false, isDefinition: true))
109109 !11 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "UseCompleteType", file: !5, line: 10, size: 64, align: 64, elements: !12, identifier: ".?AUUseCompleteType@@")
110110 !12 = !{!13, !17, !21}
111111 !13 = !DIDerivedType(tag: DW_TAG_member, name: "currencySpcAfterSym", scope: !11, file: !5, line: 13, baseType: !14, size: 64, align: 64)
1717 !8 = !{!9}
1818 !9 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
1919 !12 = !{!14}
20 !14 = !DIGlobalVariable(name: "bar", line: 2, isLocal: true, isDefinition: true, scope: !5, file: !6, type: !9)
20 !14 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "bar", line: 2, isLocal: true, isDefinition: true, scope: !5, file: !6, type: !9))
2121 !15 = !DILocation(line: 3, column: 3, scope: !16)
2222 !16 = distinct !DILexicalBlock(line: 1, column: 11, file: !17, scope: !5)
2323 !17 = !DIFile(filename: "fb.c", directory: "/private/tmp")
66 !0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.0 (trunk 139632)", isOptimized: true, emissionKind: FullDebug, file: !8, enums: !2, retainedTypes: !2, globals: !3)
77 !2 = !{}
88 !3 = !{!5}
9 !5 = !DIGlobalVariable(name: "a", line: 2, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7)
9 !5 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", line: 2, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7))
1010 !6 = !DIFile(filename: "g.c", directory: "/private/tmp")
1111 !7 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
1212 !8 = !DIFile(filename: "g.c", directory: "/private/tmp")
4444 !13 = !{!14, !15}
4545 !14 = !DIDerivedType(tag: DW_TAG_member, name: "a", line: 10, size: 32, align: 32, file: !27, scope: !12, baseType: !5)
4646 !15 = !DIDerivedType(tag: DW_TAG_member, name: "b", line: 10, size: 32, align: 32, offset: 32, file: !27, scope: !12, baseType: !5)
47 !16 = !DIGlobalVariable(name: "i", line: 5, isLocal: false, isDefinition: true, scope: !1, file: !1, type: !5)
47 !16 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "i", line: 5, isLocal: false, isDefinition: true, scope: !1, file: !1, type: !5))
4848 !17 = !DILocation(line: 15, scope: !18)
4949 !18 = distinct !DILexicalBlock(line: 14, column: 0, file: !1, scope: !6)
5050 !19 = !DILocation(line: 9, scope: !0, inlinedAt: !17)
7272 !1 = !DIFile(filename: "hash-collisions.c", directory: "/tmp")
7373 !2 = !{}
7474 !3 = !{!4, !6, !7, !8, !9, !10, !11, !12, !13, !14, !15, !16}
75 !4 = !DIGlobalVariable(name: "ForceTopDown", scope: !0, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true)
75 !4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ForceTopDown", scope: !0, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true))
7676 !5 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
77 !6 = !DIGlobalVariable(name: "_ZNSt3__116allocator_traitsINS_9allocatorINS_11__tree_nodeINS_12__value_typeIPN4llvm10BasicBlockEPNS4_10RegionNodeEEEPvEEEEE11__constructIS9_JNS_4pairIS6_S8_EEEEEvNS_17integral_constantIbLb1EEERSC_PT_DpOT0_", scope: !0, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true)
78 !7 = !DIGlobalVariable(name: "_ZN5clang23DataRecursiveASTVisitorIN12_GLOBAL__N_124UnusedBackingIvarCheckerEE26TraverseCUDAKernelCallExprEPNS_18CUDAKernelCallExprE", scope: !0, file: !1, line: 3, type: !5, isLocal: false, isDefinition: true)
79 !8 = !DIGlobalVariable(name: "_ZN4llvm16DenseMapIteratorIPNS_10MDLocationENS_6detail13DenseSetEmptyENS_10MDNodeInfoIS1_EENS3_12DenseSetPairIS2_EELb0EE23AdvancePastEmptyBucketsEv", scope: !0, file: !1, line: 4, type: !5, isLocal: false, isDefinition: true)
80 !9 = !DIGlobalVariable(name: "_ZNK4llvm12LivePhysRegs5printERNS_11raw_ostreamE", scope: !0, file: !1, line: 5, type: !5, isLocal: false, isDefinition: true)
81 !10 = !DIGlobalVariable(name: "_ZN4llvm15ScalarEvolution14getSignedRangeEPKNS_4SCEVE", scope: !0, file: !1, line: 6, type: !5, isLocal: false, isDefinition: true)
82 !11 = !DIGlobalVariable(name: "k1", scope: !0, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true)
83 !12 = !DIGlobalVariable(name: "is", scope: !0, file: !1, line: 8, type: !5, isLocal: false, isDefinition: true)
84 !13 = !DIGlobalVariable(name: "setStmt", scope: !0, file: !1, line: 9, type: !5, isLocal: false, isDefinition: true)
85 !14 = !DIGlobalVariable(name: "_ZN4llvm5TwineC1Ei", scope: !0, file: !1, line: 10, type: !5, isLocal: false, isDefinition: true)
86 !15 = !DIGlobalVariable(name: "_ZNK5clang12OverrideAttr5cloneERNS_10ASTContextE", scope: !0, file: !1, line: 11, type: !5, isLocal: false, isDefinition: true)
87 !16 = !DIGlobalVariable(name: "_ZN4llvm22MachineModuleInfoMachOD2Ev", scope: !0, file: !1, line: 12, type: !5, isLocal: false, isDefinition: true)
77 !6 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "_ZNSt3__116allocator_traitsINS_9allocatorINS_11__tree_nodeINS_12__value_typeIPN4llvm10BasicBlockEPNS4_10RegionNodeEEEPvEEEEE11__constructIS9_JNS_4pairIS6_S8_EEEEEvNS_17integral_constantIbLb1EEERSC_PT_DpOT0_", scope: !0, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true))
78 !7 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "_ZN5clang23DataRecursiveASTVisitorIN12_GLOBAL__N_124UnusedBackingIvarCheckerEE26TraverseCUDAKernelCallExprEPNS_18CUDAKernelCallExprE", scope: !0, file: !1, line: 3, type: !5, isLocal: false, isDefinition: true))
79 !8 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "_ZN4llvm16DenseMapIteratorIPNS_10MDLocationENS_6detail13DenseSetEmptyENS_10MDNodeInfoIS1_EENS3_12DenseSetPairIS2_EELb0EE23AdvancePastEmptyBucketsEv", scope: !0, file: !1, line: 4, type: !5, isLocal: false, isDefinition: true))
80 !9 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "_ZNK4llvm12LivePhysRegs5printERNS_11raw_ostreamE", scope: !0, file: !1, line: 5, type: !5, isLocal: false, isDefinition: true))
81 !10 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "_ZN4llvm15ScalarEvolution14getSignedRangeEPKNS_4SCEVE", scope: !0, file: !1, line: 6, type: !5, isLocal: false, isDefinition: true))
82 !11 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "k1", scope: !0, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true))
83 !12 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "is", scope: !0, file: !1, line: 8, type: !5, isLocal: false, isDefinition: true))
84 !13 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "setStmt", scope: !0, file: !1, line: 9, type: !5, isLocal: false, isDefinition: true))
85 !14 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "_ZN4llvm5TwineC1Ei", scope: !0, file: !1, line: 10, type: !5, isLocal: false, isDefinition: true))
86 !15 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "_ZNK5clang12OverrideAttr5cloneERNS_10ASTContextE", scope: !0, file: !1, line: 11, type: !5, isLocal: false, isDefinition: true))
87 !16 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "_ZN4llvm22MachineModuleInfoMachOD2Ev", scope: !0, file: !1, line: 12, type: !5, isLocal: false, isDefinition: true))
8888 !17 = !{i32 2, !"Dwarf Version", i32 2}
8989 !18 = !{i32 2, !"Debug Info Version", i32 3}
9090 !19 = !{i32 1, !"PIC Level", i32 2}
6868 !7 = !{!8, !8}
6969 !8 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
7070 !9 = !{!10}
71 !10 = !DIGlobalVariable(name: "x", line: 4, isLocal: false, isDefinition: true, scope: null, file: !5, type: !11)
71 !10 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", line: 4, isLocal: false, isDefinition: true, scope: null, file: !5, type: !11))
7272 !11 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !6)
7373 !12 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.5.0 ", isOptimized: false, emissionKind: FullDebug, file: !13, enums: !2, retainedTypes: !2, globals: !17, imports: !2)
7474 !13 = !DIFile(filename: "b.cpp", directory: "/tmp/dbginfo")
7575 !15 = distinct !DISubprogram(name: "func", linkageName: "_Z4funci", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !12, scopeLine: 1, file: !13, scope: !16, type: !6, variables: !2)
7676 !16 = !DIFile(filename: "b.cpp", directory: "/tmp/dbginfo")
7777 !17 = !{!18}
78 !18 = !DIGlobalVariable(name: "y", line: 4, isLocal: false, isDefinition: true, scope: null, file: !16, type: !11)
78 !18 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "y", line: 4, isLocal: false, isDefinition: true, scope: null, file: !16, type: !11))
7979 !19 = !{i32 2, !"Dwarf Version", i32 4}
8080 !20 = !{i32 1, !"Debug Info Version", i32 3}
8181 !21 = !{!"clang version 3.5.0 "}
5757 !8 = !{!9, !9}
5858 !9 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
5959 !10 = !{!11}
60 !11 = !DIGlobalVariable(name: "x", line: 4, isLocal: false, isDefinition: true, scope: null, file: !6, type: !12)
60 !11 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", line: 4, isLocal: false, isDefinition: true, scope: null, file: !6, type: !12))
6161 !12 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !7)
6262 !13 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.5.0 ", isOptimized: false, emissionKind: FullDebug, file: !14, enums: !2, retainedTypes: !2, globals: !15, imports: !2)
6363 !14 = !DIFile(filename: "b.cpp", directory: "/tmp/dbginfo")
6464 !15 = !{!16}
65 !16 = !DIGlobalVariable(name: "y", line: 4, isLocal: false, isDefinition: true, scope: null, file: !6, type: !12)
65 !16 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "y", line: 4, isLocal: false, isDefinition: true, scope: null, file: !6, type: !12))
6666 !17 = !{i32 2, !"Dwarf Version", i32 4}
6767 !18 = !{i32 1, !"Debug Info Version", i32 3}
6868 !19 = !{!"clang version 3.5.0 "}
1010 !0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.0 (trunk 140253)", isOptimized: true, emissionKind: FullDebug, file: !11, enums: !2, retainedTypes: !2, globals: !3)
1111 !2 = !{}
1212 !3 = !{!5}
13 !5 = !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7)
13 !5 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7))
1414 !6 = !DIFile(filename: "x.c", directory: "/private/tmp")
1515 !7 = !DICompositeType(tag: DW_TAG_array_type, size: 320, align: 32, baseType: !8, elements: !9)
1616 !8 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
3030 !1 = !DIFile(filename: "minimal.c", directory: "/tmp")
3131 !2 = !{}
3232 !3 = !{!4}
33 !4 = !DIGlobalVariable(name: "y", scope: !0, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true)
33 !4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "y", scope: !0, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true))
3434 !5 = !DICompositeType(tag: DW_TAG_structure_type, name: "Y", file: !1, line: 3, size: 64, align: 64, elements: !6)
3535 !6 = !{!7}
3636 !7 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !5, file: !1, line: 4, baseType: !8, size: 64, align: 64)
113113 !22 = !DISubroutineType(types: !23)
114114 !23 = !{null}
115115 !24 = !{!25, !26, !27}
116 !25 = !DIGlobalVariable(name: "static_member_variable", linkageName: "_ZN1C22static_member_variableE", line: 7, isLocal: false, isDefinition: true, scope: !8, file: !4, type: !11, declaration: !10)
117 !26 = !DIGlobalVariable(name: "global_variable", line: 17, isLocal: false, isDefinition: true, scope: null, file: !4, type: !8)
118 !27 = !DIGlobalVariable(name: "global_namespace_variable", linkageName: "_ZN2ns25global_namespace_variableE", line: 27, isLocal: false, isDefinition: true, scope: !21, file: !4, type: !11)
116 !25 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "static_member_variable", linkageName: "_ZN1C22static_member_variableE", line: 7, isLocal: false, isDefinition: true, scope: !8, file: !4, type: !11, declaration: !10))
117 !26 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "global_variable", line: 17, isLocal: false, isDefinition: true, scope: null, file: !4, type: !8))
118 !27 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "global_namespace_variable", linkageName: "_ZN2ns25global_namespace_variableE", line: 27, isLocal: false, isDefinition: true, scope: !21, file: !4, type: !11))
119119 !28 = !DILocalVariable(name: "this", line: 9, arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !3, file: !4, type: !29)
120120 !29 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !8)
121121 !30 = !DILocation(line: 9, scope: !3)
6969 !15 = !DISubroutineType(types: !16)
7070 !16 = !{null}
7171 !17 = !{!18}
72 !18 = !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !14, type: !3)
72 !18 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !14, type: !3))
7373 !19 = !{i32 2, !"Dwarf Version", i32 3}
7474 !20 = !DILocalVariable(name: "b", line: 4, scope: !13, file: !14, type: !21)
7575 !21 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
3434 !7 = !{!8}
3535 !8 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
3636 !9 = !{!10}
37 !10 = !DIGlobalVariable(name: "i", linkageName: "_ZL1i", line: 1, isLocal: true, isDefinition: true, scope: null, file: !5, type: !8)
37 !10 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "i", linkageName: "_ZL1i", line: 1, isLocal: true, isDefinition: true, scope: null, file: !5, type: !8))
3838 !11 = !{i32 2, !"Dwarf Version", i32 3}
3939 !12 = !DILocation(line: 4, scope: !4)
4040 !13 = !{i32 1, !"Debug Info Version", i32 3}
8080 !13 = !DISubroutineType(types: !14)
8181 !14 = !{null}
8282 !15 = !{!16, !17}
83 !16 = !DIGlobalVariable(name: "a", scope: !0, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true)
84 !17 = !DIGlobalVariable(name: "b", scope: !0, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true)
83 !16 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", scope: !0, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true))
84 !17 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "b", scope: !0, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true))
8585 !18 = !{i32 2, !"Dwarf Version", i32 2}
8686 !19 = !{i32 2, !"Debug Info Version", i32 3}
8787 !20 = !{!"clang version 3.8.0 (trunk 245562) (llvm/trunk 245569)"}
2525 !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.3 ", isOptimized: false, emissionKind: FullDebug, file: !15, enums: !1, retainedTypes: !1, globals: !3, imports: !1)
2626 !1 = !{}
2727 !3 = !{!5, !10}
28 !5 = !DIGlobalVariable(name: "x", line: 4, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7)
28 !5 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", line: 4, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7))
2929 !6 = !DIFile(filename: "simple.cpp", directory: "/home/blaikie/Development/scratch")
3030 !7 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !8, extraData: !9)
3131 !8 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
3232 !9 = !DICompositeType(tag: DW_TAG_structure_type, name: "S", line: 1, size: 8, align: 8, file: !15, elements: !1)
33 !10 = !DIGlobalVariable(name: "y", line: 5, isLocal: false, isDefinition: true, scope: null, file: !6, type: !11)
33 !10 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "y", line: 5, isLocal: false, isDefinition: true, scope: null, file: !6, type: !11))
3434 !11 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !12, extraData: !9)
3535 !12 = !DISubroutineType(types: !13)
3636 !13 = !{null, !14, !8}
199199 ; }
200200 ; void B::func_fwd() {}
201201
202 @_ZN1A1B1iE = global i32 0, align 4, !dbg !31
203 @_ZN1A1B7var_fwdE = global i32 0, align 4, !dbg !32
202 @_ZN1A1B1iE = global i32 0, align 4, !dbg !131
203 @_ZN1A1B7var_fwdE = global i32 0, align 4, !dbg !132
204204 @llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__sub_I_debug_info_namespace.cpp, i8* null }]
205205
206206 ; Function Attrs: nounwind ssp uwtable
315315 !27 = distinct !DISubprogram(name: "", linkageName: "_GLOBAL__sub_I_debug_info_namespace.cpp", isLocal: true, isDefinition: true, flags: DIFlagArtificial, isOptimized: false, unit: !0, file: !1, scope: !28, type: !29, variables: !2)
316316 !28 = !DIFile(filename: "debug-info-namespace.cpp", directory: "/tmp")
317317 !29 = !DISubroutineType(types: !2)
318 !30 = !{!31, !32}
318 !30 = !{!131, !132}
319319 !31 = !DIGlobalVariable(name: "i", linkageName: "_ZN1A1B1iE", line: 20, isLocal: false, isDefinition: true, scope: !6, file: !18, type: !13)
320320 !32 = !DIGlobalVariable(name: "var_fwd", linkageName: "_ZN1A1B7var_fwdE", line: 44, isLocal: false, isDefinition: true, scope: !6, file: !18, type: !13)
321321 !33 = !{!34, !35, !36, !37, !40, !41, !42, !43, !44, !45, !47, !48, !49, !51, !54, !55, !56}
361361 !73 = !DILocation(line: 47, column: 21, scope: !26)
362362 !74 = !DILocation(line: 0, scope: !75)
363363 !75 = !DILexicalBlockFile(discriminator: 0, file: !5, scope: !27)
364 !131 = !DIGlobalVariableExpression(var: !31)
365 !132 = !DIGlobalVariableExpression(var: !32)
224224 !24 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !22, type: !25)
225225 !25 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !4)
226226 !26 = !{!27}
227 !27 = !DIGlobalVariable(name: "x", line: 13, isLocal: false, isDefinition: true, scope: null, file: !15, type: !25)
227 !27 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", line: 13, isLocal: false, isDefinition: true, scope: null, file: !15, type: !25))
228228 !28 = !{i32 2, !"Dwarf Version", i32 4}
229229 !29 = !{i32 2, !"Debug Info Version", i32 3}
230230 !30 = !{!"clang version 3.6.0 "}
2828 !1 = !DIFile(filename: "debug-info-template-recursive.cpp", directory: "/usr/local/google/home/echristo/tmp")
2929 !2 = !{}
3030 !3 = !{!4}
31 !4 = !DIGlobalVariable(name: "filters", line: 10, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6)
31 !4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "filters", line: 10, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6))
3232 !5 = !DIFile(filename: "debug-info-template-recursive.cpp", directory: "/usr/local/google/home/echristo/tmp")
3333 !6 = !DICompositeType(tag: DW_TAG_class_type, name: "bar", line: 9, size: 8, align: 8, file: !1, elements: !7)
3434 !7 = !{!8, !31}
2121 !3 = !{!4}
2222 !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "Foo", line: 1, flags: DIFlagFwdDecl, file: !1, identifier: "_ZTS3Foo")
2323 !5 = !{!6}
24 !6 = !DIGlobalVariable(name: "x", line: 4, isLocal: false, isDefinition: true, scope: null, file: !7, type: !8)
24 !6 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", line: 4, isLocal: false, isDefinition: true, scope: null, file: !7, type: !8))
2525 !7 = !DIFile(filename: "foo.cpp", directory: ".")
2626 !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)
2121 !1 = !DIFile(filename: "typedef.cpp", directory: "/tmp/dbginfo")
2222 !2 = !{}
2323 !3 = !{!4}
24 !4 = !DIGlobalVariable(name: "y", line: 2, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6)
24 !4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "y", line: 2, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6))
2525 !5 = !DIFile(filename: "typedef.cpp", directory: "/tmp/dbginfo")
2626 !6 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !7)
2727 !7 = !DIDerivedType(tag: DW_TAG_typedef, name: "x", line: 1, file: !1, baseType: null)
3232 # DBG_VALUE for variable "n" is extended into BB#5 from its predecessors BB#3
3333 # and BB#4.
3434 # CHECK: bb.5.if.end.7:
35 # CHECK: DBG_VALUE debug-use %ebx, debug-use _, !18, !19, debug-location !32
35 # CHECK: DBG_VALUE debug-use %ebx, debug-use _, !19, !20, debug-location !33
3636
3737
3838 --- |
120120 !13 = !DILocalVariable(name: "argv", arg: 2, scope: !4, file: !1, line: 6, type: !8)
121121 !14 = !DILocalVariable(name: "n", scope: !4, file: !1, line: 7, type: !7)
122122 !15 = !{!16}
123 !16 = !DIGlobalVariable(name: "m", scope: !0, file: !1, line: 2, type: !7, isLocal: false, isDefinition: true)
123 !16 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "m", scope: !0, file: !1, line: 2, type: !7, isLocal: false, isDefinition: true))
124124 !17 = !{i32 2, !"Dwarf Version", i32 4}
125125 !18 = !{i32 2, !"Debug Info Version", i32 3}
126126 !19 = !{!"clang version 3.8.0 (trunk 253049)"}
5454 !llvm.module.flags = !{!6, !7}
5555 !llvm.ident = !{!8}
5656
57 !0 = distinct !DIGlobalVariable(name: "x", scope: !1, file: !2, line: 1, type: !5, isLocal: false, isDefinition: true)
57 !0 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", scope: !1, file: !2, line: 1, type: !5, isLocal: false, isDefinition: true))
5858 !1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, producer: "clang version 4.0.0 ", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !3, globals: !4)
5959 !2 = !DIFile(filename: "t.c", directory: "/home/test")
6060 !3 = !{}
4444 !13 = !{!14, !15}
4545 !14 = !DIDerivedType(tag: DW_TAG_member, name: "a", line: 10, size: 32, align: 32, file: !27, scope: !12, baseType: !5)
4646 !15 = !DIDerivedType(tag: DW_TAG_member, name: "b", line: 10, size: 32, align: 32, offset: 32, file: !27, scope: !12, baseType: !5)
47 !16 = !DIGlobalVariable(name: "i", line: 5, isLocal: false, isDefinition: true, scope: !1, file: !1, type: !5)
47 !16 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "i", line: 5, isLocal: false, isDefinition: true, scope: !1, file: !1, type: !5))
4848 !17 = !DILocation(line: 15, scope: !18)
4949 !18 = distinct !DILexicalBlock(line: 14, column: 0, file: !1, scope: !6)
5050 !19 = !DILocation(line: 9, scope: !0, inlinedAt: !17)
2525 !1 = !DIFile(filename: "tls.cpp", directory: "/tmp")
2626 !2 = !{}
2727 !3 = !{!4}
28 !4 = !DIGlobalVariable(name: "tls", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6)
28 !4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "tls", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6))
2929 !5 = !DIFile(filename: "tls.cpp", directory: "/tmp")
3030 !6 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
3131 !7 = !{i32 2, !"Dwarf Version", i32 3}
2020 !1 = !DIFile(filename: "tls.cpp", directory: "/tmp")
2121 !2 = !{}
2222 !3 = !{!4}
23 !4 = !DIGlobalVariable(name: "tls", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6)
23 !4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "tls", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6))
2424 !5 = !DIFile(filename: "tls.cpp", directory: "/tmp")
2525 !6 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
2626 !7 = !{i32 2, !"Dwarf Version", i32 3}
4444 !1 = !DIFile(filename: "crash.c", directory: "wasm/tests")
4545 !2 = !{}
4646 !3 = !{!4}
47 !4 = distinct !DIGlobalVariable(name: "key", scope: !0, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true)
47 !4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "key", scope: !0, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true))
4848 !5 = !DICompositeType(tag: DW_TAG_array_type, baseType: !6, size: 120, align: 8, elements: !9)
4949 !6 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint8_t", file: !7, line: 185, baseType: !8)
5050 !7 = !DIFile(filename: "wasm/emscripten/system/include/libc/bits/alltypes.h", directory: "wasm/tests")
2626 !8 = !{!9}
2727 !9 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
2828 !12 = !{!14}
29 !14 = !DIGlobalVariable(name: "GLB", line: 1, isLocal: false, isDefinition: true, scope: null, file: !6, type: !9)
29 !14 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "GLB", line: 1, isLocal: false, isDefinition: true, scope: null, file: !6, type: !9))
3030 !15 = !DILocalVariable(name: "LOC", line: 4, scope: !16, file: !6, type: !9)
3131 !16 = distinct !DILexicalBlock(line: 3, column: 9, file: !20, scope: !5)
3232 !17 = !DILocation(line: 4, column: 9, scope: !16)
1919 !1 = !DIFile(filename: "test.c", directory: "/")
2020 !2 = !{}
2121 !3 = !{!4}
22 !4 = !DIGlobalVariable(name: "s", scope: !0, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true)
22 !4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "s", scope: !0, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true))
2323 !5 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !6, size: 64, align: 64)
2424 !6 = !DICompositeType(tag: DW_TAG_structure_type, name: "s", scope: !9, file: !1, line: 1, flags: DIFlagFwdDecl)
2525 !7 = !{i32 2, !"Dwarf Version", i32 2}
6666 !1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
6767 !2 = !{}
6868 !3 = !{!4}
69 !4 = distinct !DIGlobalVariable(name: "fptr", linkageName: "\01?fptr@@3P6IHHH@ZA", scope: !0, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true)
69 !4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "fptr", linkageName: "\01?fptr@@3P6IHHH@ZA", scope: !0, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true))
7070 !5 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !6, size: 32, align: 32)
7171 !6 = !DISubroutineType(cc: DW_CC_BORLAND_msfastcall, types: !7)
7272 !7 = !{!8, !8, !8}
3131 !12 = !DICompositeType(tag: DW_TAG_class_type, name: "foo", line: 1, size: 8, align: 8, file: !27, elements: !13)
3232 !13 = !{!11}
3333 !18 = !{!20}
34 !20 = !DIGlobalVariable(name: "x", line: 5, isLocal: true, isDefinition: true, scope: !5, file: !6, type: !21)
34 !20 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", line: 5, isLocal: true, isDefinition: true, scope: !5, file: !6, type: !21))
3535 !21 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !22)
3636 !22 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
3737 !25 = !DILocation(line: 6, column: 1, scope: !26)
2020 !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.1 (trunk 153413) (llvm/trunk 153428)", isOptimized: false, emissionKind: FullDebug, file: !28, enums: !1, retainedTypes: !1, globals: !3, imports: !1)
2121 !1 = !{}
2222 !3 = !{!5, !17}
23 !5 = !DIGlobalVariable(name: "a", line: 10, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7)
23 !5 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", line: 10, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7))
2424 !6 = !DIFile(filename: "foo.cpp", directory: "/Users/echristo/tmp")
2525 !7 = !DICompositeType(tag: DW_TAG_class_type, name: "A", line: 1, size: 32, align: 32, file: !28, elements: !8)
2626 !8 = !{!9, !11}
3030 !12 = !DISubroutineType(types: !13)
3131 !13 = !{null, !14}
3232 !14 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial, baseType: !7)
33 !17 = !DIGlobalVariable(name: "b", line: 11, isLocal: false, isDefinition: true, scope: null, file: !6, type: !18)
33 !17 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "b", line: 11, isLocal: false, isDefinition: true, scope: null, file: !6, type: !18))
3434 !18 = !DICompositeType(tag: DW_TAG_class_type, name: "B", line: 5, size: 32, align: 32, file: !28, elements: !19)
3535 !19 = !{!20, !21, !27}
3636 !20 = !DIDerivedType(tag: DW_TAG_member, name: "b", line: 7, size: 32, align: 32, flags: DIFlagPrivate, file: !28, scope: !18, baseType: !10)
4444 !13 = !{!14, !15}
4545 !14 = !DIDerivedType(tag: DW_TAG_member, name: "a", line: 10, size: 32, align: 32, file: !27, scope: !12, baseType: !5)
4646 !15 = !DIDerivedType(tag: DW_TAG_member, name: "b", line: 10, size: 32, align: 32, offset: 32, file: !27, scope: !12, baseType: !5)
47 !16 = !DIGlobalVariable(name: "i", line: 5, isLocal: false, isDefinition: true, scope: !1, file: !1, type: !5)
47 !16 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "i", line: 5, isLocal: false, isDefinition: true, scope: !1, file: !1, type: !5))
4848 !17 = !DILocation(line: 15, scope: !18)
4949 !18 = distinct !DILexicalBlock(line: 14, column: 0, file: !1, scope: !6)
5050 !19 = !DILocation(line: 9, scope: !0, inlinedAt: !17)
8585 !18 = !DISubroutineType(types: !19)
8686 !19 = !{!15}
8787 !20 = !{!21}
88 !21 = !DIGlobalVariable(name: "a", scope: !0, file: !1, line: 4, type: !11, isLocal: false, isDefinition: true)
88 !21 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", scope: !0, file: !1, line: 4, type: !11, isLocal: false, isDefinition: true))
8989 !22 = !{i32 2, !"Dwarf Version", i32 2}
9090 !23 = !{i32 2, !"Debug Info Version", i32 3}
9191 !24 = !{i32 1, !"PIC Level", i32 2}
5555 !llvm.module.flags = !{!14, !15}
5656 !llvm.ident = !{!16}
5757
58 !0 = distinct !DIGlobalVariable(name: "d", scope: !1, file: !5, line: 7, type: !6, isLocal: false, isDefinition: true, align: 16384)
58 !0 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "d", scope: !1, file: !5, line: 7, type: !6, isLocal: false, isDefinition: true, align: 16384))
5959 !1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, producer: "clang version 4.0.0 (http://llvm.org/git/clang.git 9ce5220b821054019059c2ac4a9b132c7723832d) (http://llvm.org/git/llvm.git 9a6298be89ce0359b151c0a37af2776a12c69e85)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !3, globals: !4)
6060 !2 = !DIFile(filename: "test.c", directory: "/tmp")
6161 !3 = !{}
117117 !llvm.module.flags = !{!19, !20}
118118 !llvm.ident = !{!21}
119119
120 !0 = distinct !DIGlobalVariable(name: "c0", scope: !1, file: !5, line: 19, type: !17, isLocal: false, isDefinition: true)
120 !0 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c0", scope: !1, file: !5, line: 19, type: !17, isLocal: false, isDefinition: true))
121121 !1 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !2, producer: "clang version 4.0.0 (http://llvm.org/git/clang.git 9ce5220b821054019059c2ac4a9b132c7723832d) (http://llvm.org/git/llvm.git 9a6298be89ce0359b151c0a37af2776a12c69e85)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !3, globals: !10)
122122 !2 = !DIFile(filename: "test.cpp", directory: "/tmp")
123123 !3 = !{!4}
128128 !8 = !DIEnumerator(name: "B", value: 1)
129129 !9 = !DIEnumerator(name: "C", value: 2)
130130 !10 = !{!0, !11}
131 !11 = distinct !DIGlobalVariable(name: "s", scope: !1, file: !5, line: 21, type: !12, isLocal: false, isDefinition: true, align: 16384)
131 !11 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "s", scope: !1, file: !5, line: 21, type: !12, isLocal: false, isDefinition: true, align: 16384))
132132 !12 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S", file: !5, line: 1, size: 2048, elements: !13, identifier: "_ZTS1S")
133133 !13 = !{!14, !16}
134134 !14 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !12, file: !5, line: 2, baseType: !15, size: 8)
6767 !llvm.module.flags = !{!11, !12}
6868 !llvm.ident = !{!13}
6969
70 !0 = distinct !DIGlobalVariable(name: "s0", scope: !1, file: !5, line: 10, type: !6, isLocal: false, isDefinition: true)
70 !0 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "s0", scope: !1, file: !5, line: 10, type: !6, isLocal: false, isDefinition: true))
7171 !1 = distinct !DICompileUnit(language: DW_LANG_ObjC, file: !2, producer: "clang version 4.0.0 (http://llvm.org/git/clang.git 9ce5220b821054019059c2ac4a9b132c7723832d) (http://llvm.org/git/llvm.git 9a6298be89ce0359b151c0a37af2776a12c69e85)", isOptimized: false, runtimeVersion: 1, emissionKind: FullDebug, enums: !3, globals: !4)
7272 !2 = !DIFile(filename: "test.m", directory: "/tmp")
7373 !3 = !{}
4141 !8 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
4242 !9 = distinct !DISubprogram(name: "bar_d", linkageName: "bar", scope: !5, file: !5, line: 3, type: !6, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
4343 !10 = !{!11}
44 !11 = !DIGlobalVariable(name: "zed", scope: !0, file: !5, line: 6, type: !12, isLocal: false, isDefinition: true)
44 !11 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "zed", scope: !0, file: !5, line: 6, type: !12, isLocal: false, isDefinition: true))
4545 !12 = !DICompositeType(tag: DW_TAG_array_type, baseType: !13, size: 64, align: 64, elements: !15)
4646 !13 = !DIDerivedType(tag: DW_TAG_typedef, name: "vifunc", file: !5, line: 5, baseType: !14)
4747 !14 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !6, size: 64, align: 64)
3838 !7 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !8)
3939 !8 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
4040 !9 = !{!10}
41 !10 = !DIGlobalVariable(name: "f", line: 6, isLocal: false, isDefinition: true, scope: null, file: !11, type: !4)
41 !10 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "f", line: 6, isLocal: false, isDefinition: true, scope: null, file: !11, type: !4))
4242 !11 = !DIFile(filename: "simple.cpp", directory: "/tmp/dbginfo")
4343 !12 = !{i32 2, !"Dwarf Version", i32 4}
4444 !13 = !{i32 1, !"Debug Info Version", i32 3}
2121 !llvm.module.flags = !{!9, !10}
2222 !llvm.ident = !{!11}
2323
24 !0 = distinct !DIGlobalVariable(name: "i", scope: !1, file: !5, line: 1, type: !6, isLocal: false, isDefinition: true)
24 !0 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "i", scope: !1, file: !5, line: 1, type: !6, isLocal: false, isDefinition: true))
2525 !1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, producer: "clang version 4.0.0 (http://llvm.org/git/clang.git cd238117e3a8a57271a82d0bb03d6df6ad8f073e) (http://llvm.org/git/llvm.git 9fd063832c1541aad3907cd60ac344d36997905f)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !3, globals: !4)
2626 !2 = !DIFile(filename: "atomic.c", directory: "/tmp")
2727 !3 = !{}
2222 !llvm.module.flags = !{!9, !10}
2323 !llvm.ident = !{!11}
2424
25 !0 = distinct !DIGlobalVariable(name: "i", scope: !1, file: !5, line: 1, type: !6, isLocal: false, isDefinition: true)
25 !0 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "i", scope: !1, file: !5, line: 1, type: !6, isLocal: false, isDefinition: true))
2626 !1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, producer: "clang version 4.0.0 (http://llvm.org/git/clang.git cd238117e3a8a57271a82d0bb03d6df6ad8f073e) (http://llvm.org/git/llvm.git 9fd063832c1541aad3907cd60ac344d36997905f)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !3, globals: !4)
2727 !2 = !DIFile(filename: "atomic.c", directory: "/tmp")
2828 !3 = !{}
3030 !1 = !DIFile(filename: "bitfield.c", directory: "/Volumes/Data/llvm")
3131 !2 = !{}
3232 !3 = !{!4}
33 !4 = distinct !DIGlobalVariable(name: "s", scope: !0, file: !1, line: 8, type: !5, isLocal: false, isDefinition: true)
33 !4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "s", scope: !0, file: !1, line: 8, type: !5, isLocal: false, isDefinition: true))
3434 !5 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "PackedBits", file: !1, line: 3, size: 40, elements: !6)
3535 !6 = !{!7, !9, !13}
3636
5757 !1 = !DIFile(filename: "bitfields.c", directory: "/")
5858 !2 = !{}
5959 !3 = !{!4}
60 !4 = !DIGlobalVariable(name: "b", scope: !0, file: !5, line: 8, type: !6, isLocal: false, isDefinition: true)
60 !4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "b", scope: !0, file: !5, line: 8, type: !6, isLocal: false, isDefinition: true))
6161 !5 = !DIFile(filename: "bitfields.c", directory: "/")
6262 !6 = !DICompositeType(tag: DW_TAG_structure_type, name: "bitfield", file: !5, line: 1, size: 96, elements: !7)
6363 !7 = !{!8, !10, !11, !12}
2020 !1 = !DIFile(filename: "simple.c", directory: "/tmp/dbginfo")
2121 !2 = !{}
2222 !3 = !{!4}
23 !4 = !DIGlobalVariable(name: "f", line: 2, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6)
23 !4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "f", line: 2, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6))
2424 !5 = !DIFile(filename: "simple.c", directory: "/tmp/dbginfo")
2525 !6 = !DICompositeType(tag: DW_TAG_structure_type, name: "foo", line: 1, align: 8, file: !1, elements: !2)
2626 !7 = !{i32 2, !"Dwarf Version", i32 4}
117117 !45 = !DILocalVariable(name: "this", line: 4, arg: 1, flags: DIFlagArtificial, scope: !31, file: !6, type: !34)
118118 !46 = !DILocalVariable(name: "aValue", line: 4, arg: 2, scope: !31, file: !6, type: !9)
119119 !47 = !{!49}
120 !49 = !DIGlobalVariable(name: "mRefCnt", line: 9, isLocal: false, isDefinition: true, scope: null, file: !6, type: !37)
120 !49 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "mRefCnt", line: 9, isLocal: false, isDefinition: true, scope: null, file: !6, type: !37))
121121 !50 = !DILocation(line: 5, column: 5, scope: !51, inlinedAt: !52)
122122 !51 = distinct !DILexicalBlock(line: 4, column: 29, file: !6, scope: !31)
123123 !52 = !DILocation(line: 15, scope: !53)
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}
83 !22 = !DIGlobalVariable(name: "a", line: 8, isLocal: false, isDefinition: true, scope: null, file: !15, type: !4)
83 !22 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", line: 8, isLocal: false, isDefinition: true, scope: null, file: !15, type: !4))
8484 !23 = !{i32 2, !"Dwarf Version", i32 4}
8585 !24 = !{i32 1, !"Debug Info Version", i32 3}
8686 !25 = !{!"clang version 3.5 (trunk 199923) (llvm/trunk 199940)"}
4444 !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}
47 !11 = !DIGlobalVariable(name: "f", line: 6, isLocal: false, isDefinition: true, scope: null, file: !12, type: !4)
47 !11 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "f", line: 6, isLocal: false, isDefinition: true, scope: null, file: !12, type: !4))
4848 !12 = !DIFile(filename: "data_member_location.cpp", directory: "/tmp/dbginfo")
4949 !13 = !{i32 2, !"Dwarf Version", i32 4}
5050 !14 = !{!"clang version 3.4 "}
2121 !7 = !DISubroutineType(types: !8)
2222 !8 = !{null}
2323 !11 = !{!13}
24 !13 = !DIGlobalVariable(name: "s", line: 2, isLocal: false, isDefinition: true, scope: null, file: !6, type: !14)
24 !13 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "s", line: 2, isLocal: false, isDefinition: true, scope: null, file: !6, type: !14))
2525 !14 = !DICompositeType(tag: DW_TAG_array_type, size: 34359738368, align: 8, baseType: !15, elements: !16)
2626 !15 = !DIBasicType(tag: DW_TAG_base_type, name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
2727 !16 = !{!17}
9292 !16 = !DIBasicType(tag: DW_TAG_base_type, name: "float", size: 32, align: 32, encoding: DW_ATE_float)
9393 !17 = !DIDerivedType(tag: DW_TAG_member, name: "nums", line: 3, size: 32, align: 32, offset: 64, file: !42, scope: !1, baseType: !5)
9494 !18 = !DILocalVariable(name: "nums", line: 7, arg: 2, scope: !0, file: !1, type: !5)
95 !19 = !DIGlobalVariable(name: "p", line: 14, isLocal: false, isDefinition: true, scope: !2, file: !1, type: !11)
95 !19 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "p", line: 14, isLocal: false, isDefinition: true, scope: !2, file: !1, type: !11))
9696 !20 = !DILocation(line: 7, column: 13, scope: !0)
9797 !21 = !DILocation(line: 7, column: 21, scope: !0)
9898 !22 = !DILocation(line: 9, column: 3, scope: !23)
8888 !12 = !DILocalVariable(name: "argv", arg: 2, scope: !4, file: !1, line: 4, type: !8)
8989 !13 = !DILocalVariable(name: "argc", arg: 1, scope: !4, file: !1, line: 4, type: !7)
9090 !14 = !{!15}
91 !15 = !DIGlobalVariable(name: "x", scope: !0, file: !1, line: 1, type: !16, isLocal: false, isDefinition: true)
91 !15 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", scope: !0, file: !1, line: 1, type: !16, isLocal: false, isDefinition: true))
9292 !16 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !7)
9393 !17 = !{i32 2, !"Dwarf Version", i32 4}
9494 !18 = !{i32 2, !"Debug Info Version", i32 3}
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: !4)
143 !36 = !DIGlobalVariable(name: "b", line: 38, isLocal: false, isDefinition: true, scope: null, file: !31, type: !12)
144 !37 = !DIGlobalVariable(name: "u", line: 39, isLocal: false, isDefinition: true, scope: null, file: !31, type: !22)
142 !35 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", line: 37, isLocal: false, isDefinition: true, scope: null, file: !31, type: !4))
143 !36 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "b", line: 38, isLocal: false, isDefinition: true, scope: null, file: !31, type: !12))
144 !37 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "u", line: 39, isLocal: false, isDefinition: true, scope: null, file: !31, type: !22))
145145 !38 = !{i32 2, !"Dwarf Version", i32 2}
146146 !39 = !{i32 2, !"Debug Info Version", i32 3}
147147 !40 = !{!"clang version 3.6.0 "}
151151 !1 = !DIFile(filename: "/llvm/tools/clang/test/CodeGen/", directory: "/llvm/_build.ninja.release")
152152 !2 = !{}
153153 !3 = !{!4, !18, !25, !35}
154 !4 = !DIGlobalVariable(name: "l0", scope: !0, file: !5, line: 88, type: !6, isLocal: false, isDefinition: true)
154 !4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "l0", scope: !0, file: !5, line: 88, type: !6, isLocal: false, isDefinition: true))
155155 !5 = !DIFile(filename: "/llvm/tools/clang/test/CodeGen/debug-info-packed-struct.c", directory: "/llvm/_build.ninja.release")
156156 !6 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout0", file: !5, line: 15, size: 192, elements: !7)
157157 !7 = !{!8, !10, !17}
165165 !15 = !DIDerivedType(tag: DW_TAG_member, name: "l", scope: !11, file: !5, line: 13, baseType: !16, size: 60, offset: 4)
166166 !16 = !DIBasicType(name: "long long int", size: 64, encoding: DW_ATE_signed)
167167 !17 = !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs16", scope: !6, file: !5, line: 18, baseType: !14, size: 1, offset: 128)
168 !18 = !DIGlobalVariable(name: "l1", scope: !0, file: !5, line: 89, type: !19, isLocal: false, isDefinition: true)
168 !18 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "l1", scope: !0, file: !5, line: 89, type: !19, isLocal: false, isDefinition: true))
169169 !19 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout1", file: !5, line: 34, size: 96, elements: !20)
170170 !20 = !{!21, !22, !24}
171171 !21 = !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs0", scope: !19, file: !5, line: 35, baseType: !9, size: 8)
172172 !22 = !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs1", scope: !19, file: !5, line: 36, baseType: !23, size: 64, offset: 8)
173173 !23 = !DICompositeType(tag: DW_TAG_structure_type, name: "size8_anon", file: !5, line: 30, size: 64, elements: !2)
174174 !24 = !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs9", scope: !19, file: !5, line: 37, baseType: !14, size: 1, offset: 72)
175 !25 = !DIGlobalVariable(name: "l2", scope: !0, file: !5, line: 90, type: !26, isLocal: false, isDefinition: true)
175 !25 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "l2", scope: !0, file: !5, line: 90, type: !26, isLocal: false, isDefinition: true))
176176 !26 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout2", file: !5, line: 54, size: 80, elements: !27)
177177 !27 = !{!28, !29, !34}
178178 !28 = !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs0", scope: !26, file: !5, line: 55, baseType: !9, size: 8)
182182 !32 = !DIDerivedType(tag: DW_TAG_member, name: "i", scope: !30, file: !5, line: 51, baseType: !14, size: 4)
183183 !33 = !DIDerivedType(tag: DW_TAG_member, name: "l", scope: !30, file: !5, line: 52, baseType: !16, size: 60, offset: 4)
184184 !34 = !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs9", scope: !26, file: !5, line: 57, baseType: !14, size: 1, offset: 72)
185 !35 = !DIGlobalVariable(name: "l3", scope: !0, file: !5, line: 91, type: !36, isLocal: false, isDefinition: true)
185 !35 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "l3", scope: !0, file: !5, line: 91, type: !36, isLocal: false, isDefinition: true))
186186 !36 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout3", file: !5, line: 76, size: 128, elements: !37)
187187 !37 = !{!38, !39, !44}
188188 !38 = !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs0", scope: !36, file: !5, line: 77, baseType: !9, size: 8)
6666 !8 = !{!9}
6767 !9 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
6868 !10 = !{!12, !27, !28}
69 !12 = !DIGlobalVariable(name: "a", linkageName: "_ZN1C1aE", line: 14, isLocal: false, isDefinition: true, scope: null, file: !6, type: !9, declaration: !15)
69 !12 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", linkageName: "_ZN1C1aE", line: 14, isLocal: false, isDefinition: true, scope: null, file: !6, type: !9, declaration: !15))
7070 !13 = !DICompositeType(tag: DW_TAG_class_type, name: "C", line: 1, size: 32, align: 32, file: !33, elements: !14)
7171 !14 = !{!15, !16, !19, !20, !23, !24, !26}
7272 !15 = !DIDerivedType(tag: DW_TAG_member, name: "a", line: 3, flags: DIFlagPrivate | DIFlagStaticMember, file: !33, scope: !13, baseType: !9)
8181 !24 = !DIDerivedType(tag: DW_TAG_member, name: "const_c", line: 10, flags: DIFlagPublic | DIFlagStaticMember, file: !33, scope: !13, baseType: !25, extraData: i32 18)
8282 !25 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !9)
8383 !26 = !DIDerivedType(tag: DW_TAG_member, name: "d", line: 11, size: 32, align: 32, flags: DIFlagPublic, file: !33, scope: !13, baseType: !9)
84 !27 = !DIGlobalVariable(name: "b", linkageName: "_ZN1C1bE", line: 15, isLocal: false, isDefinition: true, scope: null, file: !6, type: !9, declaration: !19)
85 !28 = !DIGlobalVariable(name: "c", linkageName: "_ZN1C1cE", line: 16, isLocal: false, isDefinition: true, scope: null, file: !6, type: !9, declaration: !23)
84 !27 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "b", linkageName: "_ZN1C1bE", line: 15, isLocal: false, isDefinition: true, scope: null, file: !6, type: !9, declaration: !19))
85 !28 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c", linkageName: "_ZN1C1cE", line: 16, isLocal: false, isDefinition: true, scope: null, file: !6, type: !9, declaration: !23))
8686 !29 = !DILocalVariable(name: "instance_C", line: 20, scope: !5, file: !6, type: !13)
8787 !30 = !DILocation(line: 20, scope: !5)
8888 !31 = !DILocation(line: 21, scope: !5)
8282 !1 = !DIFile(filename: "frame.c", directory: "/home/user/test")
8383 !2 = !{}
8484 !3 = !{!4, !6, !7, !8}
85 !4 = distinct !DIGlobalVariable(name: "data", scope: !0, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true)
85 !4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "data", scope: !0, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true))
8686 !5 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
87 !6 = distinct !DIGlobalVariable(name: "sum", scope: !0, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true)
88 !7 = distinct !DIGlobalVariable(name: "zero", scope: !0, file: !1, line: 3, type: !5, isLocal: false, isDefinition: true)
89 !8 = distinct !DIGlobalVariable(name: "ptr", scope: !0, file: !1, line: 4, type: !9, isLocal: false, isDefinition: true)
87 !6 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "sum", scope: !0, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true))
88 !7 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "zero", scope: !0, file: !1, line: 3, type: !5, isLocal: false, isDefinition: true))
89 !8 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ptr", scope: !0, file: !1, line: 4, type: !9, isLocal: false, isDefinition: true))
9090 !9 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !5, size: 64, align: 64)
9191 !10 = !{i32 2, !"Dwarf Version", i32 4}
9292 !11 = !{i32 2, !"Debug Info Version", i32 3}
3636 !1 = !DIFile(filename: "debugger-tune.cpp", directory: "/home/probinson/projects/scratch")
3737 !2 = !{}
3838 !3 = !{!4}
39 !4 = !DIGlobalVariable(name: "globalvar", scope: !0, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true)
39 !4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "globalvar", scope: !0, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true))
4040 !5 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
4141 !6 = !{i32 2, !"Dwarf Version", i32 4}
4242 !7 = !{i32 2, !"Debug Info Version", i32 3}
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: !4)
130 !29 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "f", line: 8, isLocal: false, isDefinition: true, scope: null, file: !11, type: !4))
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)"}
1313 !1 = !DIFile(filename: "/usr/local/google/home/majnemer/Downloads/", directory: "/usr/local/google/home/majnemer/llvm/src")
1414 !2 = !{}
1515 !3 = !{!4}
16 !4 = distinct !DIGlobalVariable(name: "id", linkageName: "\01?id@?$numpunct@D@@0HA", scope: !0, file: !5, line: 4, type: !6, isLocal: false, isDefinition: true, declaration: !7)
16 !4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "id", linkageName: "\01?id@?$numpunct@D@@0HA", scope: !0, file: !5, line: 4, type: !6, isLocal: false, isDefinition: true, declaration: !7))
1717 !5 = !DIFile(filename: "/usr/local/google/home/majnemer/Downloads/t.ii", directory: "/usr/local/google/home/majnemer/llvm/src")
1818 !6 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
1919 !7 = !DIDerivedType(tag: DW_TAG_member, name: "id", scope: !8, file: !5, line: 2, baseType: !6, flags: DIFlagStaticMember)
7676 !15 = !DISubroutineType(types: !16)
7777 !16 = !{!8}
7878 !17 = !{!18}
79 !18 = !DIGlobalVariable(name: "global", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !8)
79 !18 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "global", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !8))
8080 !19 = !{i32 2, !"Dwarf Version", i32 4}
8181 !20 = !DILocation(line: 2, scope: !4)
8282 !21 = !DILocation(line: 3, scope: !11)
6969 !6 = !DISubroutineType(types: !7)
7070 !7 = !{null}
7171 !8 = !{!9, !11, !12}
72 !9 = !DIGlobalVariable(name: "some_data", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !10)
72 !9 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "some_data", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !10))
7373 !10 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
74 !11 = !DIGlobalVariable(name: "some_other", line: 3, isLocal: false, isDefinition: true, scope: null, file: !5, type: !10)
75 !12 = !DIGlobalVariable(name: "some_bss", line: 2, isLocal: false, isDefinition: true, scope: null, file: !5, type: !10)
74 !11 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "some_other", line: 3, isLocal: false, isDefinition: true, scope: null, file: !5, type: !10))
75 !12 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "some_bss", line: 2, isLocal: false, isDefinition: true, scope: null, file: !5, type: !10))
7676 !13 = !{i32 2, !"Dwarf Version", i32 4}
7777 !14 = !DILocation(line: 7, scope: !4)
7878 !15 = !DILocation(line: 8, scope: !4)
6161 !7 = !{!8}
6262 !8 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
6363 !9 = !{!10}
64 !10 = !DIGlobalVariable(name: "global_var", linkageName: "_ZN4test10global_varE", scope: !5, file: !1, line: 2, type: !8, isLocal: false, isDefinition: true)
64 !10 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "global_var", linkageName: "_ZN4test10global_varE", scope: !5, file: !1, line: 2, type: !8, isLocal: false, isDefinition: true))
6565 !11 = !{i32 2, !"Dwarf Version", i32 4}
6666 !12 = !{i32 2, !"Debug Info Version", i32 3}
6767 !13 = !{!"clang version 3.8.0 (trunk 244662)"}
119119 !22 = !DISubroutineType(types: !23)
120120 !23 = !{null}
121121 !24 = !{!25, !26, !27}
122 !25 = !DIGlobalVariable(name: "static_member_variable", linkageName: "_ZN1C22static_member_variableE", line: 7, isLocal: false, isDefinition: true, scope: !8, file: !4, type: !11, declaration: !10)
123 !26 = !DIGlobalVariable(name: "global_variable", line: 17, isLocal: false, isDefinition: true, scope: null, file: !4, type: !8)
124 !27 = !DIGlobalVariable(name: "global_namespace_variable", linkageName: "_ZN2ns25global_namespace_variableE", line: 27, isLocal: false, isDefinition: true, scope: !21, file: !4, type: !11)
122 !25 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "static_member_variable", linkageName: "_ZN1C22static_member_variableE", line: 7, isLocal: false, isDefinition: true, scope: !8, file: !4, type: !11, declaration: !10))
123 !26 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "global_variable", line: 17, isLocal: false, isDefinition: true, scope: null, file: !4, type: !8))
124 !27 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "global_namespace_variable", linkageName: "_ZN2ns25global_namespace_variableE", line: 27, isLocal: false, isDefinition: true, scope: !21, file: !4, type: !11))
125125 !28 = !DILocalVariable(name: "this", line: 9, arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !3, file: !4, type: !29)
126126 !29 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, baseType: !8)
127127 !30 = !DILocation(line: 9, scope: !3)
2929 !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.3 (trunk 169136)", isOptimized: false, emissionKind: FullDebug, file: !20, enums: !1, retainedTypes: !1, globals: !3, imports: !1)
3030 !1 = !{}
3131 !3 = !{!5}
32 !5 = !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7)
32 !5 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7))
3333 !6 = !DIFile(filename: "t.cpp", directory: "/Volumes/Sandbox/llvm")
3434 !7 = !DICompositeType(tag: DW_TAG_class_type, name: "A", line: 1, align: 32, file: !20, elements: !8)
3535 !8 = !{!9, !14}
+3
-3