mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-27 05:30:49 +00:00
[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 and a change to the Bitcode record for DIGlobalVariable, that makes upgrading the old format unambiguous also for variables without DIExpressions. <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@290153 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
23755c9509
commit
7b500b4bdf
@ -252,6 +252,7 @@ enum MetadataCodes {
|
||||
METADATA_MACRO_FILE = 34, // [distinct, macinfo, line, file, ...]
|
||||
METADATA_STRINGS = 35, // [count, offset] blob([lengths][chars])
|
||||
METADATA_GLOBAL_DECL_ATTACHMENT = 36, // [valueid, n x [id, mdnode]]
|
||||
METADATA_GLOBAL_VAR_EXPR = 37, // [distinct, var, expr]
|
||||
};
|
||||
|
||||
// The constants block (CONSTANTS_BLOCK_ID) describes emission for each
|
||||
|
@ -449,8 +449,7 @@ namespace llvm {
|
||||
/// implicitly uniques the values returned.
|
||||
DISubrange *getOrCreateSubrange(int64_t Lo, int64_t Count);
|
||||
|
||||
/// Create a new descriptor for the specified
|
||||
/// variable.
|
||||
/// Create a new descriptor for the specified variable.
|
||||
/// \param Context Variable scope.
|
||||
/// \param Name Name of the variable.
|
||||
/// \param LinkageName Mangled name of the variable.
|
||||
@ -464,20 +463,18 @@ namespace llvm {
|
||||
/// \param Decl Reference to the corresponding declaration.
|
||||
/// \param AlignInBits Variable alignment(or 0 if no alignment attr was
|
||||
/// specified)
|
||||
DIGlobalVariable *createGlobalVariable(DIScope *Context, StringRef Name,
|
||||
StringRef LinkageName, DIFile *File,
|
||||
unsigned LineNo, DIType *Ty,
|
||||
bool isLocalToUnit,
|
||||
DIExpression *Expr = nullptr,
|
||||
MDNode *Decl = nullptr,
|
||||
uint32_t AlignInBits = 0);
|
||||
DIGlobalVariableExpression *createGlobalVariableExpression(
|
||||
DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *File,
|
||||
unsigned LineNo, DIType *Ty, bool isLocalToUnit,
|
||||
DIExpression *Expr = nullptr, MDNode *Decl = nullptr,
|
||||
uint32_t AlignInBits = 0);
|
||||
|
||||
/// Identical to createGlobalVariable
|
||||
/// except that the resulting DbgNode is temporary and meant to be RAUWed.
|
||||
DIGlobalVariable *createTempGlobalVariableFwdDecl(
|
||||
DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *File,
|
||||
unsigned LineNo, DIType *Ty, bool isLocalToUnit, DIExpression *Expr,
|
||||
MDNode *Decl = nullptr, uint32_t AlignInBits = 0);
|
||||
unsigned LineNo, DIType *Ty, bool isLocalToUnit, MDNode *Decl = nullptr,
|
||||
uint32_t AlignInBits = 0);
|
||||
|
||||
/// Create a new descriptor for an auto variable. This is a local variable
|
||||
/// that is not a subprogram parameter.
|
||||
|
@ -89,7 +89,7 @@ private:
|
||||
void processSubprogram(DISubprogram *SP);
|
||||
void processScope(DIScope *Scope);
|
||||
bool addCompileUnit(DICompileUnit *CU);
|
||||
bool addGlobalVariable(DIGlobalVariable *DIG);
|
||||
bool addGlobalVariable(DIGlobalVariableExpression *DIG);
|
||||
bool addSubprogram(DISubprogram *SP);
|
||||
bool addType(DIType *DT);
|
||||
bool addScope(DIScope *Scope);
|
||||
@ -98,8 +98,8 @@ public:
|
||||
typedef SmallVectorImpl<DICompileUnit *>::const_iterator
|
||||
compile_unit_iterator;
|
||||
typedef SmallVectorImpl<DISubprogram *>::const_iterator subprogram_iterator;
|
||||
typedef SmallVectorImpl<DIGlobalVariable *>::const_iterator
|
||||
global_variable_iterator;
|
||||
typedef SmallVectorImpl<DIGlobalVariableExpression *>::const_iterator
|
||||
global_variable_expression_iterator;
|
||||
typedef SmallVectorImpl<DIType *>::const_iterator type_iterator;
|
||||
typedef SmallVectorImpl<DIScope *>::const_iterator scope_iterator;
|
||||
|
||||
@ -111,7 +111,7 @@ public:
|
||||
return make_range(SPs.begin(), SPs.end());
|
||||
}
|
||||
|
||||
iterator_range<global_variable_iterator> global_variables() const {
|
||||
iterator_range<global_variable_expression_iterator> global_variables() const {
|
||||
return make_range(GVs.begin(), GVs.end());
|
||||
}
|
||||
|
||||
@ -132,7 +132,7 @@ public:
|
||||
private:
|
||||
SmallVector<DICompileUnit *, 8> CUs;
|
||||
SmallVector<DISubprogram *, 8> SPs;
|
||||
SmallVector<DIGlobalVariable *, 8> GVs;
|
||||
SmallVector<DIGlobalVariableExpression *, 8> GVs;
|
||||
SmallVector<DIType *, 8> TYs;
|
||||
SmallVector<DIScope *, 8> Scopes;
|
||||
SmallPtrSet<const MDNode *, 32> NodesSeen;
|
||||
|
@ -1038,7 +1038,8 @@ private:
|
||||
StringRef Producer, bool IsOptimized, StringRef Flags,
|
||||
unsigned RuntimeVersion, StringRef SplitDebugFilename,
|
||||
unsigned EmissionKind, DICompositeTypeArray EnumTypes,
|
||||
DIScopeArray RetainedTypes, DIGlobalVariableArray GlobalVariables,
|
||||
DIScopeArray RetainedTypes,
|
||||
DIGlobalVariableExpressionArray GlobalVariables,
|
||||
DIImportedEntityArray ImportedEntities, DIMacroNodeArray Macros,
|
||||
uint64_t DWOId, bool SplitDebugInlining, StorageType Storage,
|
||||
bool ShouldCreate = true) {
|
||||
@ -1078,7 +1079,7 @@ public:
|
||||
bool IsOptimized, StringRef Flags, unsigned RuntimeVersion,
|
||||
StringRef SplitDebugFilename, DebugEmissionKind EmissionKind,
|
||||
DICompositeTypeArray EnumTypes, DIScopeArray RetainedTypes,
|
||||
DIGlobalVariableArray GlobalVariables,
|
||||
DIGlobalVariableExpressionArray GlobalVariables,
|
||||
DIImportedEntityArray ImportedEntities, DIMacroNodeArray Macros,
|
||||
uint64_t DWOId, bool SplitDebugInlining),
|
||||
(SourceLanguage, File, Producer, IsOptimized, Flags, RuntimeVersion,
|
||||
@ -1113,7 +1114,7 @@ public:
|
||||
DIScopeArray getRetainedTypes() const {
|
||||
return cast_or_null<MDTuple>(getRawRetainedTypes());
|
||||
}
|
||||
DIGlobalVariableArray getGlobalVariables() const {
|
||||
DIGlobalVariableExpressionArray getGlobalVariables() const {
|
||||
return cast_or_null<MDTuple>(getRawGlobalVariables());
|
||||
}
|
||||
DIImportedEntityArray getImportedEntities() const {
|
||||
@ -1152,7 +1153,7 @@ public:
|
||||
void replaceRetainedTypes(DITypeArray N) {
|
||||
replaceOperandWith(5, N.get());
|
||||
}
|
||||
void replaceGlobalVariables(DIGlobalVariableArray N) {
|
||||
void replaceGlobalVariables(DIGlobalVariableExpressionArray N) {
|
||||
replaceOperandWith(6, N.get());
|
||||
}
|
||||
void replaceImportedEntities(DIImportedEntityArray N) {
|
||||
@ -1981,6 +1982,9 @@ public:
|
||||
/// Return the size of this fragment in bits.
|
||||
uint64_t getFragmentSizeInBits() const;
|
||||
|
||||
/// Determine whether this represents a standalone constant value.
|
||||
bool isConstant() const;
|
||||
|
||||
typedef ArrayRef<uint64_t>::iterator element_iterator;
|
||||
element_iterator elements_begin() const { return getElements().begin(); }
|
||||
element_iterator elements_end() const { return getElements().end(); }
|
||||
@ -2100,30 +2104,30 @@ class DIGlobalVariable : public DIVariable {
|
||||
IsLocalToUnit(IsLocalToUnit), IsDefinition(IsDefinition) {}
|
||||
~DIGlobalVariable() = default;
|
||||
|
||||
static DIGlobalVariable *
|
||||
getImpl(LLVMContext &Context, DIScope *Scope, StringRef Name,
|
||||
StringRef LinkageName, DIFile *File, unsigned Line, DITypeRef Type,
|
||||
bool IsLocalToUnit, bool IsDefinition, DIExpression *Expr,
|
||||
DIDerivedType *StaticDataMemberDeclaration, uint32_t AlignInBits,
|
||||
StorageType Storage, bool ShouldCreate = true) {
|
||||
static DIGlobalVariable *getImpl(LLVMContext &Context, DIScope *Scope,
|
||||
StringRef Name, StringRef LinkageName,
|
||||
DIFile *File, unsigned Line, DITypeRef Type,
|
||||
bool IsLocalToUnit, bool IsDefinition,
|
||||
DIDerivedType *StaticDataMemberDeclaration,
|
||||
uint32_t AlignInBits, StorageType Storage,
|
||||
bool ShouldCreate = true) {
|
||||
return getImpl(Context, Scope, getCanonicalMDString(Context, Name),
|
||||
getCanonicalMDString(Context, LinkageName), File, Line, Type,
|
||||
IsLocalToUnit, IsDefinition, Expr,
|
||||
StaticDataMemberDeclaration, AlignInBits, Storage,
|
||||
ShouldCreate);
|
||||
IsLocalToUnit, IsDefinition, StaticDataMemberDeclaration,
|
||||
AlignInBits, Storage, ShouldCreate);
|
||||
}
|
||||
static DIGlobalVariable *
|
||||
getImpl(LLVMContext &Context, Metadata *Scope, MDString *Name,
|
||||
MDString *LinkageName, Metadata *File, unsigned Line, Metadata *Type,
|
||||
bool IsLocalToUnit, bool IsDefinition, Metadata *Expr,
|
||||
bool IsLocalToUnit, bool IsDefinition,
|
||||
Metadata *StaticDataMemberDeclaration, uint32_t AlignInBits,
|
||||
StorageType Storage, bool ShouldCreate = true);
|
||||
|
||||
TempDIGlobalVariable cloneImpl() const {
|
||||
return getTemporary(getContext(), getScope(), getName(), getLinkageName(),
|
||||
getFile(), getLine(), getType(), isLocalToUnit(),
|
||||
isDefinition(), getExpr(),
|
||||
getStaticDataMemberDeclaration(), getAlignInBits());
|
||||
isDefinition(), getStaticDataMemberDeclaration(),
|
||||
getAlignInBits());
|
||||
}
|
||||
|
||||
public:
|
||||
@ -2131,21 +2135,18 @@ public:
|
||||
(DIScope * Scope, StringRef Name, StringRef LinkageName,
|
||||
DIFile *File, unsigned Line, DITypeRef Type,
|
||||
bool IsLocalToUnit, bool IsDefinition,
|
||||
DIExpression *Expr,
|
||||
DIDerivedType *StaticDataMemberDeclaration,
|
||||
uint32_t AlignInBits),
|
||||
(Scope, Name, LinkageName, File, Line, Type, IsLocalToUnit,
|
||||
IsDefinition, Expr, StaticDataMemberDeclaration,
|
||||
AlignInBits))
|
||||
IsDefinition, StaticDataMemberDeclaration, AlignInBits))
|
||||
DEFINE_MDNODE_GET(DIGlobalVariable,
|
||||
(Metadata * Scope, MDString *Name, MDString *LinkageName,
|
||||
Metadata *File, unsigned Line, Metadata *Type,
|
||||
bool IsLocalToUnit, bool IsDefinition,
|
||||
Metadata *Expr, Metadata *StaticDataMemberDeclaration,
|
||||
Metadata *StaticDataMemberDeclaration,
|
||||
uint32_t AlignInBits),
|
||||
(Scope, Name, LinkageName, File, Line, Type, IsLocalToUnit,
|
||||
IsDefinition, Expr, StaticDataMemberDeclaration,
|
||||
AlignInBits))
|
||||
IsDefinition, StaticDataMemberDeclaration, AlignInBits))
|
||||
|
||||
TempDIGlobalVariable clone() const { return cloneImpl(); }
|
||||
|
||||
@ -2153,19 +2154,12 @@ public:
|
||||
bool isDefinition() const { return IsDefinition; }
|
||||
StringRef getDisplayName() const { return getStringOperand(4); }
|
||||
StringRef getLinkageName() const { return getStringOperand(5); }
|
||||
DIExpression *getExpr() const {
|
||||
return cast_or_null<DIExpression>(getRawExpr());
|
||||
}
|
||||
void replaceExpr(DIExpression *E) {
|
||||
replaceOperandWith(6, E);
|
||||
}
|
||||
DIDerivedType *getStaticDataMemberDeclaration() const {
|
||||
return cast_or_null<DIDerivedType>(getRawStaticDataMemberDeclaration());
|
||||
}
|
||||
|
||||
MDString *getRawLinkageName() const { return getOperandAs<MDString>(5); }
|
||||
Metadata *getRawExpr() const { return getOperand(6); }
|
||||
Metadata *getRawStaticDataMemberDeclaration() const { return getOperand(7); }
|
||||
Metadata *getRawStaticDataMemberDeclaration() const { return getOperand(6); }
|
||||
|
||||
static bool classof(const Metadata *MD) {
|
||||
return MD->getMetadataID() == DIGlobalVariableKind;
|
||||
@ -2391,6 +2385,45 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
/// A pair of DIGlobalVariable and DIExpression.
|
||||
class DIGlobalVariableExpression : public MDNode {
|
||||
friend class LLVMContextImpl;
|
||||
friend class MDNode;
|
||||
|
||||
DIGlobalVariableExpression(LLVMContext &C, StorageType Storage,
|
||||
ArrayRef<Metadata *> Ops)
|
||||
: MDNode(C, DIGlobalVariableExpressionKind, Storage, Ops) {}
|
||||
~DIGlobalVariableExpression() = default;
|
||||
|
||||
static DIGlobalVariableExpression *
|
||||
getImpl(LLVMContext &Context, Metadata *Variable, Metadata *Expression,
|
||||
StorageType Storage, bool ShouldCreate = true);
|
||||
|
||||
TempDIGlobalVariableExpression cloneImpl() const {
|
||||
return getTemporary(getContext(), getVariable(), getExpression());
|
||||
}
|
||||
|
||||
public:
|
||||
DEFINE_MDNODE_GET(DIGlobalVariableExpression,
|
||||
(Metadata * Variable, Metadata *Expression),
|
||||
(Variable, Expression))
|
||||
|
||||
TempDIGlobalVariableExpression clone() const { return cloneImpl(); }
|
||||
|
||||
Metadata *getRawVariable() const { return getOperand(0); }
|
||||
DIGlobalVariable *getVariable() const {
|
||||
return cast_or_null<DIGlobalVariable>(getRawVariable());
|
||||
}
|
||||
Metadata *getRawExpression() const { return getOperand(1); }
|
||||
DIExpression *getExpression() const {
|
||||
return cast_or_null<DIExpression>(getRawExpression());
|
||||
}
|
||||
|
||||
static bool classof(const Metadata *MD) {
|
||||
return MD->getMetadataID() == DIGlobalVariableExpressionKind;
|
||||
}
|
||||
};
|
||||
|
||||
/// Macro Info DWARF-like metadata node.
|
||||
///
|
||||
/// A metadata node with a DWARF macro info (i.e., a constant named
|
||||
|
@ -20,6 +20,7 @@
|
||||
#ifndef LLVM_IR_GLOBALVARIABLE_H
|
||||
#define LLVM_IR_GLOBALVARIABLE_H
|
||||
|
||||
#include "llvm/ADT/PointerUnion.h"
|
||||
#include "llvm/ADT/Twine.h"
|
||||
#include "llvm/ADT/ilist_node.h"
|
||||
#include "llvm/IR/GlobalObject.h"
|
||||
@ -31,10 +32,11 @@
|
||||
namespace llvm {
|
||||
|
||||
class Constant;
|
||||
class DIGlobalVariable;
|
||||
class Module;
|
||||
|
||||
template <typename ValueSubClass> class SymbolTableListTraits;
|
||||
class DIGlobalVariable;
|
||||
class DIGlobalVariableExpression;
|
||||
|
||||
class GlobalVariable : public GlobalObject, public ilist_node<GlobalVariable> {
|
||||
friend class SymbolTableListTraits<GlobalVariable>;
|
||||
@ -170,8 +172,11 @@ public:
|
||||
/// drops not only the reference to the initializer but also to any metadata.
|
||||
void dropAllReferences();
|
||||
|
||||
void addDebugInfo(DIGlobalVariable *GV);
|
||||
void getDebugInfo(SmallVectorImpl<DIGlobalVariable *> &GVs) const;
|
||||
/// Attach a DIGlobalVariableExpression.
|
||||
void addDebugInfo(DIGlobalVariableExpression *GV);
|
||||
|
||||
/// Fill the vector with all debug info attachements.
|
||||
void getDebugInfo(SmallVectorImpl<DIGlobalVariableExpression *> &GVs) const;
|
||||
|
||||
// Methods for support type inquiry through isa, cast, and dyn_cast:
|
||||
static inline bool classof(const Value *V) {
|
||||
|
@ -82,6 +82,7 @@ HANDLE_MDNODE_BRANCH(MDNode)
|
||||
HANDLE_MDNODE_LEAF_UNIQUABLE(MDTuple)
|
||||
HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DILocation)
|
||||
HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIExpression)
|
||||
HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIGlobalVariableExpression)
|
||||
HANDLE_SPECIALIZED_MDNODE_BRANCH(DINode)
|
||||
HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(GenericDINode)
|
||||
HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DISubrange)
|
||||
|
@ -91,7 +91,8 @@ void ModuleDebugInfoPrinter::print(raw_ostream &O, const Module *M) const {
|
||||
O << '\n';
|
||||
}
|
||||
|
||||
for (const DIGlobalVariable *GV : Finder.global_variables()) {
|
||||
for (auto GVU : Finder.global_variables()) {
|
||||
const auto *GV = GVU->getVariable();
|
||||
O << "Global variable: " << GV->getName();
|
||||
printFile(O, GV->getFilename(), GV->getDirectory(), GV->getLine());
|
||||
if (!GV->getLinkageName().empty())
|
||||
|
@ -4197,8 +4197,7 @@ bool LLParser::ParseDITemplateValueParameter(MDNode *&Result, bool IsDistinct) {
|
||||
/// ParseDIGlobalVariable:
|
||||
/// ::= !DIGlobalVariable(scope: !0, name: "foo", linkageName: "foo",
|
||||
/// file: !1, line: 7, type: !2, isLocal: false,
|
||||
/// isDefinition: true, variable: i32* @foo,
|
||||
/// declaration: !3, align: 8)
|
||||
/// isDefinition: true, declaration: !3, align: 8)
|
||||
bool LLParser::ParseDIGlobalVariable(MDNode *&Result, bool IsDistinct) {
|
||||
#define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \
|
||||
REQUIRED(name, MDStringField, (/* AllowEmpty */ false)); \
|
||||
@ -4209,7 +4208,6 @@ bool LLParser::ParseDIGlobalVariable(MDNode *&Result, bool IsDistinct) {
|
||||
OPTIONAL(type, MDField, ); \
|
||||
OPTIONAL(isLocal, MDBoolField, ); \
|
||||
OPTIONAL(isDefinition, MDBoolField, (true)); \
|
||||
OPTIONAL(expr, MDField, ); \
|
||||
OPTIONAL(declaration, MDField, ); \
|
||||
OPTIONAL(align, MDUnsignedField, (0, UINT32_MAX));
|
||||
PARSE_MD_FIELDS();
|
||||
@ -4218,8 +4216,7 @@ bool LLParser::ParseDIGlobalVariable(MDNode *&Result, bool IsDistinct) {
|
||||
Result = GET_OR_DISTINCT(DIGlobalVariable,
|
||||
(Context, scope.Val, name.Val, linkageName.Val,
|
||||
file.Val, line.Val, type.Val, isLocal.Val,
|
||||
isDefinition.Val, expr.Val, declaration.Val,
|
||||
align.Val));
|
||||
isDefinition.Val, declaration.Val, align.Val));
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -4287,6 +4284,21 @@ bool LLParser::ParseDIExpression(MDNode *&Result, bool IsDistinct) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/// ParseDIGlobalVariableExpression:
|
||||
/// ::= !DIGlobalVariableExpression(var: !0, expr: !1)
|
||||
bool LLParser::ParseDIGlobalVariableExpression(MDNode *&Result,
|
||||
bool IsDistinct) {
|
||||
#define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \
|
||||
REQUIRED(var, MDField, ); \
|
||||
OPTIONAL(expr, MDField, );
|
||||
PARSE_MD_FIELDS();
|
||||
#undef VISIT_MD_FIELDS
|
||||
|
||||
Result =
|
||||
GET_OR_DISTINCT(DIGlobalVariableExpression, (Context, var.Val, expr.Val));
|
||||
return false;
|
||||
}
|
||||
|
||||
/// ParseDIObjCProperty:
|
||||
/// ::= !DIObjCProperty(name: "foo", file: !1, line: 7, setter: "setFoo",
|
||||
/// getter: "getFoo", attributes: 7, type: !2)
|
||||
|
@ -980,41 +980,55 @@ Error MetadataLoader::MetadataLoaderImpl::parseMetadata(bool ModuleLevel,
|
||||
if (Record.size() < 11 || Record.size() > 12)
|
||||
return error("Invalid record");
|
||||
|
||||
IsDistinct = Record[0];
|
||||
IsDistinct = Record[0] & 1;
|
||||
unsigned Version = Record[0] >> 1;
|
||||
|
||||
// Upgrade old metadata, which stored a global variable reference or a
|
||||
// ConstantInt here.
|
||||
Metadata *Expr = getMDOrNull(Record[9]);
|
||||
uint32_t AlignInBits = 0;
|
||||
if (Record.size() > 11) {
|
||||
if (Record[11] > (uint64_t)std::numeric_limits<uint32_t>::max())
|
||||
return error("Alignment value is too large");
|
||||
AlignInBits = Record[11];
|
||||
}
|
||||
GlobalVariable *Attach = nullptr;
|
||||
if (auto *CMD = dyn_cast_or_null<ConstantAsMetadata>(Expr)) {
|
||||
if (auto *GV = dyn_cast<GlobalVariable>(CMD->getValue())) {
|
||||
Attach = GV;
|
||||
Expr = nullptr;
|
||||
} else if (auto *CI = dyn_cast<ConstantInt>(CMD->getValue())) {
|
||||
Expr = DIExpression::get(Context,
|
||||
{dwarf::DW_OP_constu, CI->getZExtValue(),
|
||||
dwarf::DW_OP_stack_value});
|
||||
} else {
|
||||
Expr = nullptr;
|
||||
if (Version == 1) {
|
||||
MetadataList.assignValue(
|
||||
GET_OR_DISTINCT(DIGlobalVariable,
|
||||
(Context, getMDOrNull(Record[1]),
|
||||
getMDString(Record[2]), getMDString(Record[3]),
|
||||
getMDOrNull(Record[4]), Record[5],
|
||||
getDITypeRefOrNull(Record[6]), Record[7],
|
||||
Record[8], getMDOrNull(Record[10]), Record[11])),
|
||||
NextMetadataNo++);
|
||||
} else if (Version == 0) {
|
||||
// Upgrade old metadata, which stored a global variable reference or a
|
||||
// ConstantInt here.
|
||||
Metadata *Expr = getMDOrNull(Record[9]);
|
||||
uint32_t AlignInBits = 0;
|
||||
if (Record.size() > 11) {
|
||||
if (Record[11] > (uint64_t)std::numeric_limits<uint32_t>::max())
|
||||
return error("Alignment value is too large");
|
||||
AlignInBits = Record[11];
|
||||
}
|
||||
}
|
||||
GlobalVariable *Attach = nullptr;
|
||||
if (auto *CMD = dyn_cast_or_null<ConstantAsMetadata>(Expr)) {
|
||||
if (auto *GV = dyn_cast<GlobalVariable>(CMD->getValue())) {
|
||||
Attach = GV;
|
||||
Expr = nullptr;
|
||||
} else if (auto *CI = dyn_cast<ConstantInt>(CMD->getValue())) {
|
||||
Expr = DIExpression::get(Context,
|
||||
{dwarf::DW_OP_constu, CI->getZExtValue(),
|
||||
dwarf::DW_OP_stack_value});
|
||||
} else {
|
||||
Expr = nullptr;
|
||||
}
|
||||
}
|
||||
DIGlobalVariable *DGV = GET_OR_DISTINCT(
|
||||
DIGlobalVariable,
|
||||
(Context, getMDOrNull(Record[1]), getMDString(Record[2]),
|
||||
getMDString(Record[3]), getMDOrNull(Record[4]), Record[5],
|
||||
getDITypeRefOrNull(Record[6]), Record[7], Record[8],
|
||||
getMDOrNull(Record[10]), AlignInBits));
|
||||
|
||||
DIGlobalVariable *DGV = GET_OR_DISTINCT(
|
||||
DIGlobalVariable,
|
||||
(Context, getMDOrNull(Record[1]), getMDString(Record[2]),
|
||||
getMDString(Record[3]), getMDOrNull(Record[4]), Record[5],
|
||||
getDITypeRefOrNull(Record[6]), Record[7], Record[8], Expr,
|
||||
getMDOrNull(Record[10]), AlignInBits));
|
||||
MetadataList.assignValue(DGV, NextMetadataNo++);
|
||||
|
||||
if (Attach)
|
||||
Attach->addDebugInfo(DGV);
|
||||
auto *DGVE =
|
||||
DIGlobalVariableExpression::getDistinct(Context, DGV, Expr);
|
||||
MetadataList.assignValue(DGVE, NextMetadataNo++);
|
||||
if (Attach)
|
||||
Attach->addDebugInfo(DGVE);
|
||||
} else
|
||||
return error("Invalid record");
|
||||
|
||||
break;
|
||||
}
|
||||
@ -1064,6 +1078,17 @@ Error MetadataLoader::MetadataLoaderImpl::parseMetadata(bool ModuleLevel,
|
||||
NextMetadataNo++);
|
||||
break;
|
||||
}
|
||||
case bitc::METADATA_GLOBAL_VAR_EXPR: {
|
||||
if (Record.size() != 3)
|
||||
return error("Invalid record");
|
||||
|
||||
IsDistinct = Record[0];
|
||||
MetadataList.assignValue(GET_OR_DISTINCT(DIGlobalVariableExpression,
|
||||
(Context, getMDOrNull(Record[1]),
|
||||
getMDOrNull(Record[2]))),
|
||||
NextMetadataNo++);
|
||||
break;
|
||||
}
|
||||
case bitc::METADATA_OBJC_PROPERTY: {
|
||||
if (Record.size() != 8)
|
||||
return error("Invalid record");
|
||||
|
@ -210,6 +210,9 @@ private:
|
||||
SmallVectorImpl<uint64_t> &Record, unsigned Abbrev);
|
||||
void writeDIExpression(const DIExpression *N,
|
||||
SmallVectorImpl<uint64_t> &Record, unsigned Abbrev);
|
||||
void writeDIGlobalVariableExpression(const DIGlobalVariableExpression *N,
|
||||
SmallVectorImpl<uint64_t> &Record,
|
||||
unsigned Abbrev);
|
||||
void writeDIObjCProperty(const DIObjCProperty *N,
|
||||
SmallVectorImpl<uint64_t> &Record, unsigned Abbrev);
|
||||
void writeDIImportedEntity(const DIImportedEntity *N,
|
||||
@ -1674,7 +1677,8 @@ void ModuleBitcodeWriter::writeDITemplateValueParameter(
|
||||
void ModuleBitcodeWriter::writeDIGlobalVariable(
|
||||
const DIGlobalVariable *N, SmallVectorImpl<uint64_t> &Record,
|
||||
unsigned Abbrev) {
|
||||
Record.push_back(N->isDistinct());
|
||||
const uint64_t Version = 1 << 1;
|
||||
Record.push_back((uint64_t)N->isDistinct() | Version);
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getScope()));
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getRawLinkageName()));
|
||||
@ -1683,7 +1687,7 @@ void ModuleBitcodeWriter::writeDIGlobalVariable(
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getType()));
|
||||
Record.push_back(N->isLocalToUnit());
|
||||
Record.push_back(N->isDefinition());
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getRawExpr()));
|
||||
Record.push_back(/* expr */ 0);
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getStaticDataMemberDeclaration()));
|
||||
Record.push_back(N->getAlignInBits());
|
||||
|
||||
@ -1735,6 +1739,17 @@ void ModuleBitcodeWriter::writeDIExpression(const DIExpression *N,
|
||||
Record.clear();
|
||||
}
|
||||
|
||||
void ModuleBitcodeWriter::writeDIGlobalVariableExpression(
|
||||
const DIGlobalVariableExpression *N, SmallVectorImpl<uint64_t> &Record,
|
||||
unsigned Abbrev) {
|
||||
Record.push_back(N->isDistinct());
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getVariable()));
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getExpression()));
|
||||
|
||||
Stream.EmitRecord(bitc::METADATA_GLOBAL_VAR_EXPR, Record, Abbrev);
|
||||
Record.clear();
|
||||
}
|
||||
|
||||
void ModuleBitcodeWriter::writeDIObjCProperty(const DIObjCProperty *N,
|
||||
SmallVectorImpl<uint64_t> &Record,
|
||||
unsigned Abbrev) {
|
||||
|
@ -2185,12 +2185,13 @@ void CodeViewDebug::emitDebugInfoForUDTs(
|
||||
}
|
||||
|
||||
void CodeViewDebug::emitDebugInfoForGlobals() {
|
||||
DenseMap<const DIGlobalVariable *, const GlobalVariable *> GlobalMap;
|
||||
DenseMap<const DIGlobalVariableExpression *, const GlobalVariable *>
|
||||
GlobalMap;
|
||||
for (const GlobalVariable &GV : MMI->getModule()->globals()) {
|
||||
SmallVector<MDNode *, 1> MDs;
|
||||
GV.getMetadata(LLVMContext::MD_dbg, MDs);
|
||||
for (MDNode *MD : MDs)
|
||||
GlobalMap[cast<DIGlobalVariable>(MD)] = &GV;
|
||||
SmallVector<DIGlobalVariableExpression *, 1> GVEs;
|
||||
GV.getDebugInfo(GVEs);
|
||||
for (const auto *GVE : GVEs)
|
||||
GlobalMap[GVE] = &GV;
|
||||
}
|
||||
|
||||
NamedMDNode *CUs = MMI->getModule()->getNamedMetadata("llvm.dbg.cu");
|
||||
@ -2202,14 +2203,15 @@ void CodeViewDebug::emitDebugInfoForGlobals() {
|
||||
// it if we have at least one global to emit.
|
||||
switchToDebugSectionForSymbol(nullptr);
|
||||
MCSymbol *EndLabel = nullptr;
|
||||
for (const DIGlobalVariable *G : CU->getGlobalVariables()) {
|
||||
if (const auto *GV = GlobalMap.lookup(G))
|
||||
for (const auto *GVE : CU->getGlobalVariables()) {
|
||||
if (const auto *GV = GlobalMap.lookup(GVE))
|
||||
if (!GV->hasComdat() && !GV->isDeclarationForLinker()) {
|
||||
if (!EndLabel) {
|
||||
OS.AddComment("Symbol subsection for globals");
|
||||
EndLabel = beginCVSubsection(ModuleSubstreamKind::Symbols);
|
||||
}
|
||||
emitDebugInfoForGlobal(G, GV, Asm->getSymbol(GV));
|
||||
// FIXME: emitDebugInfoForGlobal() doesn't handle DIExpressions.
|
||||
emitDebugInfoForGlobal(GVE->getVariable(), GV, Asm->getSymbol(GV));
|
||||
}
|
||||
}
|
||||
if (EndLabel)
|
||||
@ -2217,15 +2219,16 @@ void CodeViewDebug::emitDebugInfoForGlobals() {
|
||||
|
||||
// Second, emit each global that is in a comdat into its own .debug$S
|
||||
// section along with its own symbol substream.
|
||||
for (const DIGlobalVariable *G : CU->getGlobalVariables()) {
|
||||
if (const auto *GV = GlobalMap.lookup(G)) {
|
||||
for (const auto *GVE : CU->getGlobalVariables()) {
|
||||
if (const auto *GV = GlobalMap.lookup(GVE)) {
|
||||
if (GV->hasComdat()) {
|
||||
MCSymbol *GVSym = Asm->getSymbol(GV);
|
||||
OS.AddComment("Symbol subsection for " +
|
||||
Twine(GlobalValue::getRealLinkageName(GV->getName())));
|
||||
switchToDebugSectionForSymbol(GVSym);
|
||||
EndLabel = beginCVSubsection(ModuleSubstreamKind::Symbols);
|
||||
emitDebugInfoForGlobal(G, GV, GVSym);
|
||||
// FIXME: emitDebugInfoForGlobal() doesn't handle DIExpressions.
|
||||
emitDebugInfoForGlobal(GVE->getVariable(), GV, GVSym);
|
||||
endCVSubsection(EndLabel);
|
||||
}
|
||||
}
|
||||
|
@ -73,9 +73,8 @@ unsigned DwarfCompileUnit::getOrCreateSourceID(StringRef FileName,
|
||||
Asm->OutStreamer->hasRawTextSupport() ? 0 : getUniqueID());
|
||||
}
|
||||
|
||||
/// getOrCreateGlobalVariableDIE - get or create global variable DIE.
|
||||
DIE *DwarfCompileUnit::getOrCreateGlobalVariableDIE(
|
||||
const DIGlobalVariable *GV, const GlobalVariable *Global) {
|
||||
const DIGlobalVariable *GV, ArrayRef<GlobalExpr> GlobalExprs) {
|
||||
// Check for pre-existence.
|
||||
if (DIE *Die = getDIE(GV))
|
||||
return Die;
|
||||
@ -128,69 +127,76 @@ DIE *DwarfCompileUnit::getOrCreateGlobalVariableDIE(
|
||||
|
||||
// Add location.
|
||||
bool addToAccelTable = false;
|
||||
DIELoc *Loc = nullptr;
|
||||
std::unique_ptr<DIEDwarfExpression> DwarfExpr;
|
||||
bool AllConstant = std::all_of(
|
||||
GlobalExprs.begin(), GlobalExprs.end(),
|
||||
[&](const GlobalExpr GE) {
|
||||
return GE.Expr && GE.Expr->isConstant();
|
||||
});
|
||||
|
||||
DIExpression *Expr = GV->getExpr();
|
||||
|
||||
// For compatibility with DWARF 3 and earlier,
|
||||
// DW_AT_location(DW_OP_constu, X, DW_OP_stack_value) becomes
|
||||
// DW_AT_const_value(X).
|
||||
if (Expr && Expr->getNumElements() == 3 &&
|
||||
Expr->getElement(0) == dwarf::DW_OP_constu &&
|
||||
Expr->getElement(2) == dwarf::DW_OP_stack_value) {
|
||||
addConstantValue(*VariableDIE, /*Unsigned=*/true, Expr->getElement(1));
|
||||
// We cannot describe the location of dllimport'd variables: the computation
|
||||
// of their address requires loads from the IAT.
|
||||
} else if (!Global || !Global->hasDLLImportStorageClass()) {
|
||||
DIELoc *Loc = new (DIEValueAllocator) DIELoc;
|
||||
if (Global) {
|
||||
addToAccelTable = true;
|
||||
const MCSymbol *Sym = Asm->getSymbol(Global);
|
||||
if (Global->isThreadLocal()) {
|
||||
if (Asm->TM.Options.EmulatedTLS) {
|
||||
// TODO: add debug info for emulated thread local mode.
|
||||
} else {
|
||||
// FIXME: Make this work with -gsplit-dwarf.
|
||||
unsigned PointerSize = Asm->getDataLayout().getPointerSize();
|
||||
assert((PointerSize == 4 || PointerSize == 8) &&
|
||||
"Add support for other sizes if necessary");
|
||||
// Based on GCC's support for TLS:
|
||||
if (!DD->useSplitDwarf()) {
|
||||
// 1) Start with a constNu of the appropriate pointer size
|
||||
addUInt(*Loc, dwarf::DW_FORM_data1, PointerSize == 4
|
||||
? dwarf::DW_OP_const4u
|
||||
: dwarf::DW_OP_const8u);
|
||||
// 2) containing the (relocated) offset of the TLS variable
|
||||
// within the module's TLS block.
|
||||
addExpr(*Loc, dwarf::DW_FORM_udata,
|
||||
Asm->getObjFileLowering().getDebugThreadLocalSymbol(Sym));
|
||||
} else {
|
||||
addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_const_index);
|
||||
addUInt(*Loc, dwarf::DW_FORM_udata,
|
||||
DD->getAddressPool().getIndex(Sym, /* TLS */ true));
|
||||
}
|
||||
// 3) followed by an OP to make the debugger do a TLS lookup.
|
||||
addUInt(*Loc, dwarf::DW_FORM_data1,
|
||||
DD->useGNUTLSOpcode() ? dwarf::DW_OP_GNU_push_tls_address
|
||||
: dwarf::DW_OP_form_tls_address);
|
||||
}
|
||||
} else {
|
||||
DD->addArangeLabel(SymbolCU(this, Sym));
|
||||
addOpAddress(*Loc, Sym);
|
||||
for (const auto &GE : GlobalExprs) {
|
||||
const GlobalVariable *Global = GE.Var;
|
||||
const DIExpression *Expr = GE.Expr;
|
||||
// For compatibility with DWARF 3 and earlier,
|
||||
// DW_AT_location(DW_OP_constu, X, DW_OP_stack_value) becomes
|
||||
// DW_AT_const_value(X).
|
||||
if (GlobalExprs.size() == 1 && Expr && Expr->isConstant()) {
|
||||
addConstantValue(*VariableDIE, /*Unsigned=*/true, Expr->getElement(1));
|
||||
// We cannot describe the location of dllimport'd variables: the
|
||||
// computation of their address requires loads from the IAT.
|
||||
} else if ((Global && !Global->hasDLLImportStorageClass()) || AllConstant) {
|
||||
if (!Loc) {
|
||||
Loc = new (DIEValueAllocator) DIELoc;
|
||||
DwarfExpr = llvm::make_unique<DIEDwarfExpression>(*Asm, *this, *Loc);
|
||||
}
|
||||
addToAccelTable = true;
|
||||
if (Global) {
|
||||
const MCSymbol *Sym = Asm->getSymbol(Global);
|
||||
if (Global->isThreadLocal()) {
|
||||
if (Asm->TM.Options.EmulatedTLS) {
|
||||
// TODO: add debug info for emulated thread local mode.
|
||||
} else {
|
||||
// FIXME: Make this work with -gsplit-dwarf.
|
||||
unsigned PointerSize = Asm->getDataLayout().getPointerSize();
|
||||
assert((PointerSize == 4 || PointerSize == 8) &&
|
||||
"Add support for other sizes if necessary");
|
||||
// Based on GCC's support for TLS:
|
||||
if (!DD->useSplitDwarf()) {
|
||||
// 1) Start with a constNu of the appropriate pointer size
|
||||
addUInt(*Loc, dwarf::DW_FORM_data1,
|
||||
PointerSize == 4 ? dwarf::DW_OP_const4u
|
||||
: dwarf::DW_OP_const8u);
|
||||
// 2) containing the (relocated) offset of the TLS variable
|
||||
// within the module's TLS block.
|
||||
addExpr(*Loc, dwarf::DW_FORM_udata,
|
||||
Asm->getObjFileLowering().getDebugThreadLocalSymbol(Sym));
|
||||
} else {
|
||||
addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_const_index);
|
||||
addUInt(*Loc, dwarf::DW_FORM_udata,
|
||||
DD->getAddressPool().getIndex(Sym, /* TLS */ true));
|
||||
}
|
||||
// 3) followed by an OP to make the debugger do a TLS lookup.
|
||||
addUInt(*Loc, dwarf::DW_FORM_data1,
|
||||
DD->useGNUTLSOpcode() ? dwarf::DW_OP_GNU_push_tls_address
|
||||
: dwarf::DW_OP_form_tls_address);
|
||||
}
|
||||
} else {
|
||||
DD->addArangeLabel(SymbolCU(this, Sym));
|
||||
addOpAddress(*Loc, Sym);
|
||||
}
|
||||
}
|
||||
|
||||
if (Expr) {
|
||||
DIEDwarfExpression DwarfExpr(*Asm, *this, *Loc);
|
||||
DwarfExpr.addFragmentOffset(Expr);
|
||||
DwarfExpr.AddExpression(Expr);
|
||||
DwarfExpr.finalize();
|
||||
DwarfExpr->addFragmentOffset(Expr);
|
||||
DwarfExpr->AddExpression(Expr);
|
||||
}
|
||||
}
|
||||
|
||||
addBlock(*VariableDIE, dwarf::DW_AT_location, Loc);
|
||||
|
||||
if (DD->useAllLinkageNames())
|
||||
addLinkageName(*VariableDIE, GV->getLinkageName());
|
||||
}
|
||||
if (Loc)
|
||||
addBlock(*VariableDIE, dwarf::DW_AT_location, DwarfExpr->finalize());
|
||||
|
||||
if (DD->useAllLinkageNames())
|
||||
addLinkageName(*VariableDIE, GV->getLinkageName());
|
||||
|
||||
if (addToAccelTable) {
|
||||
DD->addAccelName(GV->getName(), *VariableDIE);
|
||||
@ -503,8 +509,7 @@ DIE *DwarfCompileUnit::constructVariableDIEImpl(const DbgVariable &DV,
|
||||
DwarfExpr.addFragmentOffset(Expr);
|
||||
DwarfExpr.AddUnsignedConstant(DVInsn->getOperand(0).getImm());
|
||||
DwarfExpr.AddExpression(Expr);
|
||||
DwarfExpr.finalize();
|
||||
addBlock(*VariableDie, dwarf::DW_AT_location, Loc);
|
||||
addBlock(*VariableDie, dwarf::DW_AT_location, DwarfExpr.finalize());
|
||||
} else
|
||||
addConstantValue(*VariableDie, DVInsn->getOperand(0), DV.getType());
|
||||
} else if (DVInsn->getOperand(0).isFPImm())
|
||||
@ -534,8 +539,7 @@ DIE *DwarfCompileUnit::constructVariableDIEImpl(const DbgVariable &DV,
|
||||
DwarfExpr.AddExpression(*Expr);
|
||||
++Expr;
|
||||
}
|
||||
DwarfExpr.finalize();
|
||||
addBlock(*VariableDie, dwarf::DW_AT_location, Loc);
|
||||
addBlock(*VariableDie, dwarf::DW_AT_location, DwarfExpr.finalize());
|
||||
|
||||
return VariableDie;
|
||||
}
|
||||
@ -654,7 +658,7 @@ DIE *DwarfCompileUnit::constructImportedEntityDIE(
|
||||
else if (auto *T = dyn_cast<DIType>(Entity))
|
||||
EntityDie = getOrCreateTypeDIE(T);
|
||||
else if (auto *GV = dyn_cast<DIGlobalVariable>(Entity))
|
||||
EntityDie = getOrCreateGlobalVariableDIE(GV, nullptr);
|
||||
EntityDie = getOrCreateGlobalVariableDIE(GV, {});
|
||||
else
|
||||
EntityDie = getDIE(Entity);
|
||||
assert(EntityDie);
|
||||
@ -740,10 +744,8 @@ void DwarfCompileUnit::addAddress(DIE &Die, dwarf::Attribute Attribute,
|
||||
if (!validReg)
|
||||
return;
|
||||
|
||||
Expr.finalize();
|
||||
|
||||
// Now attach the location information to the DIE.
|
||||
addBlock(Die, Attribute, Loc);
|
||||
addBlock(Die, Attribute, Expr.finalize());
|
||||
}
|
||||
|
||||
/// Start with the address based on the location provided, and generate the
|
||||
|
@ -91,9 +91,16 @@ public:
|
||||
/// Apply the DW_AT_stmt_list from this compile unit to the specified DIE.
|
||||
void applyStmtList(DIE &D);
|
||||
|
||||
/// getOrCreateGlobalVariableDIE - get or create global variable DIE.
|
||||
DIE *getOrCreateGlobalVariableDIE(const DIGlobalVariable *GV,
|
||||
const GlobalVariable *Global);
|
||||
/// A pair of GlobalVariable and DIExpression.
|
||||
struct GlobalExpr {
|
||||
const GlobalVariable *Var;
|
||||
const DIExpression *Expr;
|
||||
};
|
||||
|
||||
/// Get or create global variable DIE.
|
||||
DIE *
|
||||
getOrCreateGlobalVariableDIE(const DIGlobalVariable *GV,
|
||||
ArrayRef<GlobalExpr> GlobalExprs);
|
||||
|
||||
/// addLabelAddress - Add a dwarf label attribute data and value using
|
||||
/// either DW_FORM_addr or DW_FORM_GNU_addr_index.
|
||||
|
@ -464,6 +464,26 @@ void DwarfDebug::constructAndAddImportedEntityDIE(DwarfCompileUnit &TheCU,
|
||||
D->addChild(TheCU.constructImportedEntityDIE(N));
|
||||
}
|
||||
|
||||
/// Sort and unique GVEs by comparing their fragment offset.
|
||||
static SmallVectorImpl<DwarfCompileUnit::GlobalExpr> &
|
||||
sortGlobalExprs(SmallVectorImpl<DwarfCompileUnit::GlobalExpr> &GVEs) {
|
||||
std::sort(GVEs.begin(), GVEs.end(),
|
||||
[](DwarfCompileUnit::GlobalExpr A, DwarfCompileUnit::GlobalExpr B) {
|
||||
if (A.Expr != B.Expr && A.Expr && B.Expr &&
|
||||
A.Expr->isFragment() && B.Expr->isFragment())
|
||||
return A.Expr->getFragmentOffsetInBits() <
|
||||
B.Expr->getFragmentOffsetInBits();
|
||||
return false;
|
||||
});
|
||||
GVEs.erase(std::unique(GVEs.begin(), GVEs.end(),
|
||||
[](DwarfCompileUnit::GlobalExpr A,
|
||||
DwarfCompileUnit::GlobalExpr B) {
|
||||
return A.Expr == B.Expr;
|
||||
}),
|
||||
GVEs.end());
|
||||
return GVEs;
|
||||
}
|
||||
|
||||
// Emit all Dwarf sections that should come prior to the content. Create
|
||||
// global DIEs and emit initial debug info sections. This is invoked by
|
||||
// the target AsmPrinter.
|
||||
@ -480,21 +500,30 @@ void DwarfDebug::beginModule() {
|
||||
// Tell MMI whether we have debug info.
|
||||
MMI->setDebugInfoAvailability(NumDebugCUs > 0);
|
||||
SingleCU = NumDebugCUs == 1;
|
||||
|
||||
DenseMap<DIGlobalVariable *, const GlobalVariable *> GVMap;
|
||||
DenseMap<DIGlobalVariable *, SmallVector<DwarfCompileUnit::GlobalExpr, 1>>
|
||||
GVMap;
|
||||
for (const GlobalVariable &Global : M->globals()) {
|
||||
SmallVector<DIGlobalVariable *, 1> GVs;
|
||||
SmallVector<DIGlobalVariableExpression *, 1> GVs;
|
||||
Global.getDebugInfo(GVs);
|
||||
for (auto &GV : GVs)
|
||||
GVMap[GV] = &Global;
|
||||
for (auto *GVE : GVs)
|
||||
GVMap[GVE->getVariable()].push_back({&Global, GVE->getExpression()});
|
||||
}
|
||||
|
||||
for (DICompileUnit *CUNode : M->debug_compile_units()) {
|
||||
DwarfCompileUnit &CU = constructDwarfCompileUnit(CUNode);
|
||||
for (auto *IE : CUNode->getImportedEntities())
|
||||
CU.addImportedEntity(IE);
|
||||
for (auto *GV : CUNode->getGlobalVariables())
|
||||
CU.getOrCreateGlobalVariableDIE(GV, GVMap.lookup(GV));
|
||||
|
||||
// Global Variables.
|
||||
for (auto *GVE : CUNode->getGlobalVariables())
|
||||
GVMap[GVE->getVariable()].push_back({nullptr, GVE->getExpression()});
|
||||
DenseSet<DIGlobalVariable *> Processed;
|
||||
for (auto *GVE : CUNode->getGlobalVariables()) {
|
||||
DIGlobalVariable *GV = GVE->getVariable();
|
||||
if (Processed.insert(GV).second)
|
||||
CU.getOrCreateGlobalVariableDIE(GV, sortGlobalExprs(GVMap[GV]));
|
||||
}
|
||||
|
||||
for (auto *Ty : CUNode->getEnumTypes()) {
|
||||
// The enum types array by design contains pointers to
|
||||
// MDNodes rather than DIRefs. Unique them here.
|
||||
|
@ -215,6 +215,10 @@ public:
|
||||
void EmitUnsigned(uint64_t Value) override;
|
||||
bool isFrameRegister(const TargetRegisterInfo &TRI,
|
||||
unsigned MachineReg) override;
|
||||
DIELoc *finalize() {
|
||||
DwarfExpression::finalize();
|
||||
return &DIE;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -1827,7 +1827,6 @@ static void writeDIGlobalVariable(raw_ostream &Out, const DIGlobalVariable *N,
|
||||
Printer.printMetadata("type", N->getRawType());
|
||||
Printer.printBool("isLocal", N->isLocalToUnit());
|
||||
Printer.printBool("isDefinition", N->isDefinition());
|
||||
Printer.printMetadata("expr", N->getExpr());
|
||||
Printer.printMetadata("declaration", N->getRawStaticDataMemberDeclaration());
|
||||
Printer.printInt("align", N->getAlignInBits());
|
||||
Out << ")";
|
||||
@ -1870,6 +1869,18 @@ static void writeDIExpression(raw_ostream &Out, const DIExpression *N,
|
||||
Out << ")";
|
||||
}
|
||||
|
||||
static void writeDIGlobalVariableExpression(raw_ostream &Out,
|
||||
const DIGlobalVariableExpression *N,
|
||||
TypePrinting *TypePrinter,
|
||||
SlotTracker *Machine,
|
||||
const Module *Context) {
|
||||
Out << "!DIGlobalVariableExpression(";
|
||||
MDFieldPrinter Printer(Out, TypePrinter, Machine, Context);
|
||||
Printer.printMetadata("var", N->getVariable());
|
||||
Printer.printMetadata("expr", N->getExpression());
|
||||
Out << ")";
|
||||
}
|
||||
|
||||
static void writeDIObjCProperty(raw_ostream &Out, const DIObjCProperty *N,
|
||||
TypePrinting *TypePrinter, SlotTracker *Machine,
|
||||
const Module *Context) {
|
||||
|
@ -532,29 +532,30 @@ static void checkGlobalVariableScope(DIScope *Context) {
|
||||
#endif
|
||||
}
|
||||
|
||||
DIGlobalVariable *DIBuilder::createGlobalVariable(
|
||||
DIGlobalVariableExpression *DIBuilder::createGlobalVariableExpression(
|
||||
DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *F,
|
||||
unsigned LineNumber, DIType *Ty, bool isLocalToUnit,
|
||||
DIExpression *Expr, MDNode *Decl, uint32_t AlignInBits) {
|
||||
unsigned LineNumber, DIType *Ty, bool isLocalToUnit, DIExpression *Expr,
|
||||
MDNode *Decl, uint32_t AlignInBits) {
|
||||
checkGlobalVariableScope(Context);
|
||||
|
||||
auto *N = DIGlobalVariable::getDistinct(
|
||||
auto *GV = DIGlobalVariable::getDistinct(
|
||||
VMContext, cast_or_null<DIScope>(Context), Name, LinkageName, F,
|
||||
LineNumber, Ty, isLocalToUnit, true, Expr,
|
||||
cast_or_null<DIDerivedType>(Decl), AlignInBits);
|
||||
LineNumber, Ty, isLocalToUnit, true, cast_or_null<DIDerivedType>(Decl),
|
||||
AlignInBits);
|
||||
auto *N = DIGlobalVariableExpression::get(VMContext, GV, Expr);
|
||||
AllGVs.push_back(N);
|
||||
return N;
|
||||
}
|
||||
|
||||
DIGlobalVariable *DIBuilder::createTempGlobalVariableFwdDecl(
|
||||
DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *F,
|
||||
unsigned LineNumber, DIType *Ty, bool isLocalToUnit,
|
||||
DIExpression *Expr, MDNode *Decl, uint32_t AlignInBits) {
|
||||
unsigned LineNumber, DIType *Ty, bool isLocalToUnit, MDNode *Decl,
|
||||
uint32_t AlignInBits) {
|
||||
checkGlobalVariableScope(Context);
|
||||
|
||||
return DIGlobalVariable::getTemporary(
|
||||
VMContext, cast_or_null<DIScope>(Context), Name, LinkageName, F,
|
||||
LineNumber, Ty, isLocalToUnit, false, Expr,
|
||||
LineNumber, Ty, isLocalToUnit, false,
|
||||
cast_or_null<DIDerivedType>(Decl), AlignInBits)
|
||||
.release();
|
||||
}
|
||||
|
@ -53,11 +53,12 @@ void DebugInfoFinder::reset() {
|
||||
void DebugInfoFinder::processModule(const Module &M) {
|
||||
for (auto *CU : M.debug_compile_units()) {
|
||||
addCompileUnit(CU);
|
||||
for (auto *DIG : CU->getGlobalVariables()) {
|
||||
if (addGlobalVariable(DIG)) {
|
||||
processScope(DIG->getScope());
|
||||
processType(DIG->getType().resolve());
|
||||
}
|
||||
for (auto DIG : CU->getGlobalVariables()) {
|
||||
if (!addGlobalVariable(DIG))
|
||||
continue;
|
||||
auto *GV = DIG->getVariable();
|
||||
processScope(GV->getScope());
|
||||
processType(GV->getType().resolve());
|
||||
}
|
||||
for (auto *ET : CU->getEnumTypes())
|
||||
processType(ET);
|
||||
@ -206,10 +207,7 @@ bool DebugInfoFinder::addCompileUnit(DICompileUnit *CU) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DebugInfoFinder::addGlobalVariable(DIGlobalVariable *DIG) {
|
||||
if (!DIG)
|
||||
return false;
|
||||
|
||||
bool DebugInfoFinder::addGlobalVariable(DIGlobalVariableExpression *DIG) {
|
||||
if (!NodesSeen.insert(DIG).second)
|
||||
return false;
|
||||
|
||||
|
@ -514,18 +514,17 @@ DIGlobalVariable *
|
||||
DIGlobalVariable::getImpl(LLVMContext &Context, Metadata *Scope, MDString *Name,
|
||||
MDString *LinkageName, Metadata *File, unsigned Line,
|
||||
Metadata *Type, bool IsLocalToUnit, bool IsDefinition,
|
||||
Metadata *Variable,
|
||||
Metadata *StaticDataMemberDeclaration,
|
||||
uint32_t AlignInBits,
|
||||
StorageType Storage, bool ShouldCreate) {
|
||||
uint32_t AlignInBits, StorageType Storage,
|
||||
bool ShouldCreate) {
|
||||
assert(isCanonical(Name) && "Expected canonical MDString");
|
||||
assert(isCanonical(LinkageName) && "Expected canonical MDString");
|
||||
DEFINE_GETIMPL_LOOKUP(DIGlobalVariable,
|
||||
(Scope, Name, LinkageName, File, Line, Type,
|
||||
IsLocalToUnit, IsDefinition, Variable,
|
||||
IsLocalToUnit, IsDefinition,
|
||||
StaticDataMemberDeclaration, AlignInBits));
|
||||
Metadata *Ops[] = {Scope, Name, File, Type,
|
||||
Name, LinkageName, Variable, StaticDataMemberDeclaration};
|
||||
Metadata *Ops[] = {
|
||||
Scope, Name, File, Type, Name, LinkageName, StaticDataMemberDeclaration};
|
||||
DEFINE_GETIMPL_STORE(DIGlobalVariable,
|
||||
(Line, IsLocalToUnit, IsDefinition, AlignInBits),
|
||||
Ops);
|
||||
@ -581,10 +580,17 @@ bool DIExpression::isValid() const {
|
||||
default:
|
||||
return false;
|
||||
case dwarf::DW_OP_LLVM_fragment:
|
||||
case dwarf::DW_OP_stack_value:
|
||||
// We only support fragment and stack value expressions which appear at
|
||||
// the end.
|
||||
// A fragment operator must appear at the end.
|
||||
return I->get() + I->getSize() == E->get();
|
||||
case dwarf::DW_OP_stack_value: {
|
||||
// Must be the last one or followed by a DW_OP_LLVM_fragment.
|
||||
if (I->get() + I->getSize() == E->get())
|
||||
break;
|
||||
auto J = I;
|
||||
if ((++J)->getOp() != dwarf::DW_OP_LLVM_fragment)
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
case dwarf::DW_OP_constu:
|
||||
case dwarf::DW_OP_plus:
|
||||
case dwarf::DW_OP_minus:
|
||||
@ -613,6 +619,27 @@ uint64_t DIExpression::getFragmentSizeInBits() const {
|
||||
return getElement(getNumElements() - 1);
|
||||
}
|
||||
|
||||
bool DIExpression::isConstant() const {
|
||||
// Recognize DW_OP_constu C DW_OP_stack_value (DW_OP_LLVM_fragment Len Ofs)?.
|
||||
if (getNumElements() != 3 && getNumElements() != 6)
|
||||
return false;
|
||||
if (getElement(0) != dwarf::DW_OP_constu ||
|
||||
getElement(2) != dwarf::DW_OP_stack_value)
|
||||
return false;
|
||||
if (getNumElements() == 6 && getElement(3) != dwarf::DW_OP_LLVM_fragment)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
DIGlobalVariableExpression *
|
||||
DIGlobalVariableExpression::getImpl(LLVMContext &Context, Metadata *Variable,
|
||||
Metadata *Expression, StorageType Storage,
|
||||
bool ShouldCreate) {
|
||||
DEFINE_GETIMPL_LOOKUP(DIGlobalVariableExpression, (Variable, Expression));
|
||||
Metadata *Ops[] = {Variable, Expression};
|
||||
DEFINE_GETIMPL_STORE_NO_CONSTRUCTOR_ARGS(DIGlobalVariableExpression, Ops);
|
||||
}
|
||||
|
||||
DIObjCProperty *DIObjCProperty::getImpl(
|
||||
LLVMContext &Context, MDString *Name, Metadata *File, unsigned Line,
|
||||
MDString *GetterName, MDString *SetterName, unsigned Attributes,
|
||||
|
@ -763,18 +763,16 @@ template <> struct MDNodeKeyImpl<DIGlobalVariable> {
|
||||
Metadata *Type;
|
||||
bool IsLocalToUnit;
|
||||
bool IsDefinition;
|
||||
Metadata *Expr;
|
||||
Metadata *StaticDataMemberDeclaration;
|
||||
uint32_t AlignInBits;
|
||||
|
||||
MDNodeKeyImpl(Metadata *Scope, MDString *Name, MDString *LinkageName,
|
||||
Metadata *File, unsigned Line, Metadata *Type,
|
||||
bool IsLocalToUnit, bool IsDefinition,
|
||||
Metadata *Expr, Metadata *StaticDataMemberDeclaration,
|
||||
uint32_t AlignInBits)
|
||||
Metadata *StaticDataMemberDeclaration, uint32_t AlignInBits)
|
||||
: Scope(Scope), Name(Name), LinkageName(LinkageName), File(File),
|
||||
Line(Line), Type(Type), IsLocalToUnit(IsLocalToUnit),
|
||||
IsDefinition(IsDefinition), Expr(Expr),
|
||||
IsDefinition(IsDefinition),
|
||||
StaticDataMemberDeclaration(StaticDataMemberDeclaration),
|
||||
AlignInBits(AlignInBits) {}
|
||||
MDNodeKeyImpl(const DIGlobalVariable *N)
|
||||
@ -782,7 +780,6 @@ template <> struct MDNodeKeyImpl<DIGlobalVariable> {
|
||||
LinkageName(N->getRawLinkageName()), File(N->getRawFile()),
|
||||
Line(N->getLine()), Type(N->getRawType()),
|
||||
IsLocalToUnit(N->isLocalToUnit()), IsDefinition(N->isDefinition()),
|
||||
Expr(N->getRawExpr()),
|
||||
StaticDataMemberDeclaration(N->getRawStaticDataMemberDeclaration()),
|
||||
AlignInBits(N->getAlignInBits()) {}
|
||||
|
||||
@ -792,7 +789,6 @@ template <> struct MDNodeKeyImpl<DIGlobalVariable> {
|
||||
File == RHS->getRawFile() && Line == RHS->getLine() &&
|
||||
Type == RHS->getRawType() && IsLocalToUnit == RHS->isLocalToUnit() &&
|
||||
IsDefinition == RHS->isDefinition() &&
|
||||
Expr == RHS->getRawExpr() &&
|
||||
StaticDataMemberDeclaration ==
|
||||
RHS->getRawStaticDataMemberDeclaration() &&
|
||||
AlignInBits == RHS->getAlignInBits();
|
||||
@ -806,7 +802,7 @@ template <> struct MDNodeKeyImpl<DIGlobalVariable> {
|
||||
// generated IR is random for each run and test fails with Align included.
|
||||
// TODO: make hashing work fine with such situations
|
||||
return hash_combine(Scope, Name, LinkageName, File, Line, Type,
|
||||
IsLocalToUnit, IsDefinition, /* AlignInBits, */ Expr,
|
||||
IsLocalToUnit, IsDefinition, /* AlignInBits, */
|
||||
StaticDataMemberDeclaration);
|
||||
}
|
||||
};
|
||||
@ -863,6 +859,22 @@ template <> struct MDNodeKeyImpl<DIExpression> {
|
||||
}
|
||||
};
|
||||
|
||||
template <> struct MDNodeKeyImpl<DIGlobalVariableExpression> {
|
||||
Metadata *Variable;
|
||||
Metadata *Expression;
|
||||
|
||||
MDNodeKeyImpl(Metadata *Variable, Metadata *Expression)
|
||||
: Variable(Variable), Expression(Expression) {}
|
||||
MDNodeKeyImpl(const DIGlobalVariableExpression *N)
|
||||
: Variable(N->getRawVariable()), Expression(N->getRawExpression()) {}
|
||||
|
||||
bool isKeyOf(const DIGlobalVariableExpression *RHS) const {
|
||||
return Variable == RHS->getRawVariable() &&
|
||||
Expression == RHS->getRawExpression();
|
||||
}
|
||||
unsigned getHashValue() const { return hash_combine(Variable, Expression); }
|
||||
};
|
||||
|
||||
template <> struct MDNodeKeyImpl<DIObjCProperty> {
|
||||
MDString *Name;
|
||||
Metadata *File;
|
||||
|
@ -1419,9 +1419,15 @@ void GlobalObject::copyMetadata(const GlobalObject *Other, unsigned Offset) {
|
||||
// If an offset adjustment was specified we need to modify the DIExpression
|
||||
// to prepend the adjustment:
|
||||
// !DIExpression(DW_OP_plus, Offset, [original expr])
|
||||
auto *Attachment = MD.second;
|
||||
if (Offset != 0 && MD.first == LLVMContext::MD_dbg) {
|
||||
DIGlobalVariable *GV = cast<DIGlobalVariable>(MD.second);
|
||||
DIExpression *E = GV->getExpr();
|
||||
DIGlobalVariable *GV = dyn_cast<DIGlobalVariable>(Attachment);
|
||||
DIExpression *E = nullptr;
|
||||
if (!GV) {
|
||||
auto *GVE = cast<DIGlobalVariableExpression>(Attachment);
|
||||
GV = GVE->getVariable();
|
||||
E = GVE->getExpression();
|
||||
}
|
||||
ArrayRef<uint64_t> OrigElements;
|
||||
if (E)
|
||||
OrigElements = E->getElements();
|
||||
@ -1429,9 +1435,10 @@ void GlobalObject::copyMetadata(const GlobalObject *Other, unsigned Offset) {
|
||||
Elements[0] = dwarf::DW_OP_plus;
|
||||
Elements[1] = Offset;
|
||||
std::copy(OrigElements.begin(), OrigElements.end(), Elements.begin() + 2);
|
||||
GV->replaceExpr(DIExpression::get(getContext(), Elements));
|
||||
E = DIExpression::get(getContext(), Elements);
|
||||
Attachment = DIGlobalVariableExpression::get(getContext(), GV, E);
|
||||
}
|
||||
addMetadata(MD.first, *MD.second);
|
||||
addMetadata(MD.first, *Attachment);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1452,14 +1459,14 @@ DISubprogram *Function::getSubprogram() const {
|
||||
return cast_or_null<DISubprogram>(getMetadata(LLVMContext::MD_dbg));
|
||||
}
|
||||
|
||||
void GlobalVariable::addDebugInfo(DIGlobalVariable *GV) {
|
||||
void GlobalVariable::addDebugInfo(DIGlobalVariableExpression *GV) {
|
||||
addMetadata(LLVMContext::MD_dbg, *GV);
|
||||
}
|
||||
|
||||
void GlobalVariable::getDebugInfo(
|
||||
SmallVectorImpl<DIGlobalVariable *> &GVs) const {
|
||||
SmallVectorImpl<DIGlobalVariableExpression *> &GVs) const {
|
||||
SmallVector<MDNode *, 1> MDs;
|
||||
getMetadata(LLVMContext::MD_dbg, MDs);
|
||||
for (MDNode *MD : MDs)
|
||||
GVs.push_back(cast<DIGlobalVariable>(MD));
|
||||
GVs.push_back(cast<DIGlobalVariableExpression>(MD));
|
||||
}
|
||||
|
@ -580,7 +580,6 @@ void Verifier::visitGlobalVariable(const GlobalVariable &GV) {
|
||||
"Global variable initializer type does not match global "
|
||||
"variable type!",
|
||||
&GV);
|
||||
|
||||
// If the global has common linkage, it must have a zero initializer and
|
||||
// cannot be constant.
|
||||
if (GV.hasCommonLinkage()) {
|
||||
@ -646,6 +645,15 @@ void Verifier::visitGlobalVariable(const GlobalVariable &GV) {
|
||||
GV.hasAvailableExternallyLinkage(),
|
||||
"Global is marked as dllimport, but not external", &GV);
|
||||
|
||||
// Visit any debug info attachments.
|
||||
SmallVector<MDNode *, 1> MDs;
|
||||
GV.getMetadata(LLVMContext::MD_dbg, MDs);
|
||||
for (auto *MD : MDs)
|
||||
if (auto *GVE = dyn_cast<DIGlobalVariableExpression>(MD))
|
||||
visitDIGlobalVariableExpression(*GVE);
|
||||
else
|
||||
AssertDI(false, "!dbg attachment of global variable must be a DIGlobalVariableExpression");
|
||||
|
||||
if (!GV.hasInitializer()) {
|
||||
visitGlobalValue(GV);
|
||||
return;
|
||||
@ -988,8 +996,8 @@ void Verifier::visitDICompileUnit(const DICompileUnit &N) {
|
||||
if (auto *Array = N.getRawGlobalVariables()) {
|
||||
AssertDI(isa<MDTuple>(Array), "invalid global variable list", &N, Array);
|
||||
for (Metadata *Op : N.getGlobalVariables()->operands()) {
|
||||
AssertDI(Op && isa<DIGlobalVariable>(Op), "invalid global variable ref",
|
||||
&N, Op);
|
||||
AssertDI(Op && (isa<DIGlobalVariableExpression>(Op)),
|
||||
"invalid global variable ref", &N, Op);
|
||||
}
|
||||
}
|
||||
if (auto *Array = N.getRawImportedEntities()) {
|
||||
@ -1132,8 +1140,6 @@ void Verifier::visitDIGlobalVariable(const DIGlobalVariable &N) {
|
||||
|
||||
AssertDI(N.getTag() == dwarf::DW_TAG_variable, "invalid tag", &N);
|
||||
AssertDI(!N.getName().empty(), "missing global variable name", &N);
|
||||
if (auto *V = N.getRawExpr())
|
||||
AssertDI(isa<DIExpression>(V), "invalid expression location", &N, V);
|
||||
if (auto *Member = N.getRawStaticDataMemberDeclaration()) {
|
||||
AssertDI(isa<DIDerivedType>(Member),
|
||||
"invalid static data member declaration", &N, Member);
|
||||
@ -1153,6 +1159,15 @@ void Verifier::visitDIExpression(const DIExpression &N) {
|
||||
AssertDI(N.isValid(), "invalid expression", &N);
|
||||
}
|
||||
|
||||
void Verifier::visitDIGlobalVariableExpression(
|
||||
const DIGlobalVariableExpression &GVE) {
|
||||
AssertDI(GVE.getVariable(), "missing variable");
|
||||
if (auto *Var = GVE.getVariable())
|
||||
visitDIGlobalVariable(*Var);
|
||||
if (auto *Expr = GVE.getExpression())
|
||||
visitDIExpression(*Expr);
|
||||
}
|
||||
|
||||
void Verifier::visitDIObjCProperty(const DIObjCProperty &N) {
|
||||
AssertDI(N.getTag() == dwarf::DW_TAG_APPLE_property, "invalid tag", &N);
|
||||
if (auto *T = N.getRawType())
|
||||
|
@ -313,20 +313,23 @@ bool StripDeadDebugInfo::runOnModule(Module &M) {
|
||||
// replace the current list of potentially dead global variables/functions
|
||||
// with the live list.
|
||||
SmallVector<Metadata *, 64> LiveGlobalVariables;
|
||||
DenseSet<const MDNode *> VisitedSet;
|
||||
DenseSet<DIGlobalVariableExpression *> VisitedSet;
|
||||
|
||||
std::set<DIGlobalVariable *> LiveGVs;
|
||||
std::set<DIGlobalVariableExpression *> LiveGVs;
|
||||
for (GlobalVariable &GV : M.globals()) {
|
||||
SmallVector<DIGlobalVariable *, 1> DIs;
|
||||
GV.getDebugInfo(DIs);
|
||||
for (DIGlobalVariable *DI : DIs)
|
||||
LiveGVs.insert(DI);
|
||||
SmallVector<DIGlobalVariableExpression *, 1> GVEs;
|
||||
GV.getDebugInfo(GVEs);
|
||||
for (auto *GVE : GVEs)
|
||||
LiveGVs.insert(GVE);
|
||||
}
|
||||
|
||||
for (DICompileUnit *DIC : F.compile_units()) {
|
||||
// Create our live global variable list.
|
||||
bool GlobalVariableChange = false;
|
||||
for (DIGlobalVariable *DIG : DIC->getGlobalVariables()) {
|
||||
for (auto *DIG : DIC->getGlobalVariables()) {
|
||||
if (DIG->getExpression() && DIG->getExpression()->isConstant())
|
||||
LiveGVs.insert(DIG);
|
||||
|
||||
// Make sure we only visit each global variable only once.
|
||||
if (!VisitedSet.insert(DIG).second)
|
||||
continue;
|
||||
|
@ -1655,7 +1655,7 @@ bool AddressSanitizerModule::InstrumentGlobals(IRBuilder<> &IRB, Module &M) {
|
||||
|
||||
// Transfer the debug info. The payload starts at offset zero so we can
|
||||
// copy the debug info over as is.
|
||||
SmallVector<DIGlobalVariable *, 1> GVs;
|
||||
SmallVector<DIGlobalVariableExpression *, 1> GVs;
|
||||
G->getDebugInfo(GVs);
|
||||
for (auto *GV : GVs)
|
||||
NewGlobal->addDebugInfo(GV);
|
||||
|
23
test/Assembler/DIGlobalVariableExpression.ll
Normal file
23
test/Assembler/DIGlobalVariableExpression.ll
Normal file
@ -0,0 +1,23 @@
|
||||
; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | FileCheck %s
|
||||
; RUN: verify-uselistorder %s
|
||||
|
||||
@foo = global i32 0
|
||||
|
||||
; CHECK: !named = !{!0, !1, !2, !3, !4, !5, !6, !7}
|
||||
!named = !{!0, !1, !2, !3, !4, !5, !6, !7}
|
||||
|
||||
!0 = !DIFile(filename: "scope.h", directory: "/path/to/dir")
|
||||
!1 = distinct !{}
|
||||
!2 = !DIFile(filename: "path/to/file", directory: "/path/to/dir")
|
||||
!3 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!4 = distinct !{}
|
||||
|
||||
; CHECK: !5 = !DIGlobalVariable(name: "foo", linkageName: "foo", scope: !0, file: !2, line: 7, type: !3, isLocal: true, isDefinition: false, align: 32)
|
||||
!5 = !DIGlobalVariable(name: "foo", linkageName: "foo", scope: !0,
|
||||
file: !2, line: 7, type: !3, isLocal: true,
|
||||
isDefinition: false, align: 32)
|
||||
|
||||
; CHECK: !6 = !DIGlobalVariableExpression(var: !5, expr: !7)
|
||||
!6 = !DIGlobalVariableExpression(var: !5, expr: !7)
|
||||
; CHECK: !7 = !DIExpression(DW_OP_constu, 42, DW_OP_stack_value)
|
||||
!7 = !DIExpression(DW_OP_constu, 42, DW_OP_stack_value)
|
@ -3,8 +3,8 @@
|
||||
|
||||
@foo = global i32 0
|
||||
|
||||
; CHECK: !named = !{!0, !1, !2, !3, !4, !5, !6, !8, !9, !10}
|
||||
!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9}
|
||||
; CHECK: !named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8}
|
||||
!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8}
|
||||
|
||||
!0 = !DIFile(filename: "scope.h", directory: "/path/to/dir")
|
||||
!1 = distinct !{}
|
||||
@ -17,12 +17,8 @@
|
||||
file: !2, line: 7, type: !3, isLocal: true,
|
||||
isDefinition: false, align: 32)
|
||||
|
||||
; CHECK: !6 = !DIGlobalVariable(name: "foo", scope: !0, isLocal: false, isDefinition: true, expr: !7)
|
||||
; CHECK: !7 = !DIExpression(DW_OP_constu, 42, DW_OP_stack_value)
|
||||
!6 = !DIGlobalVariable(name: "foo", scope: !0, expr: !DIExpression(DW_OP_constu, 42, DW_OP_stack_value))
|
||||
!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "Class", size: 8, align: 8)
|
||||
!7 = !DIDerivedType(tag: DW_TAG_member, name: "mem", flags: DIFlagStaticMember, scope: !6, baseType: !3)
|
||||
|
||||
!7 = !DICompositeType(tag: DW_TAG_structure_type, name: "Class", size: 8, align: 8)
|
||||
!8 = !DIDerivedType(tag: DW_TAG_member, name: "mem", flags: DIFlagStaticMember, scope: !7, baseType: !3)
|
||||
|
||||
; CHECK: !10 = !DIGlobalVariable(name: "mem", scope: !0, isLocal: false, isDefinition: true, declaration: !9)
|
||||
!9 = !DIGlobalVariable(name: "mem", scope: !0, declaration: !8)
|
||||
; CHECK: !8 = !DIGlobalVariable(name: "mem", scope: !0, isLocal: false, isDefinition: true, declaration: !7)
|
||||
!8 = !DIGlobalVariable(name: "mem", scope: !0, declaration: !7)
|
||||
|
31
test/Bitcode/DIGlobalVariableExpression.ll
Normal file
31
test/Bitcode/DIGlobalVariableExpression.ll
Normal file
@ -0,0 +1,31 @@
|
||||
; RUN: llvm-dis -o - %s.bc | FileCheck %s
|
||||
|
||||
; CHECK: @g = common global i32 0, align 4, !dbg ![[G:[0-9]+]]
|
||||
; CHECK: @h = common global i32 0, align 4, !dbg ![[H:[0-9]+]]
|
||||
; CHECK: ![[G]] = {{.*}}!DIGlobalVariableExpression(var: ![[GVAR:[0-9]+]], expr: ![[GEXPR:[0-9]+]])
|
||||
; CHECK: ![[GVAR]] = distinct !DIGlobalVariable(name: "g",
|
||||
; CHECK: !DIGlobalVariableExpression(var: ![[CVAR:[0-9]+]], expr: ![[CEXPR:[0-9]+]])
|
||||
; CHECK: ![[CVAR]] = distinct !DIGlobalVariable(name: "c",
|
||||
; CHECK: ![[CEXPR]] = !DIExpression(DW_OP_constu, 23, DW_OP_stack_value)
|
||||
; CHECK: ![[H]] = {{.*}}!DIGlobalVariableExpression(var: ![[HVAR:[0-9]+]])
|
||||
; CHECK: ![[HVAR]] = distinct !DIGlobalVariable(name: "h",
|
||||
; CHECK: ![[GEXPR]] = !DIExpression(DW_OP_plus, 1)
|
||||
@g = common global i32 0, align 4, !dbg !0
|
||||
@h = common global i32 0, align 4, !dbg !11
|
||||
|
||||
!llvm.dbg.cu = !{!1}
|
||||
!llvm.module.flags = !{!6, !7, !8}
|
||||
!llvm.ident = !{!9}
|
||||
|
||||
!0 = distinct !DIGlobalVariable(name: "g", scope: !1, file: !2, line: 1, type: !5, isLocal: false, isDefinition: true, expr: !DIExpression(DW_OP_plus, 1))
|
||||
!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)
|
||||
!2 = !DIFile(filename: "a.c", directory: "/")
|
||||
!3 = !{}
|
||||
!4 = !{!0, !10, !11}
|
||||
!5 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
||||
!6 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!7 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!8 = !{i32 1, !"PIC Level", i32 2}
|
||||
!9 = !{!"clang version 4.0.0 (trunk 286129) (llvm/trunk 286128)"}
|
||||
!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))
|
||||
!11 = distinct !DIGlobalVariable(name: "h", scope: !1, file: !2, line: 2, type: !5, isLocal: false, isDefinition: true)
|
BIN
test/Bitcode/DIGlobalVariableExpression.ll.bc
Normal file
BIN
test/Bitcode/DIGlobalVariableExpression.ll.bc
Normal file
Binary file not shown.
@ -1,8 +1,20 @@
|
||||
; RUN: llvm-dis -o - %s.bc | FileCheck %s
|
||||
|
||||
; CHECK: !0 = distinct !DIGlobalVariable(name: "a", scope: null, isLocal: false, isDefinition: true, expr: !1)
|
||||
; CHECK: !1 = !DIExpression(DW_OP_constu, 42, DW_OP_stack_value)
|
||||
!llvm.dbg.cu = !{!0}
|
||||
!llvm.module.flags = !{!7, !8}
|
||||
|
||||
!named = !{!0}
|
||||
; 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)
|
||||
!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)
|
||||
!1 = !DIFile(filename: "g.c", directory: "/")
|
||||
!2 = !{}
|
||||
; CHECK: !3 = !{!4}
|
||||
!3 = !{!4}
|
||||
; CHECK: !4 = {{.*}}!DIGlobalVariableExpression(var: !5, expr: !8)
|
||||
; CHECK: !5 = !DIGlobalVariable(name: "c", scope: !0, file: !1, line: 1, type: !6, isLocal: false, isDefinition: true)
|
||||
; CHECK: !8 = !DIExpression(DW_OP_constu, 42, DW_OP_stack_value)
|
||||
!4 = !DIGlobalVariable(name: "c", scope: !0, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true, variable: i32 42)
|
||||
!5 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !6)
|
||||
!6 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!7 = !{i32 2, !"Dwarf Version", i32 2}
|
||||
!8 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
|
||||
!0 = distinct !DIGlobalVariable(name: "a", variable: i32 42)
|
||||
|
Binary file not shown.
@ -18,13 +18,14 @@
|
||||
; CHECK-NEXT: !7 = !DILocalVariable(name: "V1", scope: !6, type: !2)
|
||||
; CHECK-NEXT: !8 = !DIObjCProperty(name: "P1", type: !1)
|
||||
; CHECK-NEXT: !9 = !DITemplateTypeParameter(type: !1)
|
||||
; CHECK-NEXT: !10 = !DIGlobalVariable(name: "G",{{.*}} type: !1,
|
||||
; CHECK-NEXT: !11 = !DITemplateValueParameter(type: !1, value: i32* @G1)
|
||||
; CHECK-NEXT: !12 = !DIImportedEntity(tag: DW_TAG_imported_module, name: "T2", scope: !0, entity: !1)
|
||||
; CHECK-NEXT: !13 = !DICompositeType(tag: DW_TAG_structure_type, name: "T3", file: !0, elements: !14, identifier: "T3")
|
||||
; CHECK-NEXT: !14 = !{!15}
|
||||
; CHECK-NEXT: !15 = !DISubprogram(scope: !13,
|
||||
; CHECK-NEXT: !16 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type,{{.*}} extraData: !13)
|
||||
; CHECK-NEXT: !10 = distinct !DIGlobalVariableExpression(var: !11)
|
||||
; CHECK-NEXT: !11 = !DIGlobalVariable(name: "G",{{.*}} type: !1,
|
||||
; CHECK-NEXT: !12 = !DITemplateValueParameter(type: !1, value: i32* @G1)
|
||||
; CHECK-NEXT: !13 = !DIImportedEntity(tag: DW_TAG_imported_module, name: "T2", scope: !0, entity: !1)
|
||||
; CHECK-NEXT: !14 = !DICompositeType(tag: DW_TAG_structure_type, name: "T3", file: !0, elements: !15, identifier: "T3")
|
||||
; CHECK-NEXT: !15 = !{!16}
|
||||
; CHECK-NEXT: !16 = !DISubprogram(scope: !14,
|
||||
; CHECK-NEXT: !17 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type,{{.*}} extraData: !14)
|
||||
|
||||
!0 = !DIFile(filename: "path/to/file", directory: "/path/to/dir")
|
||||
!1 = !DICompositeType(tag: DW_TAG_structure_type, name: "T1", file: !0, identifier: "T1")
|
||||
|
@ -20,7 +20,7 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone
|
||||
|
||||
!llvm.dbg.cu = !{!0}
|
||||
|
||||
!0 = !DIGlobalVariable(name: "vsplive", line: 617, isLocal: true, isDefinition: true, scope: !1, file: !2, type: !6)
|
||||
!0 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "vsplive", line: 617, isLocal: true, isDefinition: true, scope: !1, file: !2, type: !6))
|
||||
!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)
|
||||
!2 = !DIFile(filename: "print.i", directory: "/Volumes/Ebi/echeng/radars/r9146594")
|
||||
!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})
|
||||
|
@ -60,7 +60,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
!11 = distinct !DILexicalBlock(line: 5, column: 1, file: !26, scope: !1)
|
||||
!12 = !DILocalVariable(name: "c", line: 7, scope: !11, file: !2, type: !13)
|
||||
!13 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!14 = !DIGlobalVariable(name: "length", linkageName: "length", line: 1, isLocal: false, isDefinition: true, scope: !2, file: !2, type: !13)
|
||||
!14 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "length", linkageName: "length", line: 1, isLocal: false, isDefinition: true, scope: !2, file: !2, type: !13))
|
||||
!15 = !DILocation(line: 4, column: 24, scope: !1)
|
||||
!16 = !DILocation(line: 4, column: 43, scope: !1)
|
||||
!17 = !DILocation(line: 9, column: 2, scope: !11)
|
||||
|
@ -91,11 +91,11 @@ entry:
|
||||
!10 = !DILocalVariable(name: "a", line: 4, arg: 1, scope: !0, file: !1, type: !5)
|
||||
!11 = !DILocalVariable(name: "b", line: 4, scope: !12, file: !1, type: !5)
|
||||
!12 = distinct !DILexicalBlock(line: 4, column: 0, file: !47, scope: !0)
|
||||
!13 = !DIGlobalVariable(name: "x1", line: 3, isLocal: true, isDefinition: true, scope: !1, file: !1, type: !5)
|
||||
!14 = !DIGlobalVariable(name: "x2", line: 6, isLocal: true, isDefinition: true, scope: !1, file: !1, type: !5)
|
||||
!15 = !DIGlobalVariable(name: "x3", line: 9, isLocal: true, isDefinition: true, scope: !1, file: !1, type: !5)
|
||||
!16 = !DIGlobalVariable(name: "x4", line: 12, isLocal: true, isDefinition: true, scope: !1, file: !1, type: !5)
|
||||
!17 = !DIGlobalVariable(name: "x5", line: 15, isLocal: false, isDefinition: true, scope: !1, file: !1, type: !5)
|
||||
!13 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x1", line: 3, isLocal: true, isDefinition: true, scope: !1, file: !1, type: !5))
|
||||
!14 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x2", line: 6, isLocal: true, isDefinition: true, scope: !1, file: !1, type: !5))
|
||||
!15 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x3", line: 9, isLocal: true, isDefinition: true, scope: !1, file: !1, type: !5))
|
||||
!16 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x4", line: 12, isLocal: true, isDefinition: true, scope: !1, file: !1, type: !5))
|
||||
!17 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x5", line: 15, isLocal: false, isDefinition: true, scope: !1, file: !1, type: !5))
|
||||
!18 = !DILocalVariable(name: "a", line: 7, arg: 1, scope: !6, file: !1, type: !5)
|
||||
!19 = !DILocalVariable(name: "b", line: 7, scope: !20, file: !1, type: !5)
|
||||
!20 = distinct !DILexicalBlock(line: 7, column: 0, file: !47, scope: !6)
|
||||
|
@ -95,8 +95,8 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
!19 = !DILocalVariable(name: "a", line: 14, arg: 1, scope: !8, file: !2, type: !5)
|
||||
!20 = !DILocalVariable(name: "b", line: 14, scope: !21, file: !2, type: !5)
|
||||
!21 = distinct !DILexicalBlock(line: 14, column: 19, file: !47, scope: !8)
|
||||
!25 = !DIGlobalVariable(name: "x1", line: 4, isLocal: true, isDefinition: true, scope: !0, file: !2, type: !5)
|
||||
!26 = !DIGlobalVariable(name: "x2", line: 7, isLocal: true, isDefinition: true, scope: !0, file: !2, type: !5)
|
||||
!25 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x1", line: 4, isLocal: true, isDefinition: true, scope: !0, file: !2, type: !5))
|
||||
!26 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x2", line: 7, isLocal: true, isDefinition: true, scope: !0, file: !2, type: !5))
|
||||
!27 = !DILocalVariable(name: "a", line: 17, arg: 1, scope: !9, file: !2, type: !5)
|
||||
!28 = !DILocalVariable(name: "b", line: 17, scope: !29, file: !2, type: !5)
|
||||
!29 = distinct !DILexicalBlock(line: 17, column: 19, file: !47, scope: !9)
|
||||
|
@ -94,11 +94,11 @@ attributes #3 = { nounwind }
|
||||
!13 = distinct !DILexicalBlock(line: 12, column: 0, file: !1, scope: !4)
|
||||
!14 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 32, align: 32, baseType: !8)
|
||||
!15 = !{!16, !18, !19, !20}
|
||||
!16 = !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !17)
|
||||
!16 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !17))
|
||||
!17 = !DIBasicType(tag: DW_TAG_base_type, name: "long long int", size: 64, align: 32, encoding: DW_ATE_signed)
|
||||
!18 = !DIGlobalVariable(name: "b", line: 2, isLocal: false, isDefinition: true, scope: null, file: !5, type: !8)
|
||||
!19 = !DIGlobalVariable(name: "c", line: 3, isLocal: false, isDefinition: true, scope: null, file: !5, type: !8)
|
||||
!20 = !DIGlobalVariable(name: "d", line: 4, isLocal: false, isDefinition: true, scope: null, file: !5, type: !8)
|
||||
!18 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "b", line: 2, isLocal: false, isDefinition: true, scope: null, file: !5, type: !8))
|
||||
!19 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c", line: 3, isLocal: false, isDefinition: true, scope: null, file: !5, type: !8))
|
||||
!20 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "d", line: 4, isLocal: false, isDefinition: true, scope: null, file: !5, type: !8))
|
||||
!21 = !DILocation(line: 10, scope: !22)
|
||||
!22 = distinct !DILexicalBlock(line: 10, column: 0, file: !1, scope: !4)
|
||||
!26 = !DILocation(line: 12, scope: !13)
|
||||
|
@ -26,7 +26,7 @@ attributes #1 = { nounwind readnone }
|
||||
!llvm.module.flags = !{!12, !13}
|
||||
!llvm.ident = !{!14}
|
||||
|
||||
!0 = distinct !DIGlobalVariable(name: "myvar_c", scope: !1, file: !2, line: 3, type: !5, isLocal: true, isDefinition: true)
|
||||
!0 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "myvar_c", scope: !1, file: !2, line: 3, type: !5, isLocal: true, isDefinition: true))
|
||||
!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)
|
||||
!2 = !DIFile(filename: "testprog.c", directory: "/w/llvm/bld")
|
||||
!3 = !DISubroutineType(types: !4)
|
||||
|
@ -42,10 +42,10 @@ declare void @extfunc(i8 signext)
|
||||
!3 = !{!4}
|
||||
; Find list of global variables and make sure it's the one used by DICompileUnit
|
||||
; CHECK: [[GLOBALSNODE]] = !{[[GVNODE:![0-9]+]]}
|
||||
!4 = distinct !DIGlobalVariable(name: "static_var", scope: !0, file: !1, line: 2, type: !5, isLocal: false,
|
||||
isDefinition: true)
|
||||
!4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "static_var", scope: !0, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true))
|
||||
; Debug info must also be updated to reflect new address space.
|
||||
; CHECK: [[GVNODE]] = distinct !DIGlobalVariable(name: "static_var"
|
||||
; CHECK: [[GVNODE]] = !DIGlobalVariableExpression(var: [[GVVAR:.*]])
|
||||
; CHECK: [[GVVAR]] = !DIGlobalVariable(name: "static_var"
|
||||
; CHECK-SAME: scope: [[CUNODE]]
|
||||
; CHECK-SAME: type: [[TYPENODE:![0-9]+]]
|
||||
!5 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
|
||||
|
@ -352,145 +352,145 @@ attributes #1 = { nounwind readnone }
|
||||
!296 = !DILocalVariable(name: "j", line: 907, scope: !293, file: !5, type: !8)
|
||||
!297 = !DILocalVariable(name: "k", line: 907, scope: !293, file: !5, type: !8)
|
||||
!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}
|
||||
!299 = !DIGlobalVariable(name: "grid_points", line: 28, isLocal: true, isDefinition: true, scope: null, file: !300, type: !302)
|
||||
!299 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "grid_points", line: 28, isLocal: true, isDefinition: true, scope: null, file: !300, type: !302))
|
||||
!300 = !DIFile(filename: "./header.h", directory: "/home/hfinkel/src/NPB2.3-omp-C/BT")
|
||||
!301 = !{!"./header.h", !"/home/hfinkel/src/NPB2.3-omp-C/BT"}
|
||||
!302 = !DICompositeType(tag: DW_TAG_array_type, size: 96, align: 32, baseType: !8, elements: !303)
|
||||
!303 = !{!178}
|
||||
!304 = !DIGlobalVariable(name: "dt", line: 35, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!305 = !DIGlobalVariable(name: "rhs", line: 68, isLocal: true, isDefinition: true, scope: null, file: !300, type: !306)
|
||||
!304 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dt", line: 35, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!305 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "rhs", line: 68, isLocal: true, isDefinition: true, scope: null, file: !300, type: !306))
|
||||
!306 = !DICompositeType(tag: DW_TAG_array_type, size: 1385839040, align: 64, baseType: !20, elements: !307)
|
||||
!307 = !{!308, !308, !308, !93}
|
||||
!308 = !DISubrange(count: 163)
|
||||
!309 = !DIGlobalVariable(name: "zzcon5", line: 42, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!310 = !DIGlobalVariable(name: "zzcon4", line: 42, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!311 = !DIGlobalVariable(name: "zzcon3", line: 42, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!312 = !DIGlobalVariable(name: "dz5tz1", line: 43, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!313 = !DIGlobalVariable(name: "dz4tz1", line: 43, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!314 = !DIGlobalVariable(name: "dz3tz1", line: 43, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!315 = !DIGlobalVariable(name: "zzcon2", line: 42, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!316 = !DIGlobalVariable(name: "dz2tz1", line: 43, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!317 = !DIGlobalVariable(name: "tz2", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!318 = !DIGlobalVariable(name: "dz1tz1", line: 43, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!319 = !DIGlobalVariable(name: "yycon5", line: 40, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!320 = !DIGlobalVariable(name: "yycon4", line: 40, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!321 = !DIGlobalVariable(name: "yycon3", line: 40, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!322 = !DIGlobalVariable(name: "dy5ty1", line: 41, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!323 = !DIGlobalVariable(name: "dy4ty1", line: 41, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!324 = !DIGlobalVariable(name: "dy3ty1", line: 41, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!325 = !DIGlobalVariable(name: "yycon2", line: 40, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!326 = !DIGlobalVariable(name: "dy2ty1", line: 41, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!327 = !DIGlobalVariable(name: "ty2", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!328 = !DIGlobalVariable(name: "dy1ty1", line: 41, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!329 = !DIGlobalVariable(name: "dssp", line: 35, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!330 = !DIGlobalVariable(name: "c1", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!331 = !DIGlobalVariable(name: "xxcon5", line: 38, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!332 = !DIGlobalVariable(name: "xxcon4", line: 38, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!333 = !DIGlobalVariable(name: "xxcon3", line: 38, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!334 = !DIGlobalVariable(name: "dx5tx1", line: 39, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!335 = !DIGlobalVariable(name: "dx4tx1", line: 39, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!336 = !DIGlobalVariable(name: "dx3tx1", line: 39, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!337 = !DIGlobalVariable(name: "c2", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!338 = !DIGlobalVariable(name: "con43", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!339 = !DIGlobalVariable(name: "xxcon2", line: 38, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!340 = !DIGlobalVariable(name: "dx2tx1", line: 39, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!341 = !DIGlobalVariable(name: "tx2", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!342 = !DIGlobalVariable(name: "dx1tx1", line: 39, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!343 = !DIGlobalVariable(name: "forcing", line: 66, isLocal: true, isDefinition: true, scope: null, file: !300, type: !344)
|
||||
!309 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "zzcon5", line: 42, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!310 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "zzcon4", line: 42, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!311 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "zzcon3", line: 42, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!312 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dz5tz1", line: 43, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!313 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dz4tz1", line: 43, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!314 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dz3tz1", line: 43, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!315 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "zzcon2", line: 42, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!316 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dz2tz1", line: 43, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!317 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "tz2", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!318 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dz1tz1", line: 43, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!319 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "yycon5", line: 40, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!320 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "yycon4", line: 40, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!321 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "yycon3", line: 40, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!322 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dy5ty1", line: 41, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!323 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dy4ty1", line: 41, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!324 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dy3ty1", line: 41, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!325 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "yycon2", line: 40, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!326 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dy2ty1", line: 41, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!327 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ty2", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!328 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dy1ty1", line: 41, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!329 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dssp", line: 35, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!330 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c1", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!331 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "xxcon5", line: 38, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!332 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "xxcon4", line: 38, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!333 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "xxcon3", line: 38, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!334 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dx5tx1", line: 39, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!335 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dx4tx1", line: 39, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!336 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dx3tx1", line: 39, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!337 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c2", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!338 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "con43", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!339 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "xxcon2", line: 38, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!340 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dx2tx1", line: 39, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!341 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "tx2", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!342 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dx1tx1", line: 39, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!343 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "forcing", line: 66, isLocal: true, isDefinition: true, scope: null, file: !300, type: !344))
|
||||
!344 = !DICompositeType(tag: DW_TAG_array_type, size: 1663006848, align: 64, baseType: !20, elements: !345)
|
||||
!345 = !{!308, !308, !308, !346}
|
||||
!346 = !DISubrange(count: 6)
|
||||
!347 = !DIGlobalVariable(name: "qs", line: 63, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348)
|
||||
!347 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "qs", line: 63, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348))
|
||||
!348 = !DICompositeType(tag: DW_TAG_array_type, size: 277167808, align: 64, baseType: !20, elements: !349)
|
||||
!349 = !{!308, !308, !308}
|
||||
!350 = !DIGlobalVariable(name: "square", line: 65, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348)
|
||||
!351 = !DIGlobalVariable(name: "ws", line: 62, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348)
|
||||
!352 = !DIGlobalVariable(name: "vs", line: 61, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348)
|
||||
!353 = !DIGlobalVariable(name: "us", line: 60, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348)
|
||||
!354 = !DIGlobalVariable(name: "rho_i", line: 64, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348)
|
||||
!355 = !DIGlobalVariable(name: "u", line: 67, isLocal: true, isDefinition: true, scope: null, file: !300, type: !306)
|
||||
!356 = !DIGlobalVariable(name: "ce", line: 36, isLocal: true, isDefinition: true, scope: null, file: !300, type: !357)
|
||||
!350 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "square", line: 65, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348))
|
||||
!351 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ws", line: 62, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348))
|
||||
!352 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "vs", line: 61, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348))
|
||||
!353 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "us", line: 60, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348))
|
||||
!354 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "rho_i", line: 64, isLocal: true, isDefinition: true, scope: null, file: !300, type: !348))
|
||||
!355 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "u", line: 67, isLocal: true, isDefinition: true, scope: null, file: !300, type: !306))
|
||||
!356 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ce", line: 36, isLocal: true, isDefinition: true, scope: null, file: !300, type: !357))
|
||||
!357 = !DICompositeType(tag: DW_TAG_array_type, size: 4160, align: 64, baseType: !20, elements: !358)
|
||||
!358 = !{!93, !359}
|
||||
!359 = !DISubrange(count: 13)
|
||||
!360 = !DIGlobalVariable(name: "dnzm1", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!361 = !DIGlobalVariable(name: "dnym1", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!362 = !DIGlobalVariable(name: "dnxm1", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!363 = !DIGlobalVariable(name: "zzcon1", line: 42, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!364 = !DIGlobalVariable(name: "yycon1", line: 40, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!365 = !DIGlobalVariable(name: "xxcon1", line: 38, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!366 = !DIGlobalVariable(name: "con16", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!367 = !DIGlobalVariable(name: "c2iv", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!368 = !DIGlobalVariable(name: "c3c4tz3", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!369 = !DIGlobalVariable(name: "c3c4ty3", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!370 = !DIGlobalVariable(name: "c3c4tx3", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!371 = !DIGlobalVariable(name: "comz6", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!372 = !DIGlobalVariable(name: "comz5", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!373 = !DIGlobalVariable(name: "comz4", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!374 = !DIGlobalVariable(name: "comz1", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!375 = !DIGlobalVariable(name: "dtdssp", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!376 = !DIGlobalVariable(name: "c2dttz1", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!377 = !DIGlobalVariable(name: "c2dtty1", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!378 = !DIGlobalVariable(name: "c2dttx1", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!379 = !DIGlobalVariable(name: "dttz2", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!380 = !DIGlobalVariable(name: "dttz1", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!381 = !DIGlobalVariable(name: "dtty2", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!382 = !DIGlobalVariable(name: "dtty1", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!383 = !DIGlobalVariable(name: "dttx2", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!384 = !DIGlobalVariable(name: "dttx1", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!385 = !DIGlobalVariable(name: "c5dssp", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!386 = !DIGlobalVariable(name: "c4dssp", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!387 = !DIGlobalVariable(name: "dzmax", line: 37, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!388 = !DIGlobalVariable(name: "dymax", line: 37, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!389 = !DIGlobalVariable(name: "dxmax", line: 37, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!390 = !DIGlobalVariable(name: "dz5", line: 34, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!391 = !DIGlobalVariable(name: "dz4", line: 34, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!392 = !DIGlobalVariable(name: "dz3", line: 34, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!393 = !DIGlobalVariable(name: "dz2", line: 34, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!394 = !DIGlobalVariable(name: "dz1", line: 34, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!395 = !DIGlobalVariable(name: "dy5", line: 33, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!396 = !DIGlobalVariable(name: "dy4", line: 33, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!397 = !DIGlobalVariable(name: "dy3", line: 33, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!398 = !DIGlobalVariable(name: "dy2", line: 33, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!399 = !DIGlobalVariable(name: "dy1", line: 33, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!400 = !DIGlobalVariable(name: "dx5", line: 32, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!401 = !DIGlobalVariable(name: "dx4", line: 32, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!402 = !DIGlobalVariable(name: "dx3", line: 32, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!403 = !DIGlobalVariable(name: "dx2", line: 32, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!404 = !DIGlobalVariable(name: "dx1", line: 32, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!405 = !DIGlobalVariable(name: "tz3", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!406 = !DIGlobalVariable(name: "tz1", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!407 = !DIGlobalVariable(name: "ty3", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!408 = !DIGlobalVariable(name: "ty1", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!409 = !DIGlobalVariable(name: "tx3", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!410 = !DIGlobalVariable(name: "tx1", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!411 = !DIGlobalVariable(name: "conz1", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!412 = !DIGlobalVariable(name: "c1345", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!413 = !DIGlobalVariable(name: "c3c4", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!414 = !DIGlobalVariable(name: "c1c5", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!415 = !DIGlobalVariable(name: "c1c2", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!416 = !DIGlobalVariable(name: "c5", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!417 = !DIGlobalVariable(name: "c4", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!418 = !DIGlobalVariable(name: "c3", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!419 = !DIGlobalVariable(name: "lhs", line: 69, isLocal: true, isDefinition: true, scope: null, file: !300, type: !420)
|
||||
!360 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dnzm1", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!361 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dnym1", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!362 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dnxm1", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!363 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "zzcon1", line: 42, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!364 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "yycon1", line: 40, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!365 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "xxcon1", line: 38, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!366 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "con16", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!367 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c2iv", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!368 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c3c4tz3", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!369 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c3c4ty3", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!370 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c3c4tx3", line: 48, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!371 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "comz6", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!372 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "comz5", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!373 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "comz4", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!374 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "comz1", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!375 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dtdssp", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!376 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c2dttz1", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!377 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c2dtty1", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!378 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c2dttx1", line: 47, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!379 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dttz2", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!380 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dttz1", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!381 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dtty2", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!382 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dtty1", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!383 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dttx2", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!384 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dttx1", line: 46, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!385 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c5dssp", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!386 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c4dssp", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!387 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dzmax", line: 37, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!388 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dymax", line: 37, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!389 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dxmax", line: 37, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!390 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dz5", line: 34, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!391 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dz4", line: 34, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!392 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dz3", line: 34, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!393 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dz2", line: 34, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!394 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dz1", line: 34, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!395 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dy5", line: 33, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!396 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dy4", line: 33, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!397 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dy3", line: 33, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!398 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dy2", line: 33, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!399 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dy1", line: 33, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!400 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dx5", line: 32, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!401 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dx4", line: 32, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!402 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dx3", line: 32, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!403 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dx2", line: 32, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!404 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "dx1", line: 32, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!405 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "tz3", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!406 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "tz1", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!407 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ty3", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!408 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ty1", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!409 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "tx3", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!410 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "tx1", line: 31, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!411 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "conz1", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!412 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c1345", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!413 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c3c4", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!414 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c1c5", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!415 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c1c2", line: 44, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!416 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c5", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!417 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c4", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!418 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "c3", line: 45, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!419 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "lhs", line: 69, isLocal: true, isDefinition: true, scope: null, file: !300, type: !420))
|
||||
!420 = !DICompositeType(tag: DW_TAG_array_type, size: 20787585600, align: 64, baseType: !20, elements: !421)
|
||||
!421 = !{!308, !308, !308, !178, !93, !93}
|
||||
!422 = !DIGlobalVariable(name: "q", line: 73, isLocal: true, isDefinition: true, scope: null, file: !300, type: !423)
|
||||
!422 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "q", line: 73, isLocal: true, isDefinition: true, scope: null, file: !300, type: !423))
|
||||
!423 = !DICompositeType(tag: DW_TAG_array_type, size: 10368, align: 64, baseType: !20, elements: !424)
|
||||
!424 = !{!425}
|
||||
!425 = !DISubrange(count: 162)
|
||||
!426 = !DIGlobalVariable(name: "cuf", line: 72, isLocal: true, isDefinition: true, scope: null, file: !300, type: !423)
|
||||
!427 = !DIGlobalVariable(name: "buf", line: 75, isLocal: true, isDefinition: true, scope: null, file: !300, type: !428)
|
||||
!426 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "cuf", line: 72, isLocal: true, isDefinition: true, scope: null, file: !300, type: !423))
|
||||
!427 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "buf", line: 75, isLocal: true, isDefinition: true, scope: null, file: !300, type: !428))
|
||||
!428 = !DICompositeType(tag: DW_TAG_array_type, size: 51840, align: 64, baseType: !20, elements: !429)
|
||||
!429 = !{!425, !93}
|
||||
!430 = !DIGlobalVariable(name: "ue", line: 74, isLocal: true, isDefinition: true, scope: null, file: !300, type: !428)
|
||||
!431 = !DIGlobalVariable(name: "njac", line: 86, isLocal: true, isDefinition: true, scope: null, file: !300, type: !432)
|
||||
!430 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ue", line: 74, isLocal: true, isDefinition: true, scope: null, file: !300, type: !428))
|
||||
!431 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "njac", line: 86, isLocal: true, isDefinition: true, scope: null, file: !300, type: !432))
|
||||
!432 = !DICompositeType(tag: DW_TAG_array_type, size: 6886684800, align: 64, baseType: !20, elements: !433)
|
||||
!433 = !{!308, !308, !425, !93, !93}
|
||||
!434 = !DIGlobalVariable(name: "fjac", line: 84, isLocal: true, isDefinition: true, scope: null, file: !300, type: !432)
|
||||
!435 = !DIGlobalVariable(name: "tmp3", line: 88, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!436 = !DIGlobalVariable(name: "tmp2", line: 88, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!437 = !DIGlobalVariable(name: "tmp1", line: 88, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20)
|
||||
!434 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "fjac", line: 84, isLocal: true, isDefinition: true, scope: null, file: !300, type: !432))
|
||||
!435 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "tmp3", line: 88, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!436 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "tmp2", line: 88, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!437 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "tmp1", line: 88, isLocal: true, isDefinition: true, scope: null, file: !300, type: !20))
|
||||
!438 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!439 = !DILocation(line: 1898, scope: !440)
|
||||
!440 = distinct !DILexicalBlock(line: 1898, column: 0, file: !1, scope: !114)
|
||||
|
@ -79,7 +79,7 @@ attributes #3 = { nounwind }
|
||||
!21 = !{!22}
|
||||
!22 = !DILocalVariable(name: "power", arg: 1, scope: !18, file: !1, line: 1, type: !9)
|
||||
!23 = !{!24}
|
||||
!24 = !DIGlobalVariable(name: "powers", scope: !18, file: !1, line: 3, type: !25, isLocal: true, isDefinition: true)
|
||||
!24 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "powers", scope: !18, file: !1, line: 3, type: !25, isLocal: true, isDefinition: true))
|
||||
!25 = !DICompositeType(tag: DW_TAG_array_type, baseType: !26, size: 1472, align: 64, elements: !27)
|
||||
!26 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !4)
|
||||
!27 = !{!28}
|
||||
|
@ -45,7 +45,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata)
|
||||
!1 = !DIFile(filename: "crash.c", directory: "wasm/tests")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DIGlobalVariable(name: "key", scope: !0, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true)
|
||||
!4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "key", scope: !0, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true))
|
||||
!5 = !DICompositeType(tag: DW_TAG_array_type, baseType: !6, size: 120, align: 8, elements: !9)
|
||||
!6 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint8_t", file: !7, line: 185, baseType: !8)
|
||||
!7 = !DIFile(filename: "wasm/emscripten/system/include/libc/bits/alltypes.h", directory: "wasm/tests")
|
||||
|
@ -24,7 +24,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
||||
!llvm.dbg.cu = !{!2}
|
||||
!llvm.module.flags = !{!38}
|
||||
|
||||
!0 = !DIGlobalVariable(name: "ret", line: 7, isLocal: false, isDefinition: true, scope: !1, file: !1, type: !3)
|
||||
!0 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ret", line: 7, isLocal: false, isDefinition: true, scope: !1, file: !1, type: !3))
|
||||
!1 = !DIFile(filename: "foo.c", directory: "/tmp/")
|
||||
!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)
|
||||
!3 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -116,7 +116,7 @@ attributes #2 = { nounwind readnone }
|
||||
!llvm.module.flags = !{!7, !8, !9}
|
||||
!llvm.ident = !{!10}
|
||||
|
||||
!0 = distinct !DIGlobalVariable(name: "ld_ptr", scope: !1, file: !2, line: 17, type: !5, isLocal: false, isDefinition: true)
|
||||
!0 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ld_ptr", scope: !1, file: !2, line: 17, type: !5, isLocal: false, isDefinition: true))
|
||||
!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)
|
||||
!2 = !DIFile(filename: "fp128-g.c", directory: "/disk5/chh/Debug/ld.loop")
|
||||
!3 = !{}
|
||||
|
@ -64,7 +64,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata)
|
||||
!19 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!20 = !DILocalVariable(name: "value", line: 16, scope: !4, file: !6, type: !14)
|
||||
!21 = !{!22, !23}
|
||||
!22 = !DIGlobalVariable(name: "g1", line: 5, isLocal: false, isDefinition: true, scope: null, file: !6, type: !14)
|
||||
!23 = !DIGlobalVariable(name: "g2", line: 6, isLocal: false, isDefinition: true, scope: null, file: !6, type: !19)
|
||||
!22 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "g1", line: 5, isLocal: false, isDefinition: true, scope: null, file: !6, type: !14))
|
||||
!23 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "g2", line: 6, isLocal: false, isDefinition: true, scope: null, file: !6, type: !19))
|
||||
!24 = !{i32 2, !"Dwarf Version", i32 2}
|
||||
!25 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
|
@ -82,7 +82,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata)
|
||||
!18 = !DILocalVariable(name: "c", line: 7, scope: !13, file: !14, type: !4)
|
||||
!19 = !DILocalVariable(name: "lc", line: 8, scope: !13, file: !14, type: !11)
|
||||
!20 = !{!21}
|
||||
!21 = !DIGlobalVariable(name: "argc", line: 1, isLocal: false, isDefinition: true, scope: null, file: !14, type: !11)
|
||||
!21 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "argc", line: 1, isLocal: false, isDefinition: true, scope: null, file: !14, type: !11))
|
||||
!22 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!23 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!25 = !DILocation(line: 8, column: 3, scope: !13)
|
||||
|
@ -22,6 +22,6 @@ define void @f1() {
|
||||
!7 = !{!8}
|
||||
!8 = !DIBasicType(tag: DW_TAG_base_type, size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!9 = !{!10}
|
||||
!10 = !DIGlobalVariable(name: "i", linkageName: "_ZL1i", line: 1, isLocal: true, isDefinition: true, scope: null, file: !1, type: !8)
|
||||
!10 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "i", linkageName: "_ZL1i", line: 1, isLocal: true, isDefinition: true, scope: null, file: !1, type: !8))
|
||||
!11 = !{i32 2, !"Dwarf Version", i32 3}
|
||||
!13 = !{i32 1, !"Debug Info Version", i32 3}
|
||||
|
@ -13,7 +13,7 @@ target triple = "aarch64_be--none-eabi"
|
||||
!1 = !DIFile(filename: "-", directory: "/work/validation")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !7)
|
||||
!4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !7))
|
||||
!5 = !DIFile(filename: "<stdin>", directory: "/work/validation")
|
||||
!6 = !{!"<stdin>", !"/work/validation"}
|
||||
!7 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -58,7 +58,7 @@ target triple = "aarch64_be--linux-gnu"
|
||||
!1 = !DIFile(filename: "bitfields.c", directory: "/")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = !DIGlobalVariable(name: "b", scope: !0, file: !5, line: 8, type: !6, isLocal: false, isDefinition: true)
|
||||
!4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "b", scope: !0, file: !5, line: 8, type: !6, isLocal: false, isDefinition: true))
|
||||
!5 = !DIFile(filename: "bitfields.c", directory: "/")
|
||||
!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "bitfield", file: !5, line: 1, size: 96, elements: !7)
|
||||
!7 = !{!8, !10, !11, !12}
|
||||
|
@ -200,8 +200,8 @@ attributes #5 = { builtin }
|
||||
!38 = !DILocalVariable(name: "c", line: 19, scope: !34, file: !26, type: !4)
|
||||
!39 = !DILocalVariable(name: "d", line: 20, scope: !34, file: !26, type: !14)
|
||||
!40 = !{!41, !42}
|
||||
!41 = !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !26, type: !20)
|
||||
!42 = !DIGlobalVariable(name: "b", line: 7, isLocal: false, isDefinition: true, scope: null, file: !26, type: !12)
|
||||
!41 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !26, type: !20))
|
||||
!42 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "b", line: 7, isLocal: false, isDefinition: true, scope: null, file: !26, type: !12))
|
||||
!43 = !{i32 2, !"Dwarf Version", i32 2}
|
||||
!44 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!45 = !{!"clang version 3.7.0 "}
|
||||
|
@ -22,7 +22,7 @@ target datalayout = "E-m:e-p:32:32-i64:64-v128:64:128-n32-S64"
|
||||
!1 = !DIFile(filename: "bitfield.c", directory: "/Volumes/Data/llvm")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DIGlobalVariable(name: "s", scope: !0, file: !1, line: 6, type: !5, isLocal: false, isDefinition: true)
|
||||
!4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "s", scope: !0, file: !1, line: 6, type: !5, isLocal: false, isDefinition: true))
|
||||
!5 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S", file: !1, line: 1, size: 32, elements: !6)
|
||||
!6 = !{!7, !9, !10, !11}
|
||||
; CHECK: DW_TAG_member
|
||||
|
@ -30,7 +30,7 @@ target triple = "thumbv7-apple-ios"
|
||||
!1 = !DIFile(filename: "test.i", directory: "/")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = !DIGlobalVariable(name: "a", scope: !0, file: !1, line: 5, type: !5, isLocal: false, isDefinition: true)
|
||||
!4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", scope: !0, file: !1, line: 5, type: !5, isLocal: false, isDefinition: true))
|
||||
!5 = !DICompositeType(tag: DW_TAG_structure_type, file: !1, line: 1, size: 48, align: 8, elements: !6)
|
||||
!6 = !{!7, !9}
|
||||
!7 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !5, file: !1, line: 2, baseType: !8, size: 8, align: 8)
|
||||
|
@ -39,9 +39,9 @@ attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"=
|
||||
!5 = !DISubroutineType(types: !6)
|
||||
!6 = !{null}
|
||||
!7 = !{!8, !10}
|
||||
!8 = !DIGlobalVariable(name: "ch", scope: !0, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true)
|
||||
!8 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ch", scope: !0, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true))
|
||||
!9 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_unsigned_char)
|
||||
!10 = !DIGlobalVariable(name: "b", scope: !0, file: !1, line: 2, type: !11, isLocal: false, isDefinition: true)
|
||||
!10 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "b", scope: !0, file: !1, line: 2, type: !11, isLocal: false, isDefinition: true))
|
||||
!11 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!12 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!13 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
|
@ -26,7 +26,7 @@
|
||||
!1 = !DIFile(filename: "tls.c", directory: "/tmp")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = !DIGlobalVariable(name: "x", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6)
|
||||
!4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6))
|
||||
!5 = !DIFile(filename: "tls.c", directory: "/tmp")
|
||||
!6 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!7 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
|
@ -46,7 +46,7 @@ target triple = "i686-pc-windows-msvc18.0.0"
|
||||
!1 = !DIFile(filename: "-", directory: "/usr/local/google/home/majnemer/llvm/src")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DIGlobalVariable(name: "s", scope: !0, file: !5, line: 5, type: !6, isLocal: false, isDefinition: true)
|
||||
!4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "s", scope: !0, file: !5, line: 5, type: !6, isLocal: false, isDefinition: true))
|
||||
!5 = !DIFile(filename: "<stdin>", directory: "/usr/local/google/home/majnemer/llvm/src")
|
||||
!6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S", file: !5, line: 2, size: 64, align: 32, elements: !7)
|
||||
!7 = !{!8, !10}
|
||||
|
@ -5766,7 +5766,7 @@ target triple = "x86_64-pc-windows-msvc19.0.23918"
|
||||
!5700 = !DIEnumerator(name: "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE5695", value: 5694)
|
||||
!5701 = !DIEnumerator(name: "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE5696", value: 5695)
|
||||
!5702 = !{!5703}
|
||||
!5703 = distinct !DIGlobalVariable(name: "x", linkageName: "\01?x@@3W4BigThing@@A", scope: !0, file: !1, line: 5698, type: !3, isLocal: false, isDefinition: true)
|
||||
!5703 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", linkageName: "\01?x@@3W4BigThing@@A", scope: !0, file: !1, line: 5698, type: !3, isLocal: false, isDefinition: true))
|
||||
!5704 = !{i32 2, !"CodeView", i32 1}
|
||||
!5705 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!5706 = !{i32 1, !"PIC Level", i32 2}
|
||||
|
@ -193,13 +193,13 @@ target triple = "x86_64-pc-windows-msvc18.0.0"
|
||||
!1 = !DIFile(filename: "-", directory: "/usr/local/google/home/majnemer/llvm/src")
|
||||
!2 = !{}
|
||||
!3 = !{!4, !10, !29}
|
||||
!4 = distinct !DIGlobalVariable(name: "s0", scope: !0, file: !5, line: 7, type: !6, isLocal: false, isDefinition: true)
|
||||
!4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "s0", scope: !0, file: !5, line: 7, type: !6, isLocal: false, isDefinition: true))
|
||||
!5 = !DIFile(filename: "<stdin>", directory: "/usr/local/google/home/majnemer/llvm/src")
|
||||
!6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S0", file: !5, line: 3, size: 24, elements: !7)
|
||||
!7 = !{!8}
|
||||
!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)
|
||||
!9 = !DIBasicType(name: "short", size: 16, encoding: DW_ATE_signed)
|
||||
!10 = distinct !DIGlobalVariable(name: "s1", scope: !0, file: !5, line: 18, type: !11, isLocal: false, isDefinition: true)
|
||||
!10 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "s1", scope: !0, file: !5, line: 18, type: !11, isLocal: false, isDefinition: true))
|
||||
!11 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S1", file: !5, line: 10, size: 128, elements: !12)
|
||||
!12 = !{!13, !18, !19, !21, !22, !23, !28}
|
||||
!13 = !DIDerivedType(tag: DW_TAG_member, name: "x1", scope: !11, file: !5, line: 11, baseType: !14, size: 16)
|
||||
@ -218,7 +218,7 @@ target triple = "x86_64-pc-windows-msvc18.0.0"
|
||||
!26 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !24, file: !5, line: 16, baseType: !15, size: 8)
|
||||
!27 = !DIDerivedType(tag: DW_TAG_member, name: "s", scope: !24, file: !5, line: 16, baseType: !9, size: 16, offset: 8)
|
||||
!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)
|
||||
!29 = distinct !DIGlobalVariable(name: "s2", scope: !0, file: !5, line: 24, type: !30, isLocal: false, isDefinition: true)
|
||||
!29 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "s2", scope: !0, file: !5, line: 24, type: !30, isLocal: false, isDefinition: true))
|
||||
!30 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S2", file: !5, line: 21, size: 32, elements: !31)
|
||||
!31 = !{!32}
|
||||
!32 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !30, file: !5, line: 23, baseType: !20, size: 1, flags: DIFlagBitField, extraData: i64 0)
|
||||
|
@ -42,7 +42,7 @@ target triple = "i686-pc-windows-msvc18.0.0"
|
||||
!6 = !{!7}
|
||||
!7 = !DIEnumerator(name: "BLAH", value: 0)
|
||||
!8 = !{!9}
|
||||
!9 = distinct !DIGlobalVariable(name: "e", linkageName: "\01?e@@3W4E@@A", scope: !0, file: !4, line: 2, type: !3, isLocal: false, isDefinition: true)
|
||||
!9 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "e", linkageName: "\01?e@@3W4E@@A", scope: !0, file: !4, line: 2, type: !3, isLocal: false, isDefinition: true))
|
||||
!10 = !{i32 2, !"CodeView", i32 1}
|
||||
!11 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!12 = !{!"clang version 3.9.0 (trunk 272790) (llvm/trunk 272813)"}
|
||||
|
@ -15,7 +15,7 @@ target triple = "i686-pc-windows-msvc"
|
||||
!1 = !DIFile(filename: "/usr/local/google/home/majnemer/Downloads/<stdin>", directory: "/usr/local/google/home/majnemer/llvm/src")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!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)
|
||||
!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))
|
||||
!5 = !DIFile(filename: "/usr/local/google/home/majnemer/Downloads/t.ii", directory: "/usr/local/google/home/majnemer/llvm/src")
|
||||
!6 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!7 = !DIDerivedType(tag: DW_TAG_member, name: "id", scope: !8, file: !5, line: 2, baseType: !6, flags: DIFlagStaticMember)
|
||||
|
@ -25,9 +25,9 @@ target triple = "x86_64-pc-windows-msvc19.0.0"
|
||||
!1 = !DIFile(filename: "t.c", directory: "foo")
|
||||
!2 = !{}
|
||||
!3 = !{!4, !6}
|
||||
!4 = distinct !DIGlobalVariable(name: "_OptionsStorage", scope: !0, file: !1, line: 3, type: !5, isLocal: true, isDefinition: true)
|
||||
!4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "_OptionsStorage", scope: !0, file: !1, line: 3, type: !5, isLocal: true, isDefinition: true))
|
||||
!5 = !DIBasicType(name: "unsigned int", size: 32, align: 32, encoding: DW_ATE_unsigned)
|
||||
!6 = distinct !DIGlobalVariable(name: "x", scope: !0, file: !1, line: 4, type: !5, isLocal: true, isDefinition: true)
|
||||
!6 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", scope: !0, file: !1, line: 4, type: !5, isLocal: true, isDefinition: true))
|
||||
|
||||
!35 = !{i32 2, !"CodeView", i32 1}
|
||||
!36 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
|
@ -129,18 +129,18 @@ $"\01?comdat@?$A@X@@2HB" = comdat any
|
||||
!1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
|
||||
!2 = !{}
|
||||
!3 = !{!4, !6, !13, !15}
|
||||
!4 = distinct !DIGlobalVariable(name: "first", linkageName: "\01?first@@3HA", scope: !0, file: !1, line: 1, type: !5, isLocal: true, isDefinition: true)
|
||||
!4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "first", linkageName: "\01?first@@3HA", scope: !0, file: !1, line: 1, type: !5, isLocal: true, isDefinition: true))
|
||||
!5 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!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)
|
||||
!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))
|
||||
!7 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !5)
|
||||
!8 = !DIDerivedType(tag: DW_TAG_member, name: "comdat", scope: !9, file: !1, line: 2, baseType: !7, flags: DIFlagStaticMember, extraData: i32 3)
|
||||
!9 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "A<void>", file: !1, line: 2, size: 8, align: 8, elements: !10, templateParams: !11)
|
||||
!10 = !{!8}
|
||||
!11 = !{!12}
|
||||
!12 = !DITemplateTypeParameter(name: "T", type: null)
|
||||
!13 = distinct !DIGlobalVariable(name: "middle", linkageName: "\01?middle@@3PEBHEB", scope: !0, file: !1, line: 3, type: !14, isLocal: false, isDefinition: true)
|
||||
!13 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "middle", linkageName: "\01?middle@@3PEBHEB", scope: !0, file: !1, line: 3, type: !14, isLocal: false, isDefinition: true))
|
||||
!14 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !7, size: 64, align: 64)
|
||||
!15 = distinct !DIGlobalVariable(name: "last", linkageName: "\01?last@@3HA", scope: !0, file: !1, line: 4, type: !5, isLocal: false, isDefinition: true)
|
||||
!15 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "last", linkageName: "\01?last@@3HA", scope: !0, file: !1, line: 4, type: !5, isLocal: false, isDefinition: true))
|
||||
!16 = !{i32 2, !"CodeView", i32 1}
|
||||
!17 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!18 = !{i32 1, !"PIC Level", i32 2}
|
||||
|
@ -93,7 +93,7 @@ attributes #0 = { "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-
|
||||
!llvm.module.flags = !{!31, !32, !33}
|
||||
!llvm.ident = !{!34}
|
||||
|
||||
!0 = distinct !DIGlobalVariable(name: "d", linkageName: "\01?d@@3UD@@A", scope: !1, file: !5, line: 8, type: !6, isLocal: false, isDefinition: true)
|
||||
!0 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "d", linkageName: "\01?d@@3UD@@A", scope: !1, file: !5, line: 8, type: !6, isLocal: false, isDefinition: true))
|
||||
!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)
|
||||
!2 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
|
||||
!3 = !{}
|
||||
|
@ -84,7 +84,7 @@ attributes #0 = { norecurse nounwind uwtable "disable-tail-calls"="false" "less-
|
||||
!6 = !{null}
|
||||
!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)
|
||||
!8 = !{!9}
|
||||
!9 = !DIGlobalVariable(name: "x", scope: !0, file: !1, line: 1, type: !10, isLocal: false, isDefinition: true)
|
||||
!9 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", scope: !0, file: !1, line: 1, type: !10, isLocal: false, isDefinition: true))
|
||||
!10 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !11)
|
||||
!11 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!12 = !{i32 2, !"CodeView", i32 1}
|
||||
|
@ -140,7 +140,7 @@ attributes #0 = { norecurse nounwind uwtable "disable-tail-calls"="false" "less-
|
||||
!1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DIGlobalVariable(name: "x", linkageName: "\01?x@@3HC", scope: !0, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true)
|
||||
!4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", linkageName: "\01?x@@3HC", scope: !0, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true))
|
||||
!5 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !6)
|
||||
!6 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!7 = !{i32 2, !"CodeView", i32 1}
|
||||
|
@ -71,7 +71,7 @@ attributes #0 = { norecurse nounwind uwtable "disable-tail-calls"="false" "less-
|
||||
!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)
|
||||
!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)
|
||||
!13 = !{!14}
|
||||
!14 = !DIGlobalVariable(name: "x", linkageName: "\01?x@@3HC", scope: !0, file: !1, line: 1, type: !15, isLocal: false, isDefinition: true)
|
||||
!14 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", linkageName: "\01?x@@3HC", scope: !0, file: !1, line: 1, type: !15, isLocal: false, isDefinition: true))
|
||||
!15 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !7)
|
||||
!16 = !{i32 2, !"CodeView", i32 1}
|
||||
!17 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
|
@ -32,12 +32,12 @@ target triple = "x86_64-pc-windows-msvc19.0.24210"
|
||||
!llvm.module.flags = !{!11, !12, !13}
|
||||
!llvm.ident = !{!14}
|
||||
|
||||
!0 = distinct !DIGlobalVariable(name: "x", scope: !1, file: !6, line: 4, type: !9, isLocal: false, isDefinition: true)
|
||||
!0 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", scope: !1, file: !6, line: 4, type: !9, isLocal: false, isDefinition: true))
|
||||
!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)
|
||||
!2 = !DIFile(filename: "-", directory: "C:\5Csrc\5Cllvm\5Cbuild")
|
||||
!3 = !{}
|
||||
!4 = !{!0, !5}
|
||||
!5 = distinct !DIGlobalVariable(name: "y", scope: !1, file: !6, line: 5, type: !7, isLocal: false, isDefinition: true)
|
||||
!5 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "y", scope: !1, file: !6, line: 5, type: !7, isLocal: false, isDefinition: true))
|
||||
!6 = !DIFile(filename: "<stdin>", directory: "C:\5Csrc\5Cllvm\5Cbuild")
|
||||
!7 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint8_t", file: !6, line: 3, baseType: !8)
|
||||
|
||||
|
@ -28,7 +28,7 @@ target triple = "x86_64-pc-windows-msvc"
|
||||
!llvm.module.flags = !{!7, !8}
|
||||
!llvm.ident = !{!9}
|
||||
|
||||
!0 = distinct !DIGlobalVariable(name: "f", linkageName: "\01?f@@3UFoo@@A", scope: !1, file: !5, line: 1, type: !6, isLocal: false, isDefinition: true)
|
||||
!0 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "f", linkageName: "\01?f@@3UFoo@@A", scope: !1, file: !5, line: 1, type: !6, isLocal: false, isDefinition: true))
|
||||
!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)
|
||||
!2 = !DIFile(filename: "<stdin>", directory: "C:\5Csrc\5Cllvm\5Cbuild")
|
||||
!3 = !{}
|
||||
|
@ -261,7 +261,7 @@ attributes #3 = { nounwind }
|
||||
!20 = !DILocalVariable(name: "a", arg: 1, scope: !16, file: !1, line: 4, type: !7)
|
||||
!21 = !DILocalVariable(name: "b", scope: !16, file: !1, line: 5, type: !7)
|
||||
!22 = !{!23}
|
||||
!23 = !DIGlobalVariable(name: "x", scope: !0, file: !1, line: 1, type: !24, isLocal: false, isDefinition: true)
|
||||
!23 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", scope: !0, file: !1, line: 1, type: !24, isLocal: false, isDefinition: true))
|
||||
!24 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !7)
|
||||
!25 = !{i32 2, !"CodeView", i32 1}
|
||||
!26 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
|
@ -113,7 +113,7 @@ attributes #1 = { nounwind readnone }
|
||||
!1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!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)
|
||||
!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))
|
||||
!5 = !DINamespace(name: "bar", scope: !6, file: !1, line: 2)
|
||||
!6 = !DINamespace(name: "foo", scope: null, file: !1, line: 1)
|
||||
!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@@")
|
||||
|
@ -172,14 +172,14 @@ attributes #2 = { nounwind }
|
||||
!1 = !DIFile(filename: "t.cpp", directory: "/")
|
||||
!2 = !{}
|
||||
!3 = !{!4, !11, !20, !21}
|
||||
!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)
|
||||
!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))
|
||||
!5 = !DICompositeType(tag: DW_TAG_array_type, baseType: !6, size: 560, align: 8, elements: !7)
|
||||
!6 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
|
||||
!7 = !{!8, !9, !10}
|
||||
!8 = !DISubrange(count: 2)
|
||||
!9 = !DISubrange(count: 5)
|
||||
!10 = !DISubrange(count: 7)
|
||||
!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)
|
||||
!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))
|
||||
!12 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !13, size: 32, align: 32)
|
||||
!13 = !DICompositeType(tag: DW_TAG_array_type, baseType: !14, elements: !18)
|
||||
!14 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "incomplete_struct", file: !1, line: 4, size: 32, align: 32, elements: !15, identifier: ".?AUincomplete_struct@@")
|
||||
@ -188,8 +188,8 @@ attributes #2 = { nounwind }
|
||||
!17 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!18 = !{!19}
|
||||
!19 = !DISubrange(count: 3)
|
||||
!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)
|
||||
!21 = distinct !DIGlobalVariable(name: "typedef_arr", linkageName: "\01?typedef_arr@@3SDHD", scope: !0, file: !1, line: 14, type: !22, isLocal: false, isDefinition: true)
|
||||
!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))
|
||||
!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))
|
||||
!22 = !DICompositeType(tag: DW_TAG_array_type, baseType: !23, size: 128, align: 32, elements: !26)
|
||||
!23 = !DIDerivedType(tag: DW_TAG_typedef, name: "T_INT", file: !1, line: 13, baseType: !24)
|
||||
!24 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !25)
|
||||
|
@ -89,7 +89,7 @@ target triple = "i686-pc-windows-msvc19.0.23918"
|
||||
!1 = !DIFile(filename: "hello.cpp", directory: "D:\5Csrc\5Chello")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DIGlobalVariable(name: "a", linkageName: "\01?a@@3UA@@A", scope: !0, file: !1, line: 3, type: !5, isLocal: false, isDefinition: true)
|
||||
!4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", linkageName: "\01?a@@3UA@@A", scope: !0, file: !1, line: 3, type: !5, isLocal: false, isDefinition: true))
|
||||
!5 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "A", file: !1, line: 1, size: 8, align: 8, elements: !6, identifier: ".?AUA@@")
|
||||
!6 = !{!7}
|
||||
!7 = !DICompositeType(tag: DW_TAG_structure_type, name: "Nested", scope: !5, file: !1, line: 2, size: 8, align: 8, flags: DIFlagFwdDecl, identifier: ".?AUNested@A@@")
|
||||
|
@ -203,13 +203,13 @@ target triple = "x86_64-pc-windows-msvc19.0.23918"
|
||||
!1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
|
||||
!2 = !{}
|
||||
!3 = !{!4, !10, !20, !23, !26, !31, !36, !41, !46, !50}
|
||||
!4 = distinct !DIGlobalVariable(name: "pmd_a", linkageName: "\01?pmd_a@@3PEQA@@HEQ1@", scope: !0, file: !1, line: 6, type: !5, isLocal: false, isDefinition: true)
|
||||
!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))
|
||||
!5 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !6, size: 32, flags: DIFlagSingleInheritance, extraData: !7)
|
||||
!6 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!7 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "A", file: !1, line: 1, size: 32, align: 32, elements: !8, identifier: ".?AUA@@")
|
||||
!8 = !{!9}
|
||||
!9 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !7, file: !1, line: 1, baseType: !6, size: 32, align: 32)
|
||||
!10 = distinct !DIGlobalVariable(name: "pmd_b", linkageName: "\01?pmd_b@@3PEQC@@HEQ1@", scope: !0, file: !1, line: 7, type: !11, isLocal: false, isDefinition: true)
|
||||
!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))
|
||||
!11 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !6, size: 32, flags: DIFlagMultipleInheritance, extraData: !12)
|
||||
!12 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "C", file: !1, line: 3, size: 96, align: 32, elements: !13, identifier: ".?AUC@@")
|
||||
!13 = !{!14, !15, !19}
|
||||
@ -219,37 +219,37 @@ target triple = "x86_64-pc-windows-msvc19.0.23918"
|
||||
!17 = !{!18}
|
||||
!18 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !16, file: !1, line: 2, baseType: !6, size: 32, align: 32)
|
||||
!19 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !12, file: !1, line: 3, baseType: !6, size: 32, align: 32, offset: 64)
|
||||
!20 = distinct !DIGlobalVariable(name: "pmd_c", linkageName: "\01?pmd_c@@3PEQD@@HEQ1@", scope: !0, file: !1, line: 8, type: !21, isLocal: false, isDefinition: true)
|
||||
!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))
|
||||
!21 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !6, size: 64, flags: DIFlagVirtualInheritance, extraData: !22)
|
||||
!22 = !DICompositeType(tag: DW_TAG_structure_type, name: "D", file: !1, line: 4, size: 256, align: 64, flags: DIFlagFwdDecl, identifier: ".?AUD@@")
|
||||
!23 = distinct !DIGlobalVariable(name: "pmd_d", linkageName: "\01?pmd_d@@3PEQE@@HEQ1@", scope: !0, file: !1, line: 9, type: !24, isLocal: false, isDefinition: true)
|
||||
!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))
|
||||
!24 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !6, size: 96, extraData: !25)
|
||||
!25 = !DICompositeType(tag: DW_TAG_structure_type, name: "E", file: !1, line: 5, flags: DIFlagFwdDecl, identifier: ".?AUE@@")
|
||||
!26 = distinct !DIGlobalVariable(name: "pmf_a", linkageName: "\01?pmf_a@@3P8A@@EAAXXZEQ1@", scope: !0, file: !1, line: 10, type: !27, isLocal: false, isDefinition: true)
|
||||
!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))
|
||||
!27 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !28, size: 64, flags: DIFlagSingleInheritance, extraData: !7)
|
||||
!28 = !DISubroutineType(types: !29)
|
||||
!29 = !{null, !30}
|
||||
!30 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !7, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
|
||||
!31 = distinct !DIGlobalVariable(name: "pmf_b", linkageName: "\01?pmf_b@@3P8C@@EAAXXZEQ1@", scope: !0, file: !1, line: 11, type: !32, isLocal: false, isDefinition: true)
|
||||
!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))
|
||||
!32 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !33, size: 128, flags: DIFlagMultipleInheritance, extraData: !12)
|
||||
!33 = !DISubroutineType(types: !34)
|
||||
!34 = !{null, !35}
|
||||
!35 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !12, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
|
||||
!36 = distinct !DIGlobalVariable(name: "pmf_c", linkageName: "\01?pmf_c@@3P8D@@EAAXXZEQ1@", scope: !0, file: !1, line: 12, type: !37, isLocal: false, isDefinition: true)
|
||||
!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))
|
||||
!37 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !38, size: 128, flags: DIFlagVirtualInheritance, extraData: !22)
|
||||
!38 = !DISubroutineType(types: !39)
|
||||
!39 = !{null, !40}
|
||||
!40 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !22, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
|
||||
!41 = distinct !DIGlobalVariable(name: "pmf_d", linkageName: "\01?pmf_d@@3P8E@@EAAXXZEQ1@", scope: !0, file: !1, line: 13, type: !42, isLocal: false, isDefinition: true)
|
||||
!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))
|
||||
!42 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !43, size: 192, extraData: !25)
|
||||
!43 = !DISubroutineType(types: !44)
|
||||
!44 = !{null, !45}
|
||||
!45 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !25, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
|
||||
!46 = distinct !DIGlobalVariable(name: "ppmd", linkageName: "\01?ppmd@@3PEAPEQIncomplete@@HEA", scope: !0, file: !1, line: 15, type: !47, isLocal: false, isDefinition: true)
|
||||
!46 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ppmd", linkageName: "\01?ppmd@@3PEAPEQIncomplete@@HEA", scope: !0, file: !1, line: 15, type: !47, isLocal: false, isDefinition: true))
|
||||
!47 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !48, size: 64, align: 64)
|
||||
!48 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !6, extraData: !49)
|
||||
!49 = !DICompositeType(tag: DW_TAG_structure_type, name: "Incomplete", file: !1, line: 14, flags: DIFlagFwdDecl, identifier: ".?AUIncomplete@@")
|
||||
!50 = distinct !DIGlobalVariable(name: "ppmf", linkageName: "\01?ppmf@@3PEAP8Incomplete@@EAAXXZEA", scope: !0, file: !1, line: 16, type: !51, isLocal: false, isDefinition: true)
|
||||
!50 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ppmf", linkageName: "\01?ppmf@@3PEAP8Incomplete@@EAAXXZEA", scope: !0, file: !1, line: 16, type: !51, isLocal: false, isDefinition: true))
|
||||
!51 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !52, size: 64, align: 64)
|
||||
!52 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !53, extraData: !49)
|
||||
!53 = !DISubroutineType(types: !54)
|
||||
|
@ -97,7 +97,7 @@ attributes #1 = { nounwind readnone }
|
||||
!1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DIGlobalVariable(name: "u", linkageName: "\01?u@@3UU@@A", scope: !0, file: !1, line: 13, type: !5, isLocal: false, isDefinition: true)
|
||||
!4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "u", linkageName: "\01?u@@3UU@@A", scope: !0, file: !1, line: 13, type: !5, isLocal: false, isDefinition: true))
|
||||
!5 = !DIDerivedType(tag: DW_TAG_typedef, name: "U", file: !1, line: 12, baseType: !6)
|
||||
!6 = distinct !DICompositeType(tag: DW_TAG_structure_type, file: !1, line: 12, size: 32, align: 32, elements: !7, identifier: ".?AUU@@")
|
||||
!7 = !{!8}
|
||||
|
@ -237,7 +237,7 @@ attributes #6 = { nounwind }
|
||||
!1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DIGlobalVariable(name: "p", linkageName: "\01?p@@3PEAUC@@EA", scope: !0, file: !1, line: 13, type: !5, isLocal: false, isDefinition: true)
|
||||
!4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "p", linkageName: "\01?p@@3PEAUC@@EA", scope: !0, file: !1, line: 13, type: !5, isLocal: false, isDefinition: true))
|
||||
!5 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !6, size: 64, align: 64)
|
||||
!6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "C", file: !1, line: 9, size: 64, align: 64, elements: !7, vtableHolder: !12, identifier: ".?AUC@@")
|
||||
!7 = !{!8, !30, !34}
|
||||
|
@ -100,13 +100,13 @@ attributes #3 = { nounwind readnone }
|
||||
!1 = !DIFile(filename: "<stdin>", directory: "C:\5Csrc\5Cllvm\5Cbuild")
|
||||
!2 = !{}
|
||||
!3 = !{!4, !10}
|
||||
!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)
|
||||
!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))
|
||||
!5 = !DIFile(filename: "t.cpp", directory: "C:\5Csrc\5Cllvm\5Cbuild")
|
||||
!6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "GetFwdDecl", file: !5, line: 2, size: 8, align: 8, elements: !7, identifier: ".?AUGetFwdDecl@@")
|
||||
!7 = !{!8}
|
||||
!8 = !DIDerivedType(tag: DW_TAG_member, name: "format", scope: !6, file: !5, line: 3, baseType: !9, flags: DIFlagStaticMember)
|
||||
!9 = !DICompositeType(tag: DW_TAG_structure_type, name: "UnicodeString", file: !5, line: 1, flags: DIFlagFwdDecl, identifier: ".?AUUnicodeString@@")
|
||||
!10 = distinct !DIGlobalVariable(name: "require_complete", linkageName: "\01?require_complete@@3UUseCompleteType@@A", scope: !0, file: !5, line: 15, type: !11, isLocal: false, isDefinition: true)
|
||||
!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))
|
||||
!11 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "UseCompleteType", file: !5, line: 10, size: 64, align: 64, elements: !12, identifier: ".?AUUseCompleteType@@")
|
||||
!12 = !{!13, !17, !21}
|
||||
!13 = !DIDerivedType(tag: DW_TAG_member, name: "currencySpcAfterSym", scope: !11, file: !5, line: 13, baseType: !14, size: 64, align: 64)
|
||||
|
@ -18,7 +18,7 @@ entry:
|
||||
!8 = !{!9}
|
||||
!9 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!12 = !{!14}
|
||||
!14 = !DIGlobalVariable(name: "bar", line: 2, isLocal: true, isDefinition: true, scope: !5, file: !6, type: !9)
|
||||
!14 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "bar", line: 2, isLocal: true, isDefinition: true, scope: !5, file: !6, type: !9))
|
||||
!15 = !DILocation(line: 3, column: 3, scope: !16)
|
||||
!16 = distinct !DILexicalBlock(line: 1, column: 11, file: !17, scope: !5)
|
||||
!17 = !DIFile(filename: "fb.c", directory: "/private/tmp")
|
||||
|
@ -7,7 +7,7 @@
|
||||
!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)
|
||||
!2 = !{}
|
||||
!3 = !{!5}
|
||||
!5 = !DIGlobalVariable(name: "a", line: 2, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7)
|
||||
!5 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", line: 2, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7))
|
||||
!6 = !DIFile(filename: "g.c", directory: "/private/tmp")
|
||||
!7 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!8 = !DIFile(filename: "g.c", directory: "/private/tmp")
|
||||
|
@ -45,7 +45,7 @@ entry:
|
||||
!13 = !{!14, !15}
|
||||
!14 = !DIDerivedType(tag: DW_TAG_member, name: "a", line: 10, size: 32, align: 32, file: !27, scope: !12, baseType: !5)
|
||||
!15 = !DIDerivedType(tag: DW_TAG_member, name: "b", line: 10, size: 32, align: 32, offset: 32, file: !27, scope: !12, baseType: !5)
|
||||
!16 = !DIGlobalVariable(name: "i", line: 5, isLocal: false, isDefinition: true, scope: !1, file: !1, type: !5)
|
||||
!16 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "i", line: 5, isLocal: false, isDefinition: true, scope: !1, file: !1, type: !5))
|
||||
!17 = !DILocation(line: 15, scope: !18)
|
||||
!18 = distinct !DILexicalBlock(line: 14, column: 0, file: !1, scope: !6)
|
||||
!19 = !DILocation(line: 9, scope: !0, inlinedAt: !17)
|
||||
|
@ -73,19 +73,19 @@
|
||||
!1 = !DIFile(filename: "hash-collisions.c", directory: "/tmp")
|
||||
!2 = !{}
|
||||
!3 = !{!4, !6, !7, !8, !9, !10, !11, !12, !13, !14, !15, !16}
|
||||
!4 = !DIGlobalVariable(name: "ForceTopDown", scope: !0, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true)
|
||||
!4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "ForceTopDown", scope: !0, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true))
|
||||
!5 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!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)
|
||||
!7 = !DIGlobalVariable(name: "_ZN5clang23DataRecursiveASTVisitorIN12_GLOBAL__N_124UnusedBackingIvarCheckerEE26TraverseCUDAKernelCallExprEPNS_18CUDAKernelCallExprE", scope: !0, file: !1, line: 3, type: !5, isLocal: false, isDefinition: true)
|
||||
!8 = !DIGlobalVariable(name: "_ZN4llvm16DenseMapIteratorIPNS_10MDLocationENS_6detail13DenseSetEmptyENS_10MDNodeInfoIS1_EENS3_12DenseSetPairIS2_EELb0EE23AdvancePastEmptyBucketsEv", scope: !0, file: !1, line: 4, type: !5, isLocal: false, isDefinition: true)
|
||||
!9 = !DIGlobalVariable(name: "_ZNK4llvm12LivePhysRegs5printERNS_11raw_ostreamE", scope: !0, file: !1, line: 5, type: !5, isLocal: false, isDefinition: true)
|
||||
!10 = !DIGlobalVariable(name: "_ZN4llvm15ScalarEvolution14getSignedRangeEPKNS_4SCEVE", scope: !0, file: !1, line: 6, type: !5, isLocal: false, isDefinition: true)
|
||||
!11 = !DIGlobalVariable(name: "k1", scope: !0, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true)
|
||||
!12 = !DIGlobalVariable(name: "is", scope: !0, file: !1, line: 8, type: !5, isLocal: false, isDefinition: true)
|
||||
!13 = !DIGlobalVariable(name: "setStmt", scope: !0, file: !1, line: 9, type: !5, isLocal: false, isDefinition: true)
|
||||
!14 = !DIGlobalVariable(name: "_ZN4llvm5TwineC1Ei", scope: !0, file: !1, line: 10, type: !5, isLocal: false, isDefinition: true)
|
||||
!15 = !DIGlobalVariable(name: "_ZNK5clang12OverrideAttr5cloneERNS_10ASTContextE", scope: !0, file: !1, line: 11, type: !5, isLocal: false, isDefinition: true)
|
||||
!16 = !DIGlobalVariable(name: "_ZN4llvm22MachineModuleInfoMachOD2Ev", scope: !0, file: !1, line: 12, type: !5, isLocal: false, isDefinition: true)
|
||||
!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))
|
||||
!7 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "_ZN5clang23DataRecursiveASTVisitorIN12_GLOBAL__N_124UnusedBackingIvarCheckerEE26TraverseCUDAKernelCallExprEPNS_18CUDAKernelCallExprE", scope: !0, file: !1, line: 3, type: !5, isLocal: false, isDefinition: true))
|
||||
!8 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "_ZN4llvm16DenseMapIteratorIPNS_10MDLocationENS_6detail13DenseSetEmptyENS_10MDNodeInfoIS1_EENS3_12DenseSetPairIS2_EELb0EE23AdvancePastEmptyBucketsEv", scope: !0, file: !1, line: 4, type: !5, isLocal: false, isDefinition: true))
|
||||
!9 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "_ZNK4llvm12LivePhysRegs5printERNS_11raw_ostreamE", scope: !0, file: !1, line: 5, type: !5, isLocal: false, isDefinition: true))
|
||||
!10 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "_ZN4llvm15ScalarEvolution14getSignedRangeEPKNS_4SCEVE", scope: !0, file: !1, line: 6, type: !5, isLocal: false, isDefinition: true))
|
||||
!11 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "k1", scope: !0, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true))
|
||||
!12 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "is", scope: !0, file: !1, line: 8, type: !5, isLocal: false, isDefinition: true))
|
||||
!13 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "setStmt", scope: !0, file: !1, line: 9, type: !5, isLocal: false, isDefinition: true))
|
||||
!14 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "_ZN4llvm5TwineC1Ei", scope: !0, file: !1, line: 10, type: !5, isLocal: false, isDefinition: true))
|
||||
!15 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "_ZNK5clang12OverrideAttr5cloneERNS_10ASTContextE", scope: !0, file: !1, line: 11, type: !5, isLocal: false, isDefinition: true))
|
||||
!16 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "_ZN4llvm22MachineModuleInfoMachOD2Ev", scope: !0, file: !1, line: 12, type: !5, isLocal: false, isDefinition: true))
|
||||
!17 = !{i32 2, !"Dwarf Version", i32 2}
|
||||
!18 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!19 = !{i32 1, !"PIC Level", i32 2}
|
||||
|
@ -69,14 +69,14 @@ attributes #1 = { nounwind readnone }
|
||||
!7 = !{!8, !8}
|
||||
!8 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!9 = !{!10}
|
||||
!10 = !DIGlobalVariable(name: "x", line: 4, isLocal: false, isDefinition: true, scope: null, file: !5, type: !11)
|
||||
!10 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", line: 4, isLocal: false, isDefinition: true, scope: null, file: !5, type: !11))
|
||||
!11 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !6)
|
||||
!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)
|
||||
!13 = !DIFile(filename: "b.cpp", directory: "/tmp/dbginfo")
|
||||
!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)
|
||||
!16 = !DIFile(filename: "b.cpp", directory: "/tmp/dbginfo")
|
||||
!17 = !{!18}
|
||||
!18 = !DIGlobalVariable(name: "y", line: 4, isLocal: false, isDefinition: true, scope: null, file: !16, type: !11)
|
||||
!18 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "y", line: 4, isLocal: false, isDefinition: true, scope: null, file: !16, type: !11))
|
||||
!19 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!20 = !{i32 1, !"Debug Info Version", i32 3}
|
||||
!21 = !{!"clang version 3.5.0 "}
|
||||
|
@ -58,12 +58,12 @@ attributes #1 = { nounwind readnone }
|
||||
!8 = !{!9, !9}
|
||||
!9 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!10 = !{!11}
|
||||
!11 = !DIGlobalVariable(name: "x", line: 4, isLocal: false, isDefinition: true, scope: null, file: !6, type: !12)
|
||||
!11 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", line: 4, isLocal: false, isDefinition: true, scope: null, file: !6, type: !12))
|
||||
!12 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !7)
|
||||
!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)
|
||||
!14 = !DIFile(filename: "b.cpp", directory: "/tmp/dbginfo")
|
||||
!15 = !{!16}
|
||||
!16 = !DIGlobalVariable(name: "y", line: 4, isLocal: false, isDefinition: true, scope: null, file: !6, type: !12)
|
||||
!16 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "y", line: 4, isLocal: false, isDefinition: true, scope: null, file: !6, type: !12))
|
||||
!17 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!18 = !{i32 1, !"Debug Info Version", i32 3}
|
||||
!19 = !{!"clang version 3.5.0 "}
|
||||
|
@ -11,7 +11,7 @@
|
||||
!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)
|
||||
!2 = !{}
|
||||
!3 = !{!5}
|
||||
!5 = !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7)
|
||||
!5 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7))
|
||||
!6 = !DIFile(filename: "x.c", directory: "/private/tmp")
|
||||
!7 = !DICompositeType(tag: DW_TAG_array_type, size: 320, align: 32, baseType: !8, elements: !9)
|
||||
!8 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -31,7 +31,7 @@
|
||||
!1 = !DIFile(filename: "minimal.c", directory: "/tmp")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = !DIGlobalVariable(name: "y", scope: !0, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true)
|
||||
!4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "y", scope: !0, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true))
|
||||
!5 = !DICompositeType(tag: DW_TAG_structure_type, name: "Y", file: !1, line: 3, size: 64, align: 64, elements: !6)
|
||||
!6 = !{!7}
|
||||
!7 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !5, file: !1, line: 4, baseType: !8, size: 64, align: 64)
|
||||
|
@ -114,9 +114,9 @@ attributes #1 = { nounwind readnone }
|
||||
!22 = !DISubroutineType(types: !23)
|
||||
!23 = !{null}
|
||||
!24 = !{!25, !26, !27}
|
||||
!25 = !DIGlobalVariable(name: "static_member_variable", linkageName: "_ZN1C22static_member_variableE", line: 7, isLocal: false, isDefinition: true, scope: !8, file: !4, type: !11, declaration: !10)
|
||||
!26 = !DIGlobalVariable(name: "global_variable", line: 17, isLocal: false, isDefinition: true, scope: null, file: !4, type: !8)
|
||||
!27 = !DIGlobalVariable(name: "global_namespace_variable", linkageName: "_ZN2ns25global_namespace_variableE", line: 27, isLocal: false, isDefinition: true, scope: !21, file: !4, type: !11)
|
||||
!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))
|
||||
!26 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "global_variable", line: 17, isLocal: false, isDefinition: true, scope: null, file: !4, type: !8))
|
||||
!27 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "global_namespace_variable", linkageName: "_ZN2ns25global_namespace_variableE", line: 27, isLocal: false, isDefinition: true, scope: !21, file: !4, type: !11))
|
||||
!28 = !DILocalVariable(name: "this", line: 9, arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !3, file: !4, type: !29)
|
||||
!29 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !8)
|
||||
!30 = !DILocation(line: 9, scope: !3)
|
||||
|
@ -70,7 +70,7 @@ attributes #1 = { nounwind readnone }
|
||||
!15 = !DISubroutineType(types: !16)
|
||||
!16 = !{null}
|
||||
!17 = !{!18}
|
||||
!18 = !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !14, type: !3)
|
||||
!18 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !14, type: !3))
|
||||
!19 = !{i32 2, !"Dwarf Version", i32 3}
|
||||
!20 = !DILocalVariable(name: "b", line: 4, scope: !13, file: !14, type: !21)
|
||||
!21 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -35,7 +35,7 @@ attributes #0 = { nounwind readnone uwtable "less-precise-fpmad"="false" "no-fra
|
||||
!7 = !{!8}
|
||||
!8 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!9 = !{!10}
|
||||
!10 = !DIGlobalVariable(name: "i", linkageName: "_ZL1i", line: 1, isLocal: true, isDefinition: true, scope: null, file: !5, type: !8)
|
||||
!10 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "i", linkageName: "_ZL1i", line: 1, isLocal: true, isDefinition: true, scope: null, file: !5, type: !8))
|
||||
!11 = !{i32 2, !"Dwarf Version", i32 3}
|
||||
!12 = !DILocation(line: 4, scope: !4)
|
||||
!13 = !{i32 1, !"Debug Info Version", i32 3}
|
||||
|
@ -81,8 +81,8 @@ attributes #3 = { nounwind }
|
||||
!13 = !DISubroutineType(types: !14)
|
||||
!14 = !{null}
|
||||
!15 = !{!16, !17}
|
||||
!16 = !DIGlobalVariable(name: "a", scope: !0, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true)
|
||||
!17 = !DIGlobalVariable(name: "b", scope: !0, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true)
|
||||
!16 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "a", scope: !0, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true))
|
||||
!17 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "b", scope: !0, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true))
|
||||
!18 = !{i32 2, !"Dwarf Version", i32 2}
|
||||
!19 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!20 = !{!"clang version 3.8.0 (trunk 245562) (llvm/trunk 245569)"}
|
||||
|
@ -26,12 +26,12 @@
|
||||
!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)
|
||||
!1 = !{}
|
||||
!3 = !{!5, !10}
|
||||
!5 = !DIGlobalVariable(name: "x", line: 4, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7)
|
||||
!5 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", line: 4, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7))
|
||||
!6 = !DIFile(filename: "simple.cpp", directory: "/home/blaikie/Development/scratch")
|
||||
!7 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !8, extraData: !9)
|
||||
!8 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!9 = !DICompositeType(tag: DW_TAG_structure_type, name: "S", line: 1, size: 8, align: 8, file: !15, elements: !1)
|
||||
!10 = !DIGlobalVariable(name: "y", line: 5, isLocal: false, isDefinition: true, scope: null, file: !6, type: !11)
|
||||
!10 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "y", line: 5, isLocal: false, isDefinition: true, scope: null, file: !6, type: !11))
|
||||
!11 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !12, extraData: !9)
|
||||
!12 = !DISubroutineType(types: !13)
|
||||
!13 = !{null, !14, !8}
|
||||
|
@ -200,8 +200,8 @@
|
||||
; }
|
||||
; void B::func_fwd() {}
|
||||
|
||||
@_ZN1A1B1iE = global i32 0, align 4, !dbg !31
|
||||
@_ZN1A1B7var_fwdE = global i32 0, align 4, !dbg !32
|
||||
@_ZN1A1B1iE = global i32 0, align 4, !dbg !131
|
||||
@_ZN1A1B7var_fwdE = global i32 0, align 4, !dbg !132
|
||||
@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 }]
|
||||
|
||||
; Function Attrs: nounwind ssp uwtable
|
||||
@ -316,7 +316,7 @@ attributes #1 = { nounwind readnone }
|
||||
!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)
|
||||
!28 = !DIFile(filename: "debug-info-namespace.cpp", directory: "/tmp")
|
||||
!29 = !DISubroutineType(types: !2)
|
||||
!30 = !{!31, !32}
|
||||
!30 = !{!131, !132}
|
||||
!31 = !DIGlobalVariable(name: "i", linkageName: "_ZN1A1B1iE", line: 20, isLocal: false, isDefinition: true, scope: !6, file: !18, type: !13)
|
||||
!32 = !DIGlobalVariable(name: "var_fwd", linkageName: "_ZN1A1B7var_fwdE", line: 44, isLocal: false, isDefinition: true, scope: !6, file: !18, type: !13)
|
||||
!33 = !{!34, !35, !36, !37, !40, !41, !42, !43, !44, !45, !47, !48, !49, !51, !54, !55, !56}
|
||||
@ -362,3 +362,5 @@ attributes #1 = { nounwind readnone }
|
||||
!73 = !DILocation(line: 47, column: 21, scope: !26)
|
||||
!74 = !DILocation(line: 0, scope: !75)
|
||||
!75 = !DILexicalBlockFile(discriminator: 0, file: !5, scope: !27)
|
||||
!131 = !DIGlobalVariableExpression(var: !31)
|
||||
!132 = !DIGlobalVariableExpression(var: !32)
|
||||
|
@ -225,7 +225,7 @@ attributes #3 = { nounwind }
|
||||
!24 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !22, type: !25)
|
||||
!25 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !4)
|
||||
!26 = !{!27}
|
||||
!27 = !DIGlobalVariable(name: "x", line: 13, isLocal: false, isDefinition: true, scope: null, file: !15, type: !25)
|
||||
!27 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", line: 13, isLocal: false, isDefinition: true, scope: null, file: !15, type: !25))
|
||||
!28 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!29 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!30 = !{!"clang version 3.6.0 "}
|
||||
|
@ -29,7 +29,7 @@
|
||||
!1 = !DIFile(filename: "debug-info-template-recursive.cpp", directory: "/usr/local/google/home/echristo/tmp")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = !DIGlobalVariable(name: "filters", line: 10, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6)
|
||||
!4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "filters", line: 10, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6))
|
||||
!5 = !DIFile(filename: "debug-info-template-recursive.cpp", directory: "/usr/local/google/home/echristo/tmp")
|
||||
!6 = !DICompositeType(tag: DW_TAG_class_type, name: "bar", line: 9, size: 8, align: 8, file: !1, elements: !7)
|
||||
!7 = !{!8, !31}
|
||||
|
@ -22,7 +22,7 @@
|
||||
!3 = !{!4}
|
||||
!4 = !DICompositeType(tag: DW_TAG_structure_type, name: "Foo", line: 1, flags: DIFlagFwdDecl, file: !1, identifier: "_ZTS3Foo")
|
||||
!5 = !{!6}
|
||||
!6 = !DIGlobalVariable(name: "x", line: 4, isLocal: false, isDefinition: true, scope: null, file: !7, type: !8)
|
||||
!6 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", line: 4, isLocal: false, isDefinition: true, scope: null, file: !7, type: !8))
|
||||
!7 = !DIFile(filename: "foo.cpp", directory: ".")
|
||||
!8 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !9, extraData: !4)
|
||||
!9 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
|
@ -22,7 +22,7 @@
|
||||
!1 = !DIFile(filename: "typedef.cpp", directory: "/tmp/dbginfo")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = !DIGlobalVariable(name: "y", line: 2, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6)
|
||||
!4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "y", line: 2, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6))
|
||||
!5 = !DIFile(filename: "typedef.cpp", directory: "/tmp/dbginfo")
|
||||
!6 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !7)
|
||||
!7 = !DIDerivedType(tag: DW_TAG_typedef, name: "x", line: 1, file: !1, baseType: null)
|
||||
|
@ -33,7 +33,7 @@
|
||||
# DBG_VALUE for variable "n" is extended into BB#5 from its predecessors BB#3
|
||||
# and BB#4.
|
||||
# CHECK: bb.5.if.end.7:
|
||||
# CHECK: DBG_VALUE debug-use %ebx, debug-use _, !18, !19, debug-location !32
|
||||
# CHECK: DBG_VALUE debug-use %ebx, debug-use _, !19, !20, debug-location !33
|
||||
|
||||
|
||||
--- |
|
||||
@ -121,7 +121,7 @@
|
||||
!13 = !DILocalVariable(name: "argv", arg: 2, scope: !4, file: !1, line: 6, type: !8)
|
||||
!14 = !DILocalVariable(name: "n", scope: !4, file: !1, line: 7, type: !7)
|
||||
!15 = !{!16}
|
||||
!16 = !DIGlobalVariable(name: "m", scope: !0, file: !1, line: 2, type: !7, isLocal: false, isDefinition: true)
|
||||
!16 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "m", scope: !0, file: !1, line: 2, type: !7, isLocal: false, isDefinition: true))
|
||||
!17 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!18 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!19 = !{!"clang version 3.8.0 (trunk 253049)"}
|
||||
|
@ -55,7 +55,7 @@
|
||||
!llvm.module.flags = !{!6, !7}
|
||||
!llvm.ident = !{!8}
|
||||
|
||||
!0 = distinct !DIGlobalVariable(name: "x", scope: !1, file: !2, line: 1, type: !5, isLocal: false, isDefinition: true)
|
||||
!0 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "x", scope: !1, file: !2, line: 1, type: !5, isLocal: false, isDefinition: true))
|
||||
!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)
|
||||
!2 = !DIFile(filename: "t.c", directory: "/home/test")
|
||||
!3 = !{}
|
||||
|
@ -45,7 +45,7 @@ entry:
|
||||
!13 = !{!14, !15}
|
||||
!14 = !DIDerivedType(tag: DW_TAG_member, name: "a", line: 10, size: 32, align: 32, file: !27, scope: !12, baseType: !5)
|
||||
!15 = !DIDerivedType(tag: DW_TAG_member, name: "b", line: 10, size: 32, align: 32, offset: 32, file: !27, scope: !12, baseType: !5)
|
||||
!16 = !DIGlobalVariable(name: "i", line: 5, isLocal: false, isDefinition: true, scope: !1, file: !1, type: !5)
|
||||
!16 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "i", line: 5, isLocal: false, isDefinition: true, scope: !1, file: !1, type: !5))
|
||||
!17 = !DILocation(line: 15, scope: !18)
|
||||
!18 = distinct !DILexicalBlock(line: 14, column: 0, file: !1, scope: !6)
|
||||
!19 = !DILocation(line: 9, scope: !0, inlinedAt: !17)
|
||||
|
@ -26,7 +26,7 @@
|
||||
!1 = !DIFile(filename: "tls.cpp", directory: "/tmp")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = !DIGlobalVariable(name: "tls", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6)
|
||||
!4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "tls", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6))
|
||||
!5 = !DIFile(filename: "tls.cpp", directory: "/tmp")
|
||||
!6 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!7 = !{i32 2, !"Dwarf Version", i32 3}
|
||||
|
@ -21,7 +21,7 @@
|
||||
!1 = !DIFile(filename: "tls.cpp", directory: "/tmp")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = !DIGlobalVariable(name: "tls", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6)
|
||||
!4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "tls", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6))
|
||||
!5 = !DIFile(filename: "tls.cpp", directory: "/tmp")
|
||||
!6 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!7 = !{i32 2, !"Dwarf Version", i32 3}
|
||||
|
@ -45,7 +45,7 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata)
|
||||
!1 = !DIFile(filename: "crash.c", directory: "wasm/tests")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = distinct !DIGlobalVariable(name: "key", scope: !0, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true)
|
||||
!4 = distinct !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "key", scope: !0, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true))
|
||||
!5 = !DICompositeType(tag: DW_TAG_array_type, baseType: !6, size: 120, align: 8, elements: !9)
|
||||
!6 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint8_t", file: !7, line: 185, baseType: !8)
|
||||
!7 = !DIFile(filename: "wasm/emscripten/system/include/libc/bits/alltypes.h", directory: "wasm/tests")
|
||||
|
@ -27,7 +27,7 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone
|
||||
!8 = !{!9}
|
||||
!9 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
||||
!12 = !{!14}
|
||||
!14 = !DIGlobalVariable(name: "GLB", line: 1, isLocal: false, isDefinition: true, scope: null, file: !6, type: !9)
|
||||
!14 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "GLB", line: 1, isLocal: false, isDefinition: true, scope: null, file: !6, type: !9))
|
||||
!15 = !DILocalVariable(name: "LOC", line: 4, scope: !16, file: !6, type: !9)
|
||||
!16 = distinct !DILexicalBlock(line: 3, column: 9, file: !20, scope: !5)
|
||||
!17 = !DILocation(line: 4, column: 9, scope: !16)
|
||||
|
@ -20,7 +20,7 @@ target triple = "x86_64-apple-macosx"
|
||||
!1 = !DIFile(filename: "test.c", directory: "/")
|
||||
!2 = !{}
|
||||
!3 = !{!4}
|
||||
!4 = !DIGlobalVariable(name: "s", scope: !0, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true)
|
||||
!4 = !DIGlobalVariableExpression(var: !DIGlobalVariable(name: "s", scope: !0, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true))
|
||||
!5 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !6, size: 64, align: 64)
|
||||
!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "s", scope: !9, file: !1, line: 1, flags: DIFlagFwdDecl)
|
||||
!7 = !{i32 2, !"Dwarf Version", i32 2}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user