1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 20:51:52 +01:00

DebugInfo: New metadata representation for global variables.

This patch reverses the edge from DIGlobalVariable to GlobalVariable.
This will allow us to more easily preserve debug info metadata when
manipulating global variables.

Fixes PR30362. A program for upgrading test cases is attached to that
bug.

Differential Revision: http://reviews.llvm.org/D20147

llvm-svn: 281284
This commit is contained in:
Peter Collingbourne 2016-09-13 01:12:59 +00:00
parent e9cf3722e5
commit a9fbb2813b
159 changed files with 922 additions and 796 deletions

View File

@ -454,20 +454,21 @@ namespace llvm {
/// \param Ty Variable Type. /// \param Ty Variable Type.
/// \param isLocalToUnit Boolean flag indicate whether this variable is /// \param isLocalToUnit Boolean flag indicate whether this variable is
/// externally visible or not. /// externally visible or not.
/// \param Val llvm::Value of the variable. /// \param Expr The location of the global relative to the attached
/// GlobalVariable.
/// \param Decl Reference to the corresponding declaration. /// \param Decl Reference to the corresponding declaration.
DIGlobalVariable *createGlobalVariable(DIScope *Context, StringRef Name, DIGlobalVariable *createGlobalVariable(DIScope *Context, StringRef Name,
StringRef LinkageName, DIFile *File, StringRef LinkageName, DIFile *File,
unsigned LineNo, DIType *Ty, unsigned LineNo, DIType *Ty,
bool isLocalToUnit, bool isLocalToUnit,
llvm::Constant *Val, DIExpression *Expr = nullptr,
MDNode *Decl = nullptr); MDNode *Decl = nullptr);
/// Identical to createGlobalVariable /// Identical to createGlobalVariable
/// except that the resulting DbgNode is temporary and meant to be RAUWed. /// except that the resulting DbgNode is temporary and meant to be RAUWed.
DIGlobalVariable *createTempGlobalVariableFwdDecl( DIGlobalVariable *createTempGlobalVariableFwdDecl(
DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *File, DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *File,
unsigned LineNo, DIType *Ty, bool isLocalToUnit, llvm::Constant *Val, unsigned LineNo, DIType *Ty, bool isLocalToUnit, DIExpression *Expr,
MDNode *Decl = nullptr); MDNode *Decl = nullptr);
/// Create a new descriptor for an auto variable. This is a local variable /// Create a new descriptor for an auto variable. This is a local variable
@ -514,6 +515,13 @@ namespace llvm {
DIExpression *createBitPieceExpression(unsigned OffsetInBits, DIExpression *createBitPieceExpression(unsigned OffsetInBits,
unsigned SizeInBits); unsigned SizeInBits);
/// Create an expression for a variable that does not have an address, but
/// does have a constant value.
DIExpression *createConstantValueExpression(uint64_t Val) {
return DIExpression::get(
VMContext, {dwarf::DW_OP_constu, Val, dwarf::DW_OP_stack_value});
}
/// Create a new descriptor for the specified subprogram. /// Create a new descriptor for the specified subprogram.
/// See comments in DISubprogram* for descriptions of these fields. /// See comments in DISubprogram* for descriptions of these fields.
/// \param Scope Function scope. /// \param Scope Function scope.

View File

@ -1862,6 +1862,159 @@ public:
} }
}; };
/// \brief DWARF expression.
///
/// This is (almost) a DWARF expression that modifies the location of a
/// variable, or the location of a single piece of a variable, or (when using
/// DW_OP_stack_value) is the constant variable value.
///
/// FIXME: Instead of DW_OP_plus taking an argument, this should use DW_OP_const
/// and have DW_OP_plus consume the topmost elements on the stack.
///
/// TODO: Co-allocate the expression elements.
/// TODO: Separate from MDNode, or otherwise drop Distinct and Temporary
/// storage types.
class DIExpression : public MDNode {
friend class LLVMContextImpl;
friend class MDNode;
std::vector<uint64_t> Elements;
DIExpression(LLVMContext &C, StorageType Storage, ArrayRef<uint64_t> Elements)
: MDNode(C, DIExpressionKind, Storage, None),
Elements(Elements.begin(), Elements.end()) {}
~DIExpression() = default;
static DIExpression *getImpl(LLVMContext &Context,
ArrayRef<uint64_t> Elements, StorageType Storage,
bool ShouldCreate = true);
TempDIExpression cloneImpl() const {
return getTemporary(getContext(), getElements());
}
public:
DEFINE_MDNODE_GET(DIExpression, (ArrayRef<uint64_t> Elements), (Elements))
TempDIExpression clone() const { return cloneImpl(); }
ArrayRef<uint64_t> getElements() const { return Elements; }
unsigned getNumElements() const { return Elements.size(); }
uint64_t getElement(unsigned I) const {
assert(I < Elements.size() && "Index out of range");
return Elements[I];
}
/// Return whether this is a piece of an aggregate variable.
bool isBitPiece() const;
/// Return the offset of this piece in bits.
uint64_t getBitPieceOffset() const;
/// Return the size of this piece in bits.
uint64_t getBitPieceSize() const;
typedef ArrayRef<uint64_t>::iterator element_iterator;
element_iterator elements_begin() const { return getElements().begin(); }
element_iterator elements_end() const { return getElements().end(); }
/// A lightweight wrapper around an expression operand.
///
/// TODO: Store arguments directly and change \a DIExpression to store a
/// range of these.
class ExprOperand {
const uint64_t *Op;
public:
explicit ExprOperand(const uint64_t *Op) : Op(Op) {}
const uint64_t *get() const { return Op; }
/// Get the operand code.
uint64_t getOp() const { return *Op; }
/// Get an argument to the operand.
///
/// Never returns the operand itself.
uint64_t getArg(unsigned I) const { return Op[I + 1]; }
unsigned getNumArgs() const { return getSize() - 1; }
/// Return the size of the operand.
///
/// Return the number of elements in the operand (1 + args).
unsigned getSize() const;
};
/// An iterator for expression operands.
class expr_op_iterator
: public std::iterator<std::input_iterator_tag, ExprOperand> {
ExprOperand Op;
public:
explicit expr_op_iterator(element_iterator I) : Op(I) {}
element_iterator getBase() const { return Op.get(); }
const ExprOperand &operator*() const { return Op; }
const ExprOperand *operator->() const { return &Op; }
expr_op_iterator &operator++() {
increment();
return *this;
}
expr_op_iterator operator++(int) {
expr_op_iterator T(*this);
increment();
return T;
}
/// Get the next iterator.
///
/// \a std::next() doesn't work because this is technically an
/// input_iterator, but it's a perfectly valid operation. This is an
/// accessor to provide the same functionality.
expr_op_iterator getNext() const { return ++expr_op_iterator(*this); }
bool operator==(const expr_op_iterator &X) const {
return getBase() == X.getBase();
}
bool operator!=(const expr_op_iterator &X) const {
return getBase() != X.getBase();
}
private:
void increment() { Op = ExprOperand(getBase() + Op.getSize()); }
};
/// Visit the elements via ExprOperand wrappers.
///
/// These range iterators visit elements through \a ExprOperand wrappers.
/// This is not guaranteed to be a valid range unless \a isValid() gives \c
/// true.
///
/// \pre \a isValid() gives \c true.
/// @{
expr_op_iterator expr_op_begin() const {
return expr_op_iterator(elements_begin());
}
expr_op_iterator expr_op_end() const {
return expr_op_iterator(elements_end());
}
/// @}
bool isValid() const;
static bool classof(const Metadata *MD) {
return MD->getMetadataID() == DIExpressionKind;
}
/// Is the first element a DW_OP_deref?.
bool startsWithDeref() const {
return getNumElements() > 0 && getElement(0) == dwarf::DW_OP_deref;
}
};
/// \brief Global variables. /// \brief Global variables.
/// ///
/// TODO: Remove DisplayName. It's always equal to Name. /// TODO: Remove DisplayName. It's always equal to Name.
@ -1882,26 +2035,25 @@ class DIGlobalVariable : public DIVariable {
static DIGlobalVariable * static DIGlobalVariable *
getImpl(LLVMContext &Context, DIScope *Scope, StringRef Name, getImpl(LLVMContext &Context, DIScope *Scope, StringRef Name,
StringRef LinkageName, DIFile *File, unsigned Line, DITypeRef Type, StringRef LinkageName, DIFile *File, unsigned Line, DITypeRef Type,
bool IsLocalToUnit, bool IsDefinition, Constant *Variable, bool IsLocalToUnit, bool IsDefinition, DIExpression *Expr,
DIDerivedType *StaticDataMemberDeclaration, StorageType Storage, DIDerivedType *StaticDataMemberDeclaration, StorageType Storage,
bool ShouldCreate = true) { bool ShouldCreate = true) {
return getImpl(Context, Scope, getCanonicalMDString(Context, Name), return getImpl(Context, Scope, getCanonicalMDString(Context, Name),
getCanonicalMDString(Context, LinkageName), File, Line, Type, getCanonicalMDString(Context, LinkageName), File, Line, Type,
IsLocalToUnit, IsDefinition, IsLocalToUnit, IsDefinition, Expr,
Variable ? ConstantAsMetadata::get(Variable) : nullptr,
StaticDataMemberDeclaration, Storage, ShouldCreate); StaticDataMemberDeclaration, Storage, ShouldCreate);
} }
static DIGlobalVariable * static DIGlobalVariable *
getImpl(LLVMContext &Context, Metadata *Scope, MDString *Name, getImpl(LLVMContext &Context, Metadata *Scope, MDString *Name,
MDString *LinkageName, Metadata *File, unsigned Line, Metadata *Type, MDString *LinkageName, Metadata *File, unsigned Line, Metadata *Type,
bool IsLocalToUnit, bool IsDefinition, Metadata *Variable, bool IsLocalToUnit, bool IsDefinition, Metadata *Expr,
Metadata *StaticDataMemberDeclaration, StorageType Storage, Metadata *StaticDataMemberDeclaration, StorageType Storage,
bool ShouldCreate = true); bool ShouldCreate = true);
TempDIGlobalVariable cloneImpl() const { TempDIGlobalVariable cloneImpl() const {
return getTemporary(getContext(), getScope(), getName(), getLinkageName(), return getTemporary(getContext(), getScope(), getName(), getLinkageName(),
getFile(), getLine(), getType(), isLocalToUnit(), getFile(), getLine(), getType(), isLocalToUnit(),
isDefinition(), getVariable(), isDefinition(), getExpr(),
getStaticDataMemberDeclaration()); getStaticDataMemberDeclaration());
} }
@ -1909,17 +2061,17 @@ public:
DEFINE_MDNODE_GET(DIGlobalVariable, DEFINE_MDNODE_GET(DIGlobalVariable,
(DIScope * Scope, StringRef Name, StringRef LinkageName, (DIScope * Scope, StringRef Name, StringRef LinkageName,
DIFile *File, unsigned Line, DITypeRef Type, DIFile *File, unsigned Line, DITypeRef Type,
bool IsLocalToUnit, bool IsDefinition, Constant *Variable, bool IsLocalToUnit, bool IsDefinition, DIExpression *Expr,
DIDerivedType *StaticDataMemberDeclaration), DIDerivedType *StaticDataMemberDeclaration),
(Scope, Name, LinkageName, File, Line, Type, IsLocalToUnit, (Scope, Name, LinkageName, File, Line, Type, IsLocalToUnit,
IsDefinition, Variable, StaticDataMemberDeclaration)) IsDefinition, Expr, StaticDataMemberDeclaration))
DEFINE_MDNODE_GET(DIGlobalVariable, DEFINE_MDNODE_GET(DIGlobalVariable,
(Metadata * Scope, MDString *Name, MDString *LinkageName, (Metadata * Scope, MDString *Name, MDString *LinkageName,
Metadata *File, unsigned Line, Metadata *Type, Metadata *File, unsigned Line, Metadata *Type,
bool IsLocalToUnit, bool IsDefinition, Metadata *Variable, bool IsLocalToUnit, bool IsDefinition, Metadata *Expr,
Metadata *StaticDataMemberDeclaration), Metadata *StaticDataMemberDeclaration),
(Scope, Name, LinkageName, File, Line, Type, IsLocalToUnit, (Scope, Name, LinkageName, File, Line, Type, IsLocalToUnit,
IsDefinition, Variable, StaticDataMemberDeclaration)) IsDefinition, Expr, StaticDataMemberDeclaration))
TempDIGlobalVariable clone() const { return cloneImpl(); } TempDIGlobalVariable clone() const { return cloneImpl(); }
@ -1927,17 +2079,18 @@ public:
bool isDefinition() const { return IsDefinition; } bool isDefinition() const { return IsDefinition; }
StringRef getDisplayName() const { return getStringOperand(4); } StringRef getDisplayName() const { return getStringOperand(4); }
StringRef getLinkageName() const { return getStringOperand(5); } StringRef getLinkageName() const { return getStringOperand(5); }
Constant *getVariable() const { DIExpression *getExpr() const {
if (auto *C = cast_or_null<ConstantAsMetadata>(getRawVariable())) return cast_or_null<DIExpression>(getRawExpr());
return dyn_cast<Constant>(C->getValue()); }
return nullptr; void replaceExpr(DIExpression *E) {
replaceOperandWith(6, E);
} }
DIDerivedType *getStaticDataMemberDeclaration() const { DIDerivedType *getStaticDataMemberDeclaration() const {
return cast_or_null<DIDerivedType>(getRawStaticDataMemberDeclaration()); return cast_or_null<DIDerivedType>(getRawStaticDataMemberDeclaration());
} }
MDString *getRawLinkageName() const { return getOperandAs<MDString>(5); } MDString *getRawLinkageName() const { return getOperandAs<MDString>(5); }
Metadata *getRawVariable() const { return getOperand(6); } Metadata *getRawExpr() const { return getOperand(6); }
Metadata *getRawStaticDataMemberDeclaration() const { return getOperand(7); } Metadata *getRawStaticDataMemberDeclaration() const { return getOperand(7); }
static bool classof(const Metadata *MD) { static bool classof(const Metadata *MD) {
@ -2024,158 +2177,6 @@ public:
} }
}; };
/// \brief DWARF expression.
///
/// This is (almost) a DWARF expression that modifies the location of a
/// variable or (or the location of a single piece of a variable).
///
/// FIXME: Instead of DW_OP_plus taking an argument, this should use DW_OP_const
/// and have DW_OP_plus consume the topmost elements on the stack.
///
/// TODO: Co-allocate the expression elements.
/// TODO: Separate from MDNode, or otherwise drop Distinct and Temporary
/// storage types.
class DIExpression : public MDNode {
friend class LLVMContextImpl;
friend class MDNode;
std::vector<uint64_t> Elements;
DIExpression(LLVMContext &C, StorageType Storage, ArrayRef<uint64_t> Elements)
: MDNode(C, DIExpressionKind, Storage, None),
Elements(Elements.begin(), Elements.end()) {}
~DIExpression() = default;
static DIExpression *getImpl(LLVMContext &Context,
ArrayRef<uint64_t> Elements, StorageType Storage,
bool ShouldCreate = true);
TempDIExpression cloneImpl() const {
return getTemporary(getContext(), getElements());
}
public:
DEFINE_MDNODE_GET(DIExpression, (ArrayRef<uint64_t> Elements), (Elements))
TempDIExpression clone() const { return cloneImpl(); }
ArrayRef<uint64_t> getElements() const { return Elements; }
unsigned getNumElements() const { return Elements.size(); }
uint64_t getElement(unsigned I) const {
assert(I < Elements.size() && "Index out of range");
return Elements[I];
}
/// \brief Return whether this is a piece of an aggregate variable.
bool isBitPiece() const;
/// \brief Return the offset of this piece in bits.
uint64_t getBitPieceOffset() const;
/// \brief Return the size of this piece in bits.
uint64_t getBitPieceSize() const;
typedef ArrayRef<uint64_t>::iterator element_iterator;
element_iterator elements_begin() const { return getElements().begin(); }
element_iterator elements_end() const { return getElements().end(); }
/// \brief A lightweight wrapper around an expression operand.
///
/// TODO: Store arguments directly and change \a DIExpression to store a
/// range of these.
class ExprOperand {
const uint64_t *Op;
public:
explicit ExprOperand(const uint64_t *Op) : Op(Op) {}
const uint64_t *get() const { return Op; }
/// \brief Get the operand code.
uint64_t getOp() const { return *Op; }
/// \brief Get an argument to the operand.
///
/// Never returns the operand itself.
uint64_t getArg(unsigned I) const { return Op[I + 1]; }
unsigned getNumArgs() const { return getSize() - 1; }
/// \brief Return the size of the operand.
///
/// Return the number of elements in the operand (1 + args).
unsigned getSize() const;
};
/// \brief An iterator for expression operands.
class expr_op_iterator
: public std::iterator<std::input_iterator_tag, ExprOperand> {
ExprOperand Op;
public:
explicit expr_op_iterator(element_iterator I) : Op(I) {}
element_iterator getBase() const { return Op.get(); }
const ExprOperand &operator*() const { return Op; }
const ExprOperand *operator->() const { return &Op; }
expr_op_iterator &operator++() {
increment();
return *this;
}
expr_op_iterator operator++(int) {
expr_op_iterator T(*this);
increment();
return T;
}
/// \brief Get the next iterator.
///
/// \a std::next() doesn't work because this is technically an
/// input_iterator, but it's a perfectly valid operation. This is an
/// accessor to provide the same functionality.
expr_op_iterator getNext() const { return ++expr_op_iterator(*this); }
bool operator==(const expr_op_iterator &X) const {
return getBase() == X.getBase();
}
bool operator!=(const expr_op_iterator &X) const {
return getBase() != X.getBase();
}
private:
void increment() { Op = ExprOperand(getBase() + Op.getSize()); }
};
/// \brief Visit the elements via ExprOperand wrappers.
///
/// These range iterators visit elements through \a ExprOperand wrappers.
/// This is not guaranteed to be a valid range unless \a isValid() gives \c
/// true.
///
/// \pre \a isValid() gives \c true.
/// @{
expr_op_iterator expr_op_begin() const {
return expr_op_iterator(elements_begin());
}
expr_op_iterator expr_op_end() const {
return expr_op_iterator(elements_end());
}
/// @}
bool isValid() const;
static bool classof(const Metadata *MD) {
return MD->getMetadataID() == DIExpressionKind;
}
/// \brief Is the first element a DW_OP_deref?.
bool startsWithDeref() const {
return getNumElements() > 0 && getElement(0) == dwarf::DW_OP_deref;
}
};
class DIObjCProperty : public DINode { class DIObjCProperty : public DINode {
friend class LLVMContextImpl; friend class LLVMContextImpl;
friend class MDNode; friend class MDNode;

View File

@ -27,8 +27,9 @@
namespace llvm { namespace llvm {
class Module;
class Constant; class Constant;
class DIGlobalVariable;
class Module;
template <typename ValueSubClass> class SymbolTableListTraits; template <typename ValueSubClass> class SymbolTableListTraits;
class GlobalVariable : public GlobalObject, public ilist_node<GlobalVariable> { class GlobalVariable : public GlobalObject, public ilist_node<GlobalVariable> {
@ -165,6 +166,9 @@ public:
/// drops not only the reference to the initializer but also to any metadata. /// drops not only the reference to the initializer but also to any metadata.
void dropAllReferences(); void dropAllReferences();
void addDebugInfo(DIGlobalVariable *GV);
void getDebugInfo(SmallVectorImpl<DIGlobalVariable *> &GVs) const;
// Methods for support type inquiry through isa, cast, and dyn_cast: // Methods for support type inquiry through isa, cast, and dyn_cast:
static inline bool classof(const Value *V) { static inline bool classof(const Value *V) {
return V->getValueID() == Value::GlobalVariableVal; return V->getValueID() == Value::GlobalVariableVal;

View File

@ -4201,7 +4201,7 @@ bool LLParser::ParseDIGlobalVariable(MDNode *&Result, bool IsDistinct) {
OPTIONAL(type, MDField, ); \ OPTIONAL(type, MDField, ); \
OPTIONAL(isLocal, MDBoolField, ); \ OPTIONAL(isLocal, MDBoolField, ); \
OPTIONAL(isDefinition, MDBoolField, (true)); \ OPTIONAL(isDefinition, MDBoolField, (true)); \
OPTIONAL(variable, MDConstant, ); \ OPTIONAL(expr, MDField, ); \
OPTIONAL(declaration, MDField, ); OPTIONAL(declaration, MDField, );
PARSE_MD_FIELDS(); PARSE_MD_FIELDS();
#undef VISIT_MD_FIELDS #undef VISIT_MD_FIELDS
@ -4209,7 +4209,7 @@ bool LLParser::ParseDIGlobalVariable(MDNode *&Result, bool IsDistinct) {
Result = GET_OR_DISTINCT(DIGlobalVariable, Result = GET_OR_DISTINCT(DIGlobalVariable,
(Context, scope.Val, name.Val, linkageName.Val, (Context, scope.Val, name.Val, linkageName.Val,
file.Val, line.Val, type.Val, isLocal.Val, file.Val, line.Val, type.Val, isLocal.Val,
isDefinition.Val, variable.Val, declaration.Val)); isDefinition.Val, expr.Val, declaration.Val));
return false; return false;
} }

View File

@ -2679,14 +2679,35 @@ std::error_code BitcodeReader::parseMetadata(bool ModuleLevel) {
return error("Invalid record"); return error("Invalid record");
IsDistinct = Record[0]; IsDistinct = Record[0];
MetadataList.assignValue(
GET_OR_DISTINCT(DIGlobalVariable, // Upgrade old metadata, which stored a global variable reference or a
(Context, getMDOrNull(Record[1]), // ConstantInt here.
getMDString(Record[2]), getMDString(Record[3]), Metadata *Expr = getMDOrNull(Record[9]);
getMDOrNull(Record[4]), Record[5], GlobalVariable *Attach = nullptr;
getDITypeRefOrNull(Record[6]), Record[7], Record[8], if (auto *CMD = dyn_cast_or_null<ConstantAsMetadata>(Expr)) {
getMDOrNull(Record[9]), getMDOrNull(Record[10]))), if (auto *GV = dyn_cast<GlobalVariable>(CMD->getValue())) {
NextMetadataNo++); 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], Expr,
getMDOrNull(Record[10])));
MetadataList.assignValue(DGV, NextMetadataNo++);
if (Attach)
Attach->addDebugInfo(DGV);
break; break;
} }
case bitc::METADATA_LOCAL_VAR: { case bitc::METADATA_LOCAL_VAR: {

View File

@ -1710,7 +1710,7 @@ void ModuleBitcodeWriter::writeDIGlobalVariable(
Record.push_back(VE.getMetadataOrNullID(N->getType())); Record.push_back(VE.getMetadataOrNullID(N->getType()));
Record.push_back(N->isLocalToUnit()); Record.push_back(N->isLocalToUnit());
Record.push_back(N->isDefinition()); Record.push_back(N->isDefinition());
Record.push_back(VE.getMetadataOrNullID(N->getRawVariable())); Record.push_back(VE.getMetadataOrNullID(N->getRawExpr()));
Record.push_back(VE.getMetadataOrNullID(N->getStaticDataMemberDeclaration())); Record.push_back(VE.getMetadataOrNullID(N->getStaticDataMemberDeclaration()));
Stream.EmitRecord(bitc::METADATA_GLOBAL_VAR, Record, Abbrev); Stream.EmitRecord(bitc::METADATA_GLOBAL_VAR, Record, Abbrev);

View File

@ -2001,6 +2001,14 @@ void CodeViewDebug::emitDebugInfoForUDTs(
} }
void CodeViewDebug::emitDebugInfoForGlobals() { void CodeViewDebug::emitDebugInfoForGlobals() {
DenseMap<const DIGlobalVariable *, 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;
}
NamedMDNode *CUs = MMI->getModule()->getNamedMetadata("llvm.dbg.cu"); NamedMDNode *CUs = MMI->getModule()->getNamedMetadata("llvm.dbg.cu");
for (const MDNode *Node : CUs->operands()) { for (const MDNode *Node : CUs->operands()) {
const auto *CU = cast<DICompileUnit>(Node); const auto *CU = cast<DICompileUnit>(Node);
@ -2011,14 +2019,13 @@ void CodeViewDebug::emitDebugInfoForGlobals() {
switchToDebugSectionForSymbol(nullptr); switchToDebugSectionForSymbol(nullptr);
MCSymbol *EndLabel = nullptr; MCSymbol *EndLabel = nullptr;
for (const DIGlobalVariable *G : CU->getGlobalVariables()) { for (const DIGlobalVariable *G : CU->getGlobalVariables()) {
if (const auto *GV = dyn_cast_or_null<GlobalVariable>(G->getVariable())) { if (const auto *GV = GlobalMap.lookup(G))
if (!GV->hasComdat() && !GV->isDeclarationForLinker()) { if (!GV->hasComdat() && !GV->isDeclarationForLinker()) {
if (!EndLabel) { if (!EndLabel) {
OS.AddComment("Symbol subsection for globals"); OS.AddComment("Symbol subsection for globals");
EndLabel = beginCVSubsection(ModuleSubstreamKind::Symbols); EndLabel = beginCVSubsection(ModuleSubstreamKind::Symbols);
} }
emitDebugInfoForGlobal(G, Asm->getSymbol(GV)); emitDebugInfoForGlobal(G, GV, Asm->getSymbol(GV));
}
} }
} }
if (EndLabel) if (EndLabel)
@ -2027,14 +2034,14 @@ void CodeViewDebug::emitDebugInfoForGlobals() {
// Second, emit each global that is in a comdat into its own .debug$S // Second, emit each global that is in a comdat into its own .debug$S
// section along with its own symbol substream. // section along with its own symbol substream.
for (const DIGlobalVariable *G : CU->getGlobalVariables()) { for (const DIGlobalVariable *G : CU->getGlobalVariables()) {
if (const auto *GV = dyn_cast_or_null<GlobalVariable>(G->getVariable())) { if (const auto *GV = GlobalMap.lookup(G)) {
if (GV->hasComdat()) { if (GV->hasComdat()) {
MCSymbol *GVSym = Asm->getSymbol(GV); MCSymbol *GVSym = Asm->getSymbol(GV);
OS.AddComment("Symbol subsection for " + OS.AddComment("Symbol subsection for " +
Twine(GlobalValue::getRealLinkageName(GV->getName()))); Twine(GlobalValue::getRealLinkageName(GV->getName())));
switchToDebugSectionForSymbol(GVSym); switchToDebugSectionForSymbol(GVSym);
EndLabel = beginCVSubsection(ModuleSubstreamKind::Symbols); EndLabel = beginCVSubsection(ModuleSubstreamKind::Symbols);
emitDebugInfoForGlobal(G, GVSym); emitDebugInfoForGlobal(G, GV, GVSym);
endCVSubsection(EndLabel); endCVSubsection(EndLabel);
} }
} }
@ -2055,6 +2062,7 @@ void CodeViewDebug::emitDebugInfoForRetainedTypes() {
} }
void CodeViewDebug::emitDebugInfoForGlobal(const DIGlobalVariable *DIGV, void CodeViewDebug::emitDebugInfoForGlobal(const DIGlobalVariable *DIGV,
const GlobalVariable *GV,
MCSymbol *GVSym) { MCSymbol *GVSym) {
// DataSym record, see SymbolRecord.h for more info. // DataSym record, see SymbolRecord.h for more info.
// FIXME: Thread local data, etc // FIXME: Thread local data, etc
@ -2063,7 +2071,6 @@ void CodeViewDebug::emitDebugInfoForGlobal(const DIGlobalVariable *DIGV,
OS.AddComment("Record length"); OS.AddComment("Record length");
OS.emitAbsoluteSymbolDiff(DataEnd, DataBegin, 2); OS.emitAbsoluteSymbolDiff(DataEnd, DataBegin, 2);
OS.EmitLabel(DataBegin); OS.EmitLabel(DataBegin);
const auto *GV = cast<GlobalVariable>(DIGV->getVariable());
if (DIGV->isLocalToUnit()) { if (DIGV->isLocalToUnit()) {
if (GV->isThreadLocal()) { if (GV->isThreadLocal()) {
OS.AddComment("Record kind: S_LTHREAD32"); OS.AddComment("Record kind: S_LTHREAD32");

View File

@ -202,7 +202,8 @@ class LLVM_LIBRARY_VISIBILITY CodeViewDebug : public DebugHandlerBase {
void emitDebugInfoForUDTs( void emitDebugInfoForUDTs(
ArrayRef<std::pair<std::string, codeview::TypeIndex>> UDTs); ArrayRef<std::pair<std::string, codeview::TypeIndex>> UDTs);
void emitDebugInfoForGlobal(const DIGlobalVariable *DIGV, MCSymbol *GVSym); void emitDebugInfoForGlobal(const DIGlobalVariable *DIGV,
const GlobalVariable *GV, MCSymbol *GVSym);
/// Opens a subsection of the given kind in a .debug$S codeview section. /// Opens a subsection of the given kind in a .debug$S codeview section.
/// Returns an end label for use with endCVSubsection when the subsection is /// Returns an end label for use with endCVSubsection when the subsection is

View File

@ -73,36 +73,9 @@ unsigned DwarfCompileUnit::getOrCreateSourceID(StringRef FileName,
Asm->OutStreamer->hasRawTextSupport() ? 0 : getUniqueID()); Asm->OutStreamer->hasRawTextSupport() ? 0 : getUniqueID());
} }
// Return const expression if value is a GEP to access merged global
// constant. e.g.
// i8* getelementptr ({ i8, i8, i8, i8 }* @_MergedGlobals, i32 0, i32 0)
static const ConstantExpr *getMergedGlobalExpr(const Value *V) {
const ConstantExpr *CE = dyn_cast_or_null<ConstantExpr>(V);
if (!CE || CE->getNumOperands() != 3 ||
CE->getOpcode() != Instruction::GetElementPtr)
return nullptr;
// First operand points to a global struct.
Value *Ptr = CE->getOperand(0);
GlobalValue *GV = dyn_cast<GlobalValue>(Ptr);
if (!GV || !isa<StructType>(GV->getValueType()))
return nullptr;
// Second operand is zero.
const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(CE->getOperand(1));
if (!CI || !CI->isZero())
return nullptr;
// Third operand is offset.
if (!isa<ConstantInt>(CE->getOperand(2)))
return nullptr;
return CE;
}
/// getOrCreateGlobalVariableDIE - get or create global variable DIE. /// getOrCreateGlobalVariableDIE - get or create global variable DIE.
DIE *DwarfCompileUnit::getOrCreateGlobalVariableDIE( DIE *DwarfCompileUnit::getOrCreateGlobalVariableDIE(
const DIGlobalVariable *GV) { const DIGlobalVariable *GV, const GlobalVariable *Global) {
// Check for pre-existence. // Check for pre-existence.
if (DIE *Die = getDIE(GV)) if (DIE *Die = getDIE(GV))
return Die; return Die;
@ -147,12 +120,22 @@ DIE *DwarfCompileUnit::getOrCreateGlobalVariableDIE(
// Add location. // Add location.
bool addToAccelTable = false; bool addToAccelTable = false;
if (auto *Global = dyn_cast_or_null<GlobalVariable>(GV->getVariable())) {
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 // We cannot describe the location of dllimport'd variables: the computation
// of their address requires loads from the IAT. // of their address requires loads from the IAT.
if (!Global->hasDLLImportStorageClass()) { } else if (!Global || !Global->hasDLLImportStorageClass()) {
addToAccelTable = true;
DIELoc *Loc = new (DIEValueAllocator) DIELoc; DIELoc *Loc = new (DIEValueAllocator) DIELoc;
if (Global) {
addToAccelTable = true;
const MCSymbol *Sym = Asm->getSymbol(Global); const MCSymbol *Sym = Asm->getSymbol(Global);
if (Global->isThreadLocal()) { if (Global->isThreadLocal()) {
if (Asm->TM.Options.EmulatedTLS) { if (Asm->TM.Options.EmulatedTLS) {
@ -187,31 +170,17 @@ DIE *DwarfCompileUnit::getOrCreateGlobalVariableDIE(
addOpAddress(*Loc, Sym); addOpAddress(*Loc, Sym);
} }
if (Expr) {
DIEDwarfExpression DwarfExpr(*Asm, *this, *Loc);
DwarfExpr.AddExpression(Expr->expr_op_begin(), Expr->expr_op_end());
}
}
addBlock(*VariableDIE, dwarf::DW_AT_location, Loc); addBlock(*VariableDIE, dwarf::DW_AT_location, Loc);
if (DD->useAllLinkageNames()) if (DD->useAllLinkageNames())
addLinkageName(*VariableDIE, GV->getLinkageName()); addLinkageName(*VariableDIE, GV->getLinkageName());
} }
} else if (const ConstantInt *CI =
dyn_cast_or_null<ConstantInt>(GV->getVariable())) {
addConstantValue(*VariableDIE, CI, GTy);
} else if (const ConstantExpr *CE = getMergedGlobalExpr(GV->getVariable())) {
auto *Ptr = cast<GlobalValue>(CE->getOperand(0));
if (!Ptr->hasDLLImportStorageClass()) {
addToAccelTable = true;
// GV is a merged global.
DIELoc *Loc = new (DIEValueAllocator) DIELoc;
MCSymbol *Sym = Asm->getSymbol(Ptr);
DD->addArangeLabel(SymbolCU(this, Sym));
addOpAddress(*Loc, Sym);
addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
SmallVector<Value *, 3> Idx(CE->op_begin() + 1, CE->op_end());
addUInt(*Loc, dwarf::DW_FORM_udata,
Asm->getDataLayout().getIndexedOffsetInType(Ptr->getValueType(),
Idx));
addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
addBlock(*VariableDIE, dwarf::DW_AT_location, Loc);
}
}
if (addToAccelTable) { if (addToAccelTable) {
DD->addAccelName(GV->getName(), *VariableDIE); DD->addAccelName(GV->getName(), *VariableDIE);
@ -674,7 +643,7 @@ DIE *DwarfCompileUnit::constructImportedEntityDIE(
else if (auto *T = dyn_cast<DIType>(Entity)) else if (auto *T = dyn_cast<DIType>(Entity))
EntityDie = getOrCreateTypeDIE(T); EntityDie = getOrCreateTypeDIE(T);
else if (auto *GV = dyn_cast<DIGlobalVariable>(Entity)) else if (auto *GV = dyn_cast<DIGlobalVariable>(Entity))
EntityDie = getOrCreateGlobalVariableDIE(GV); EntityDie = getOrCreateGlobalVariableDIE(GV, nullptr);
else else
EntityDie = getDIE(Entity); EntityDie = getDIE(Entity);
assert(EntityDie); assert(EntityDie);

View File

@ -97,7 +97,8 @@ public:
void applyStmtList(DIE &D); void applyStmtList(DIE &D);
/// getOrCreateGlobalVariableDIE - get or create global variable DIE. /// getOrCreateGlobalVariableDIE - get or create global variable DIE.
DIE *getOrCreateGlobalVariableDIE(const DIGlobalVariable *GV); DIE *getOrCreateGlobalVariableDIE(const DIGlobalVariable *GV,
const GlobalVariable *Global);
/// addLabelAddress - Add a dwarf label attribute data and value using /// addLabelAddress - Add a dwarf label attribute data and value using
/// either DW_FORM_addr or DW_FORM_GNU_addr_index. /// either DW_FORM_addr or DW_FORM_GNU_addr_index.

View File

@ -477,12 +477,20 @@ void DwarfDebug::beginModule() {
MMI->setDebugInfoAvailability(NumDebugCUs > 0); MMI->setDebugInfoAvailability(NumDebugCUs > 0);
SingleCU = NumDebugCUs == 1; SingleCU = NumDebugCUs == 1;
DenseMap<DIGlobalVariable *, const GlobalVariable *> GVMap;
for (const GlobalVariable &Global : M->globals()) {
SmallVector<DIGlobalVariable *, 1> GVs;
Global.getDebugInfo(GVs);
for (auto &GV : GVs)
GVMap[GV] = &Global;
}
for (DICompileUnit *CUNode : M->debug_compile_units()) { for (DICompileUnit *CUNode : M->debug_compile_units()) {
DwarfCompileUnit &CU = constructDwarfCompileUnit(CUNode); DwarfCompileUnit &CU = constructDwarfCompileUnit(CUNode);
for (auto *IE : CUNode->getImportedEntities()) for (auto *IE : CUNode->getImportedEntities())
CU.addImportedEntity(IE); CU.addImportedEntity(IE);
for (auto *GV : CUNode->getGlobalVariables()) for (auto *GV : CUNode->getGlobalVariables())
CU.getOrCreateGlobalVariableDIE(GV); CU.getOrCreateGlobalVariableDIE(GV, GVMap.lookup(GV));
for (auto *Ty : CUNode->getEnumTypes()) { for (auto *Ty : CUNode->getEnumTypes()) {
// The enum types array by design contains pointers to // The enum types array by design contains pointers to
// MDNodes rather than DIRefs. Unique them here. // MDNodes rather than DIRefs. Unique them here.

View File

@ -278,6 +278,13 @@ void DwarfExpression::AddExpression(DIExpression::expr_op_iterator I,
case dwarf::DW_OP_deref: case dwarf::DW_OP_deref:
EmitOp(dwarf::DW_OP_deref); EmitOp(dwarf::DW_OP_deref);
break; break;
case dwarf::DW_OP_constu:
EmitOp(dwarf::DW_OP_constu);
EmitUnsigned(I->getArg(0));
break;
case dwarf::DW_OP_stack_value:
AddStackValue();
break;
default: default:
llvm_unreachable("unhandled opcode found in expression"); llvm_unreachable("unhandled opcode found in expression");
} }

View File

@ -451,10 +451,16 @@ bool GlobalMerge::doMerge(const SmallVectorImpl<GlobalVariable *> &Globals,
M, MergedTy, isConst, GlobalValue::PrivateLinkage, MergedInit, M, MergedTy, isConst, GlobalValue::PrivateLinkage, MergedInit,
"_MergedGlobals", nullptr, GlobalVariable::NotThreadLocal, AddrSpace); "_MergedGlobals", nullptr, GlobalVariable::NotThreadLocal, AddrSpace);
const StructLayout *MergedLayout = DL.getStructLayout(MergedTy);
for (ssize_t k = i, idx = 0; k != j; k = GlobalSet.find_next(k), ++idx) { for (ssize_t k = i, idx = 0; k != j; k = GlobalSet.find_next(k), ++idx) {
GlobalValue::LinkageTypes Linkage = Globals[k]->getLinkage(); GlobalValue::LinkageTypes Linkage = Globals[k]->getLinkage();
std::string Name = Globals[k]->getName(); std::string Name = Globals[k]->getName();
// Copy metadata while adjusting any debug info metadata by the original
// global's offset within the merged global.
MergedGV->copyMetadata(Globals[k], MergedLayout->getElementOffset(idx));
Constant *Idx[2] = { Constant *Idx[2] = {
ConstantInt::get(Int32Ty, 0), ConstantInt::get(Int32Ty, 0),
ConstantInt::get(Int32Ty, idx), ConstantInt::get(Int32Ty, idx),

View File

@ -1816,7 +1816,7 @@ static void writeDIGlobalVariable(raw_ostream &Out, const DIGlobalVariable *N,
Printer.printMetadata("type", N->getRawType()); Printer.printMetadata("type", N->getRawType());
Printer.printBool("isLocal", N->isLocalToUnit()); Printer.printBool("isLocal", N->isLocalToUnit());
Printer.printBool("isDefinition", N->isDefinition()); Printer.printBool("isDefinition", N->isDefinition());
Printer.printMetadata("variable", N->getRawVariable()); Printer.printMetadata("expr", N->getExpr());
Printer.printMetadata("declaration", N->getRawStaticDataMemberDeclaration()); Printer.printMetadata("declaration", N->getRawStaticDataMemberDeclaration());
Out << ")"; Out << ")";
} }

View File

@ -535,13 +535,13 @@ static void checkGlobalVariableScope(DIScope *Context) {
DIGlobalVariable *DIBuilder::createGlobalVariable( DIGlobalVariable *DIBuilder::createGlobalVariable(
DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *F, DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *F,
unsigned LineNumber, DIType *Ty, bool isLocalToUnit, Constant *Val, unsigned LineNumber, DIType *Ty, bool isLocalToUnit, DIExpression *Expr,
MDNode *Decl) { MDNode *Decl) {
checkGlobalVariableScope(Context); checkGlobalVariableScope(Context);
auto *N = DIGlobalVariable::getDistinct( auto *N = DIGlobalVariable::getDistinct(
VMContext, cast_or_null<DIScope>(Context), Name, LinkageName, F, VMContext, cast_or_null<DIScope>(Context), Name, LinkageName, F,
LineNumber, Ty, isLocalToUnit, true, Val, LineNumber, Ty, isLocalToUnit, true, Expr,
cast_or_null<DIDerivedType>(Decl)); cast_or_null<DIDerivedType>(Decl));
AllGVs.push_back(N); AllGVs.push_back(N);
return N; return N;
@ -549,13 +549,13 @@ DIGlobalVariable *DIBuilder::createGlobalVariable(
DIGlobalVariable *DIBuilder::createTempGlobalVariableFwdDecl( DIGlobalVariable *DIBuilder::createTempGlobalVariableFwdDecl(
DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *F, DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *F,
unsigned LineNumber, DIType *Ty, bool isLocalToUnit, Constant *Val, unsigned LineNumber, DIType *Ty, bool isLocalToUnit, DIExpression *Expr,
MDNode *Decl) { MDNode *Decl) {
checkGlobalVariableScope(Context); checkGlobalVariableScope(Context);
return DIGlobalVariable::getTemporary( return DIGlobalVariable::getTemporary(
VMContext, cast_or_null<DIScope>(Context), Name, LinkageName, F, VMContext, cast_or_null<DIScope>(Context), Name, LinkageName, F,
LineNumber, Ty, isLocalToUnit, false, Val, LineNumber, Ty, isLocalToUnit, false, Expr,
cast_or_null<DIDerivedType>(Decl)) cast_or_null<DIDerivedType>(Decl))
.release(); .release();
} }

View File

@ -551,6 +551,7 @@ unsigned DIExpression::ExprOperand::getSize() const {
switch (getOp()) { switch (getOp()) {
case dwarf::DW_OP_bit_piece: case dwarf::DW_OP_bit_piece:
return 3; return 3;
case dwarf::DW_OP_constu:
case dwarf::DW_OP_plus: case dwarf::DW_OP_plus:
case dwarf::DW_OP_minus: case dwarf::DW_OP_minus:
return 2; return 2;
@ -570,8 +571,11 @@ bool DIExpression::isValid() const {
default: default:
return false; return false;
case dwarf::DW_OP_bit_piece: case dwarf::DW_OP_bit_piece:
// Piece expressions must be at the end. case dwarf::DW_OP_stack_value:
// We only support bit piece and stack value expressions which appear at
// the end.
return I->get() + I->getSize() == E->get(); return I->get() + I->getSize() == E->get();
case dwarf::DW_OP_constu:
case dwarf::DW_OP_plus: case dwarf::DW_OP_plus:
case dwarf::DW_OP_minus: case dwarf::DW_OP_minus:
case dwarf::DW_OP_deref: case dwarf::DW_OP_deref:

View File

@ -758,23 +758,23 @@ template <> struct MDNodeKeyImpl<DIGlobalVariable> {
Metadata *Type; Metadata *Type;
bool IsLocalToUnit; bool IsLocalToUnit;
bool IsDefinition; bool IsDefinition;
Metadata *Variable; Metadata *Expr;
Metadata *StaticDataMemberDeclaration; Metadata *StaticDataMemberDeclaration;
MDNodeKeyImpl(Metadata *Scope, MDString *Name, MDString *LinkageName, MDNodeKeyImpl(Metadata *Scope, MDString *Name, MDString *LinkageName,
Metadata *File, unsigned Line, Metadata *Type, Metadata *File, unsigned Line, Metadata *Type,
bool IsLocalToUnit, bool IsDefinition, Metadata *Variable, bool IsLocalToUnit, bool IsDefinition, Metadata *Expr,
Metadata *StaticDataMemberDeclaration) Metadata *StaticDataMemberDeclaration)
: Scope(Scope), Name(Name), LinkageName(LinkageName), File(File), : Scope(Scope), Name(Name), LinkageName(LinkageName), File(File),
Line(Line), Type(Type), IsLocalToUnit(IsLocalToUnit), Line(Line), Type(Type), IsLocalToUnit(IsLocalToUnit),
IsDefinition(IsDefinition), Variable(Variable), IsDefinition(IsDefinition), Expr(Expr),
StaticDataMemberDeclaration(StaticDataMemberDeclaration) {} StaticDataMemberDeclaration(StaticDataMemberDeclaration) {}
MDNodeKeyImpl(const DIGlobalVariable *N) MDNodeKeyImpl(const DIGlobalVariable *N)
: Scope(N->getRawScope()), Name(N->getRawName()), : Scope(N->getRawScope()), Name(N->getRawName()),
LinkageName(N->getRawLinkageName()), File(N->getRawFile()), LinkageName(N->getRawLinkageName()), File(N->getRawFile()),
Line(N->getLine()), Type(N->getRawType()), Line(N->getLine()), Type(N->getRawType()),
IsLocalToUnit(N->isLocalToUnit()), IsDefinition(N->isDefinition()), IsLocalToUnit(N->isLocalToUnit()), IsDefinition(N->isDefinition()),
Variable(N->getRawVariable()), Expr(N->getRawExpr()),
StaticDataMemberDeclaration(N->getRawStaticDataMemberDeclaration()) {} StaticDataMemberDeclaration(N->getRawStaticDataMemberDeclaration()) {}
bool isKeyOf(const DIGlobalVariable *RHS) const { bool isKeyOf(const DIGlobalVariable *RHS) const {
@ -783,13 +783,13 @@ template <> struct MDNodeKeyImpl<DIGlobalVariable> {
File == RHS->getRawFile() && Line == RHS->getLine() && File == RHS->getRawFile() && Line == RHS->getLine() &&
Type == RHS->getRawType() && IsLocalToUnit == RHS->isLocalToUnit() && Type == RHS->getRawType() && IsLocalToUnit == RHS->isLocalToUnit() &&
IsDefinition == RHS->isDefinition() && IsDefinition == RHS->isDefinition() &&
Variable == RHS->getRawVariable() && Expr == RHS->getRawExpr() &&
StaticDataMemberDeclaration == StaticDataMemberDeclaration ==
RHS->getRawStaticDataMemberDeclaration(); RHS->getRawStaticDataMemberDeclaration();
} }
unsigned getHashValue() const { unsigned getHashValue() const {
return hash_combine(Scope, Name, LinkageName, File, Line, Type, return hash_combine(Scope, Name, LinkageName, File, Line, Type,
IsLocalToUnit, IsDefinition, Variable, IsLocalToUnit, IsDefinition, Expr,
StaticDataMemberDeclaration); StaticDataMemberDeclaration);
} }
}; };

View File

@ -1424,6 +1424,21 @@ void GlobalObject::copyMetadata(const GlobalObject *Other, unsigned Offset) {
*MDNode::get(getContext(), {NewOffsetMD, TypeId})); *MDNode::get(getContext(), {NewOffsetMD, TypeId}));
continue; continue;
} }
// If an offset adjustment was specified we need to modify the DIExpression
// to prepend the adjustment:
// !DIExpression(DW_OP_plus, Offset, [original expr])
if (Offset != 0 && MD.first == LLVMContext::MD_dbg) {
DIGlobalVariable *GV = cast<DIGlobalVariable>(MD.second);
DIExpression *E = GV->getExpr();
ArrayRef<uint64_t> OrigElements;
if (E)
OrigElements = E->getElements();
std::vector<uint64_t> Elements(OrigElements.size() + 2);
Elements[0] = dwarf::DW_OP_plus;
Elements[1] = Offset;
std::copy(OrigElements.begin(), OrigElements.end(), Elements.begin() + 2);
GV->replaceExpr(DIExpression::get(getContext(), Elements));
}
addMetadata(MD.first, *MD.second); addMetadata(MD.first, *MD.second);
} }
} }
@ -1444,3 +1459,15 @@ void Function::setSubprogram(DISubprogram *SP) {
DISubprogram *Function::getSubprogram() const { DISubprogram *Function::getSubprogram() const {
return cast_or_null<DISubprogram>(getMetadata(LLVMContext::MD_dbg)); return cast_or_null<DISubprogram>(getMetadata(LLVMContext::MD_dbg));
} }
void GlobalVariable::addDebugInfo(DIGlobalVariable *GV) {
addMetadata(LLVMContext::MD_dbg, *GV);
}
void GlobalVariable::getDebugInfo(
SmallVectorImpl<DIGlobalVariable *> &GVs) const {
SmallVector<MDNode *, 1> MDs;
getMetadata(LLVMContext::MD_dbg, MDs);
for (MDNode *MD : MDs)
GVs.push_back(cast<DIGlobalVariable>(MD));
}

View File

@ -1112,12 +1112,8 @@ void Verifier::visitDIGlobalVariable(const DIGlobalVariable &N) {
AssertDI(N.getTag() == dwarf::DW_TAG_variable, "invalid tag", &N); AssertDI(N.getTag() == dwarf::DW_TAG_variable, "invalid tag", &N);
AssertDI(!N.getName().empty(), "missing global variable name", &N); AssertDI(!N.getName().empty(), "missing global variable name", &N);
if (auto *V = N.getRawVariable()) { if (auto *V = N.getRawExpr())
AssertDI(isa<ConstantAsMetadata>(V) && AssertDI(isa<DIExpression>(V), "invalid expression location", &N, V);
!isa<Function>(cast<ConstantAsMetadata>(V)->getValue()),
"invalid global variable ref", &N, V);
visitConstantExprsRecursively(cast<ConstantAsMetadata>(V)->getValue());
}
if (auto *Member = N.getRawStaticDataMemberDeclaration()) { if (auto *Member = N.getRawStaticDataMemberDeclaration()) {
AssertDI(isa<DIDerivedType>(Member), AssertDI(isa<DIDerivedType>(Member),
"invalid static data member declaration", &N, Member); "invalid static data member declaration", &N, Member);

View File

@ -465,7 +465,7 @@ class IRLinker {
Error linkModuleFlagsMetadata(); Error linkModuleFlagsMetadata();
void linkGlobalInit(GlobalVariable &Dst, GlobalVariable &Src); void linkGlobalVariable(GlobalVariable &Dst, GlobalVariable &Src);
Error linkFunctionBody(Function &Dst, Function &Src); Error linkFunctionBody(Function &Dst, Function &Src);
void linkAliasBody(GlobalAlias &Dst, GlobalAlias &Src); void linkAliasBody(GlobalAlias &Dst, GlobalAlias &Src);
Error linkGlobalValueBody(GlobalValue &Dst, GlobalValue &Src); Error linkGlobalValueBody(GlobalValue &Dst, GlobalValue &Src);
@ -942,7 +942,9 @@ Expected<Constant *> IRLinker::linkGlobalValueProto(GlobalValue *SGV,
/// Update the initializers in the Dest module now that all globals that may be /// Update the initializers in the Dest module now that all globals that may be
/// referenced are in Dest. /// referenced are in Dest.
void IRLinker::linkGlobalInit(GlobalVariable &Dst, GlobalVariable &Src) { void IRLinker::linkGlobalVariable(GlobalVariable &Dst, GlobalVariable &Src) {
Dst.copyMetadata(&Src, 0);
// Figure out what the initializer looks like in the dest module. // Figure out what the initializer looks like in the dest module.
Mapper.scheduleMapGlobalInitializer(Dst, *Src.getInitializer()); Mapper.scheduleMapGlobalInitializer(Dst, *Src.getInitializer());
} }
@ -985,7 +987,7 @@ Error IRLinker::linkGlobalValueBody(GlobalValue &Dst, GlobalValue &Src) {
if (auto *F = dyn_cast<Function>(&Src)) if (auto *F = dyn_cast<Function>(&Src))
return linkFunctionBody(cast<Function>(Dst), *F); return linkFunctionBody(cast<Function>(Dst), *F);
if (auto *GVar = dyn_cast<GlobalVariable>(&Src)) { if (auto *GVar = dyn_cast<GlobalVariable>(&Src)) {
linkGlobalInit(cast<GlobalVariable>(Dst), *GVar); linkGlobalVariable(cast<GlobalVariable>(Dst), *GVar);
return Error::success(); return Error::success();
} }
linkAliasBody(cast<GlobalAlias>(Dst), cast<GlobalAlias>(Src)); linkAliasBody(cast<GlobalAlias>(Dst), cast<GlobalAlias>(Src));

View File

@ -312,13 +312,14 @@ bool StripDeadDebugInfo::runOnModule(Module &M) {
// replace the current list of potentially dead global variables/functions // replace the current list of potentially dead global variables/functions
// with the live list. // with the live list.
SmallVector<Metadata *, 64> LiveGlobalVariables; SmallVector<Metadata *, 64> LiveGlobalVariables;
SmallVector<Metadata *, 64> LiveSubprograms;
DenseSet<const MDNode *> VisitedSet; DenseSet<const MDNode *> VisitedSet;
std::set<DISubprogram *> LiveSPs; std::set<DIGlobalVariable *> LiveGVs;
for (Function &F : M) { for (GlobalVariable &GV : M.globals()) {
if (DISubprogram *SP = F.getSubprogram()) SmallVector<DIGlobalVariable *, 1> DIs;
LiveSPs.insert(SP); GV.getDebugInfo(DIs);
for (DIGlobalVariable *DI : DIs)
LiveGVs.insert(DI);
} }
for (DICompileUnit *DIC : F.compile_units()) { for (DICompileUnit *DIC : F.compile_units()) {
@ -329,9 +330,8 @@ bool StripDeadDebugInfo::runOnModule(Module &M) {
if (!VisitedSet.insert(DIG).second) if (!VisitedSet.insert(DIG).second)
continue; continue;
// If the global variable referenced by DIG is not null, the global // If a global variable references DIG, the global variable is live.
// variable is live. if (LiveGVs.count(DIG))
if (DIG->getVariable())
LiveGlobalVariables.push_back(DIG); LiveGlobalVariables.push_back(DIG);
else else
GlobalVariableChange = true; GlobalVariableChange = true;
@ -345,7 +345,6 @@ bool StripDeadDebugInfo::runOnModule(Module &M) {
} }
// Reset lists for the next iteration. // Reset lists for the next iteration.
LiveSubprograms.clear();
LiveGlobalVariables.clear(); LiveGlobalVariables.clear();
} }

View File

@ -3,7 +3,7 @@
@foo = global i32 0 @foo = global i32 0
; CHECK: !named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9} ; CHECK: !named = !{!0, !1, !2, !3, !4, !5, !6, !8, !9, !10}
!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9} !named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9}
!0 = !DIFile(filename: "scope.h", directory: "/path/to/dir") !0 = !DIFile(filename: "scope.h", directory: "/path/to/dir")
@ -12,16 +12,17 @@
!3 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed) !3 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!4 = distinct !{} !4 = distinct !{}
; CHECK: !5 = !DIGlobalVariable(name: "foo", linkageName: "foo", scope: !0, file: !2, line: 7, type: !3, isLocal: true, isDefinition: false, variable: i32* @foo) ; CHECK: !5 = !DIGlobalVariable(name: "foo", linkageName: "foo", scope: !0, file: !2, line: 7, type: !3, isLocal: true, isDefinition: false)
!5 = !DIGlobalVariable(name: "foo", linkageName: "foo", scope: !0, !5 = !DIGlobalVariable(name: "foo", linkageName: "foo", scope: !0,
file: !2, line: 7, type: !3, isLocal: true, file: !2, line: 7, type: !3, isLocal: true,
isDefinition: false, variable: i32* @foo) isDefinition: false)
; CHECK: !6 = !DIGlobalVariable(name: "foo", scope: !0, isLocal: false, isDefinition: true) ; CHECK: !6 = !DIGlobalVariable(name: "foo", scope: !0, isLocal: false, isDefinition: true, expr: !7)
!6 = !DIGlobalVariable(name: "foo", scope: !0) ; 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))
!7 = !DICompositeType(tag: DW_TAG_structure_type, name: "Class", size: 8, align: 8) !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) !8 = !DIDerivedType(tag: DW_TAG_member, name: "mem", flags: DIFlagStaticMember, scope: !7, baseType: !3)
; CHECK: !9 = !DIGlobalVariable(name: "mem", scope: !0, isLocal: false, isDefinition: true, declaration: !8) ; CHECK: !10 = !DIGlobalVariable(name: "mem", scope: !0, isLocal: false, isDefinition: true, declaration: !9)
!9 = !DIGlobalVariable(name: "mem", scope: !0, declaration: !8) !9 = !DIGlobalVariable(name: "mem", scope: !0, declaration: !8)

View File

@ -0,0 +1,8 @@
; 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)
!named = !{!0}
!0 = distinct !DIGlobalVariable(name: "a", variable: i32 42)

Binary file not shown.

View File

@ -4,20 +4,22 @@
; Establish a stable order. ; Establish a stable order.
!named = !{!0, !1, !2, !3, !4, !6, !7, !8, !9, !10, !11, !12, !13, !14, !15, !16} !named = !{!0, !1, !2, !3, !4, !6, !7, !8, !9, !10, !11, !12, !13, !14, !15, !16}
; CHECK: !0 = !DIFile(filename: "path/to/file", directory: "/path/to/dir") ; CHECK: @G1 = global i32 0, !dbg !0
; CHECK: !0 = !DIGlobalVariable(name: "G",{{.*}} type: !1,
; CHECK-NEXT: !1 = !DICompositeType(tag: DW_TAG_structure_type, name: "T1"{{.*}}, identifier: "T1") ; CHECK-NEXT: !1 = !DICompositeType(tag: DW_TAG_structure_type, name: "T1"{{.*}}, identifier: "T1")
; CHECK-NEXT: !2 = !DICompositeType(tag: DW_TAG_structure_type, name: "T2", scope: !1{{.*}}, baseType: !1, vtableHolder: !1, identifier: "T2") ; CHECK-NEXT: !2 = !DIFile(filename: "path/to/file", directory: "/path/to/dir")
; CHECK-NEXT: !3 = !DIDerivedType(tag: DW_TAG_member, name: "M1", scope: !1{{.*}}, baseType: !2) ; CHECK-NEXT: !3 = !DICompositeType(tag: DW_TAG_structure_type, name: "T2", scope: !1{{.*}}, baseType: !1, vtableHolder: !1, identifier: "T2")
; CHECK-NEXT: !4 = !DISubroutineType(types: !5) ; CHECK-NEXT: !4 = !DIDerivedType(tag: DW_TAG_member, name: "M1", scope: !1{{.*}}, baseType: !3)
; CHECK-NEXT: !5 = !{!1, !2} ; CHECK-NEXT: !5 = !DISubroutineType(types: !6)
; CHECK-NEXT: !6 = !DISubprogram(scope: !1,{{.*}} containingType: !1{{[,)]}} ; CHECK-NEXT: !6 = !{!1, !3}
; CHECK-NEXT: !7 = !DILocalVariable(name: "V1", scope: !6, type: !2) ; CHECK-NEXT: !7 = !DISubprogram(scope: !1,{{.*}} containingType: !1{{[,)]}}
; CHECK-NEXT: !8 = !DIObjCProperty(name: "P1", type: !1) ; CHECK-NEXT: !8 = !DILocalVariable(name: "V1", scope: !7, type: !3)
; CHECK-NEXT: !9 = !DITemplateTypeParameter(type: !1) ; CHECK-NEXT: !9 = !DIObjCProperty(name: "P1", type: !1)
; CHECK-NEXT: !10 = !DIGlobalVariable(name: "G",{{.*}} type: !1,{{.*}} variable: i32* @G1) ; CHECK-NEXT: !10 = !DITemplateTypeParameter(type: !1)
; CHECK-NEXT: !11 = !DITemplateValueParameter(type: !1, value: i32* @G1) ; 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: !12 = !DIImportedEntity(tag: DW_TAG_imported_module, name: "T2", scope: !2, entity: !1)
; CHECK-NEXT: !13 = !DICompositeType(tag: DW_TAG_structure_type, name: "T3", file: !0, elements: !14, identifier: "T3") ; CHECK-NEXT: !13 = !DICompositeType(tag: DW_TAG_structure_type, name: "T3", file: !2, elements: !14, identifier: "T3")
; CHECK-NEXT: !14 = !{!15} ; CHECK-NEXT: !14 = !{!15}
; CHECK-NEXT: !15 = !DISubprogram(scope: !13, ; CHECK-NEXT: !15 = !DISubprogram(scope: !13,
; CHECK-NEXT: !16 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type,{{.*}} extraData: !13) ; CHECK-NEXT: !16 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type,{{.*}} extraData: !13)

View File

@ -3,7 +3,7 @@
target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:64:64-v128:128:128-a0:0:32-n32" target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:64:64-v128:128:128-a0:0:32-n32"
target triple = "thumbv7-apple-darwin3.0.0-iphoneos" target triple = "thumbv7-apple-darwin3.0.0-iphoneos"
@length = common global i32 0, align 4 ; <i32*> [#uses=1] @length = common global i32 0, align 4, !dbg !14 ; <i32*> [#uses=1]
define void @x0(i8* nocapture %buf, i32 %nbytes) nounwind optsize { define void @x0(i8* nocapture %buf, i32 %nbytes) nounwind optsize {
entry: entry:
@ -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) !11 = distinct !DILexicalBlock(line: 5, column: 1, file: !26, scope: !1)
!12 = !DILocalVariable(name: "c", line: 7, scope: !11, file: !2, type: !13) !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) !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, variable: i32* @length) !14 = !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) !15 = !DILocation(line: 4, column: 24, scope: !1)
!16 = !DILocation(line: 4, column: 43, scope: !1) !16 = !DILocation(line: 4, column: 43, scope: !1)
!17 = !DILocation(line: 9, column: 2, scope: !11) !17 = !DILocation(line: 9, column: 2, scope: !11)

View File

@ -3,11 +3,11 @@
target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32" target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32"
target triple = "thumbv7-apple-darwin10" target triple = "thumbv7-apple-darwin10"
@x1 = internal global i8 1, align 1 @x1 = internal global i8 1, align 1, !dbg !13
@x2 = internal global i8 1, align 1 @x2 = internal global i8 1, align 1, !dbg !14
@x3 = internal global i8 1, align 1 @x3 = internal global i8 1, align 1, !dbg !15
@x4 = internal global i8 1, align 1 @x4 = internal global i8 1, align 1, !dbg !16
@x5 = global i8 1, align 1 @x5 = global i8 1, align 1, !dbg !17
; Check debug info output for merged global. ; Check debug info output for merged global.
; DW_AT_location ; DW_AT_location
@ -21,12 +21,12 @@ target triple = "thumbv7-apple-darwin10"
; CHECK-NOT: DW_TAG ; CHECK-NOT: DW_TAG
; CHECK: DW_AT_name {{.*}} "x1" ; CHECK: DW_AT_name {{.*}} "x1"
; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK-NOT: {{DW_TAG|NULL}}
; CHECK: DW_AT_location [DW_FORM_exprloc] (<0x8> 03 [[ADDR:.. .. .. ..]] 10 00 22 ) ; CHECK: DW_AT_location [DW_FORM_exprloc] (<0x5> 03 [[ADDR:.. .. .. ..]] )
; CHECK: DW_TAG_variable ; CHECK: DW_TAG_variable
; CHECK-NOT: DW_TAG ; CHECK-NOT: DW_TAG
; CHECK: DW_AT_name {{.*}} "x2" ; CHECK: DW_AT_name {{.*}} "x2"
; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK-NOT: {{DW_TAG|NULL}}
; CHECK: DW_AT_location [DW_FORM_exprloc] (<0x8> 03 [[ADDR]] 10 01 22 ) ; CHECK: DW_AT_location [DW_FORM_exprloc] (<0x7> 03 [[ADDR]] 23 01 )
define zeroext i8 @get1(i8 zeroext %a) nounwind optsize !dbg !0 { define zeroext i8 @get1(i8 zeroext %a) nounwind optsize !dbg !0 {
entry: entry:
@ -91,11 +91,11 @@ entry:
!10 = !DILocalVariable(name: "a", line: 4, arg: 1, scope: !0, file: !1, type: !5) !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) !11 = !DILocalVariable(name: "b", line: 4, scope: !12, file: !1, type: !5)
!12 = distinct !DILexicalBlock(line: 4, column: 0, file: !47, scope: !0) !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, variable: i8* @x1) !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, variable: i8* @x2) !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, variable: i8* @x3) !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, variable: i8* @x4) !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, variable: i8* @x5) !17 = !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) !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) !19 = !DILocalVariable(name: "b", line: 7, scope: !20, file: !1, type: !5)
!20 = distinct !DILexicalBlock(line: 7, column: 0, file: !47, scope: !6) !20 = distinct !DILexicalBlock(line: 7, column: 0, file: !47, scope: !6)

View File

@ -12,18 +12,18 @@
; CHECK-NOT: DW_TAG ; CHECK-NOT: DW_TAG
; CHECK: DW_AT_name {{.*}} "x1" ; CHECK: DW_AT_name {{.*}} "x1"
; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK-NOT: {{DW_TAG|NULL}}
; CHECK: DW_AT_location [DW_FORM_exprloc] (<0x8> 03 [[ADDR:.. .. .. ..]] 10 00 22 ) ; CHECK: DW_AT_location [DW_FORM_exprloc] (<0x5> 03 [[ADDR:.. .. .. ..]] )
; CHECK: DW_TAG_variable ; CHECK: DW_TAG_variable
; CHECK-NOT: DW_TAG ; CHECK-NOT: DW_TAG
; CHECK: DW_AT_name {{.*}} "x2" ; CHECK: DW_AT_name {{.*}} "x2"
; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK-NOT: {{DW_TAG|NULL}}
; CHECK: DW_AT_location [DW_FORM_exprloc] (<0x8> 03 [[ADDR]] 10 04 22 ) ; CHECK: DW_AT_location [DW_FORM_exprloc] (<0x7> 03 [[ADDR]] 23 04 )
target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32" target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32"
target triple = "thumbv7-apple-macosx10.7.0" target triple = "thumbv7-apple-macosx10.7.0"
@x1 = internal unnamed_addr global i32 1, align 4 @x1 = internal unnamed_addr global i32 1, align 4, !dbg !25
@x2 = internal unnamed_addr global i32 2, align 4 @x2 = internal unnamed_addr global i32 2, align 4, !dbg !26
@x3 = internal unnamed_addr global i32 3, align 4 @x3 = internal unnamed_addr global i32 3, align 4
@x4 = internal unnamed_addr global i32 4, align 4 @x4 = internal unnamed_addr global i32 4, align 4
@x5 = global i32 0, align 4 @x5 = global i32 0, align 4
@ -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) !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) !20 = !DILocalVariable(name: "b", line: 14, scope: !21, file: !2, type: !5)
!21 = distinct !DILexicalBlock(line: 14, column: 19, file: !47, scope: !8) !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, variable: i32* @x1) !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, variable: i32* @x2) !26 = !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) !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) !28 = !DILocalVariable(name: "b", line: 17, scope: !29, file: !2, type: !5)
!29 = distinct !DILexicalBlock(line: 17, column: 19, file: !47, scope: !9) !29 = distinct !DILexicalBlock(line: 17, column: 19, file: !47, scope: !9)

View File

@ -9,10 +9,10 @@
target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32" target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32"
target triple = "thumbv7-apple-ios3.0.0" target triple = "thumbv7-apple-ios3.0.0"
@c = common global i32 0, align 4 @c = common global i32 0, align 4, !dbg !19
@b = common global i32 0, align 4 @b = common global i32 0, align 4, !dbg !18
@a = common global i64 0, align 8 @a = common global i64 0, align 8, !dbg !16
@d = common global i32 0, align 4 @d = common global i32 0, align 4, !dbg !20
; Function Attrs: nounwind ssp ; Function Attrs: nounwind ssp
define i32 @pr16110() #0 !dbg !4 { define i32 @pr16110() #0 !dbg !4 {
@ -94,11 +94,11 @@ attributes #3 = { nounwind }
!13 = distinct !DILexicalBlock(line: 12, column: 0, file: !1, scope: !4) !13 = distinct !DILexicalBlock(line: 12, column: 0, file: !1, scope: !4)
!14 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 32, align: 32, baseType: !8) !14 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 32, align: 32, baseType: !8)
!15 = !{!16, !18, !19, !20} !15 = !{!16, !18, !19, !20}
!16 = !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !17, variable: i64* @a) !16 = !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) !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, variable: i32* @b) !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, variable: i32* @c) !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, variable: i32* @d) !20 = !DIGlobalVariable(name: "d", line: 4, isLocal: false, isDefinition: true, scope: null, file: !5, type: !8)
!21 = !DILocation(line: 10, scope: !22) !21 = !DILocation(line: 10, scope: !22)
!22 = distinct !DILexicalBlock(line: 10, column: 0, file: !1, scope: !4) !22 = distinct !DILexicalBlock(line: 10, column: 0, file: !1, scope: !4)
!26 = !DILocation(line: 12, scope: !13) !26 = !DILocation(line: 12, scope: !13)

View File

@ -7,7 +7,7 @@ target triple = "nvptx64-nvidia-cuda"
; Generic space variables should be converted to global space AKA addrspace(1). ; Generic space variables should be converted to global space AKA addrspace(1).
; CHECK-DAG: @static_var = {{.*}}addrspace(1) ; CHECK-DAG: @static_var = {{.*}}addrspace(1)
@static_var = externally_initialized global i8 0, align 1 @static_var = externally_initialized global i8 0, align 1, !dbg !4
; CHECK-DAG: @.str = {{.*}}addrspace(1) ; CHECK-DAG: @.str = {{.*}}addrspace(1)
@.str = private unnamed_addr constant [4 x i8] c"XXX\00", align 1 @.str = private unnamed_addr constant [4 x i8] c"XXX\00", align 1
@ -43,12 +43,11 @@ declare void @extfunc(i8 signext)
; Find list of global variables and make sure it's the one used by DICompileUnit ; Find list of global variables and make sure it's the one used by DICompileUnit
; CHECK: [[GLOBALSNODE]] = !{[[GVNODE:![0-9]+]]} ; CHECK: [[GLOBALSNODE]] = !{[[GVNODE:![0-9]+]]}
!4 = distinct !DIGlobalVariable(name: "static_var", scope: !0, file: !1, line: 2, type: !5, isLocal: false, !4 = distinct !DIGlobalVariable(name: "static_var", scope: !0, file: !1, line: 2, type: !5, isLocal: false,
isDefinition: true, variable: i8* @static_var) isDefinition: true)
; Debug info must also be updated to reflect new address space. ; Debug info must also be updated to reflect new address space.
; CHECK: [[GVNODE]] = distinct !DIGlobalVariable(name: "static_var" ; CHECK: [[GVNODE]] = distinct !DIGlobalVariable(name: "static_var"
; CHECK-SAME: scope: [[CUNODE]] ; CHECK-SAME: scope: [[CUNODE]]
; CHECK-SAME: type: [[TYPENODE:![0-9]+]] ; CHECK-SAME: type: [[TYPENODE:![0-9]+]]
; CHECK-SAME: variable: i8* addrspacecast (i8 addrspace(1)* @static_var to i8*)
!5 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char) !5 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
; CHECK: [[TYPENODE]] = !DIBasicType(name: "char" ; CHECK: [[TYPENODE]] = !DIBasicType(name: "char"
!6 = !{i32 2, !"Dwarf Version", i32 4} !6 = !{i32 2, !"Dwarf Version", i32 4}

View File

@ -6,7 +6,7 @@
target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-v128:128:128-n32:64" target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-v128:128:128-n32:64"
target triple = "powerpc64-unknown-linux-gnu" target triple = "powerpc64-unknown-linux-gnu"
@grid_points = external global [3 x i32], align 4 @grid_points = external global [3 x i32], align 4, !dbg !299
; Function Attrs: nounwind ; Function Attrs: nounwind
define fastcc void @compute_rhs() #0 !dbg !114 { define fastcc void @compute_rhs() #0 !dbg !114 {
@ -352,7 +352,7 @@ attributes #1 = { nounwind readnone }
!296 = !DILocalVariable(name: "j", line: 907, scope: !293, file: !5, type: !8) !296 = !DILocalVariable(name: "j", line: 907, scope: !293, file: !5, type: !8)
!297 = !DILocalVariable(name: "k", 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} !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, variable: [3 x i32]* @grid_points) !299 = !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") !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"} !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) !302 = !DICompositeType(tag: DW_TAG_array_type, size: 96, align: 32, baseType: !8, elements: !303)

View File

@ -3,7 +3,7 @@
; Verify that we no longer crash in VSX swap removal when debug values ; Verify that we no longer crash in VSX swap removal when debug values
; are in the code stream. ; are in the code stream.
@php_intpow10.powers = external unnamed_addr constant [23 x double], align 8 @php_intpow10.powers = external unnamed_addr constant [23 x double], align 8, !dbg !24
; Function Attrs: nounwind ; Function Attrs: nounwind
define double @_php_math_round(double %value, i32 signext %places, i32 signext %mode) #0 !dbg !6 { define double @_php_math_round(double %value, i32 signext %places, i32 signext %mode) #0 !dbg !6 {
@ -79,7 +79,7 @@ attributes #3 = { nounwind }
!21 = !{!22} !21 = !{!22}
!22 = !DILocalVariable(name: "power", arg: 1, scope: !18, file: !1, line: 1, type: !9) !22 = !DILocalVariable(name: "power", arg: 1, scope: !18, file: !1, line: 1, type: !9)
!23 = !{!24} !23 = !{!24}
!24 = !DIGlobalVariable(name: "powers", scope: !18, file: !1, line: 3, type: !25, isLocal: true, isDefinition: true, variable: [23 x double]* @php_intpow10.powers) !24 = !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) !25 = !DICompositeType(tag: DW_TAG_array_type, baseType: !26, size: 1472, align: 64, elements: !27)
!26 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !4) !26 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !4)
!27 = !{!28} !27 = !{!28}

View File

@ -1,7 +1,7 @@
; RUN: llc < %s -mcpu=generic -mtriple=i386-apple-darwin -no-integrated-as ; RUN: llc < %s -mcpu=generic -mtriple=i386-apple-darwin -no-integrated-as
@g1 = global double 0.000000e+00, align 8 @g1 = global double 0.000000e+00, align 8, !dbg !22
@g2 = global i32 0, align 4 @g2 = global i32 0, align 4, !dbg !23
define void @_Z16fpuop_arithmeticjj(i32, i32) !dbg !4 { define void @_Z16fpuop_arithmeticjj(i32, i32) !dbg !4 {
entry: entry:
@ -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) !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) !20 = !DILocalVariable(name: "value", line: 16, scope: !4, file: !6, type: !14)
!21 = !{!22, !23} !21 = !{!22, !23}
!22 = !DIGlobalVariable(name: "g1", line: 5, isLocal: false, isDefinition: true, scope: null, file: !6, type: !14, variable: double* @g1) !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, variable: i32* @g2) !23 = !DIGlobalVariable(name: "g2", line: 6, isLocal: false, isDefinition: true, scope: null, file: !6, type: !19)
!24 = !{i32 2, !"Dwarf Version", i32 2} !24 = !{i32 2, !"Dwarf Version", i32 2}
!25 = !{i32 2, !"Debug Info Version", i32 3} !25 = !{i32 2, !"Debug Info Version", i32 3}

View File

@ -22,7 +22,7 @@
%class.C = type { i8 } %class.C = type { i8 }
@argc = global i8 0, align 1 @argc = global i8 0, align 1, !dbg !21
declare i32 @test_function(%class.C*, i8 signext, i8 signext, i8 signext, ...) declare i32 @test_function(%class.C*, i8 signext, i8 signext, i8 signext, ...)
@ -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) !18 = !DILocalVariable(name: "c", line: 7, scope: !13, file: !14, type: !4)
!19 = !DILocalVariable(name: "lc", line: 8, scope: !13, file: !14, type: !11) !19 = !DILocalVariable(name: "lc", line: 8, scope: !13, file: !14, type: !11)
!20 = !{!21} !20 = !{!21}
!21 = !DIGlobalVariable(name: "argc", line: 1, isLocal: false, isDefinition: true, scope: null, file: !14, type: !11, variable: i8* @argc) !21 = !DIGlobalVariable(name: "argc", line: 1, isLocal: false, isDefinition: true, scope: null, file: !14, type: !11)
!22 = !{i32 2, !"Dwarf Version", i32 4} !22 = !{i32 2, !"Dwarf Version", i32 4}
!23 = !{i32 2, !"Debug Info Version", i32 3} !23 = !{i32 2, !"Debug Info Version", i32 3}
!25 = !DILocation(line: 8, column: 3, scope: !13) !25 = !DILocation(line: 8, column: 3, scope: !13)

View File

@ -3,7 +3,7 @@
target datalayout = "E-m:e-i64:64-i128:128-n32:64-S128" target datalayout = "E-m:e-i64:64-i128:128-n32:64-S128"
target triple = "aarch64_be--none-eabi" target triple = "aarch64_be--none-eabi"
@a = common global i32 0, align 4 @a = common global i32 0, align 4, !dbg !4
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!8, !9} !llvm.module.flags = !{!8, !9}
@ -13,7 +13,7 @@ target triple = "aarch64_be--none-eabi"
!1 = !DIFile(filename: "-", directory: "/work/validation") !1 = !DIFile(filename: "-", directory: "/work/validation")
!2 = !{} !2 = !{}
!3 = !{!4} !3 = !{!4}
!4 = !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !7, variable: i32* @a) !4 = !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !7)
!5 = !DIFile(filename: "<stdin>", directory: "/work/validation") !5 = !DIFile(filename: "<stdin>", directory: "/work/validation")
!6 = !{!"<stdin>", !"/work/validation"} !6 = !{!"<stdin>", !"/work/validation"}
!7 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed) !7 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)

View File

@ -48,7 +48,7 @@ target triple = "aarch64_be--linux-gnu"
%struct.bitfield = type <{ i8, [3 x i8], i64 }> %struct.bitfield = type <{ i8, [3 x i8], i64 }>
@b = common global %struct.bitfield zeroinitializer, align 4 @b = common global %struct.bitfield zeroinitializer, align 4, !dbg !4
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!13, !14, !15} !llvm.module.flags = !{!13, !14, !15}
@ -58,7 +58,7 @@ target triple = "aarch64_be--linux-gnu"
!1 = !DIFile(filename: "bitfields.c", directory: "/") !1 = !DIFile(filename: "bitfields.c", directory: "/")
!2 = !{} !2 = !{}
!3 = !{!4} !3 = !{!4}
!4 = !DIGlobalVariable(name: "b", scope: !0, file: !5, line: 8, type: !6, isLocal: false, isDefinition: true, variable: %struct.bitfield* @b) !4 = !DIGlobalVariable(name: "b", scope: !0, file: !5, line: 8, type: !6, isLocal: false, isDefinition: true)
!5 = !DIFile(filename: "bitfields.c", directory: "/") !5 = !DIFile(filename: "bitfields.c", directory: "/")
!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "bitfield", file: !5, line: 1, size: 96, align: 32, elements: !7) !6 = !DICompositeType(tag: DW_TAG_structure_type, name: "bitfield", file: !5, line: 1, size: 96, align: 32, elements: !7)
!7 = !{!8, !10, !11, !12} !7 = !{!8, !10, !11, !12}

View File

@ -39,8 +39,8 @@ target triple = "aarch64-apple-ios"
%struct.A = type { i8, i8*, i8 } %struct.A = type { i8, i8*, i8 }
%struct.B = type { i8 } %struct.B = type { i8 }
@a = global i64 0, align 8 @a = global i64 0, align 8, !dbg !41
@b = global i32* null, align 8 @b = global i32* null, align 8, !dbg !42
define void @_Z3f131A(%struct.A* nocapture readonly %p1) #0 !dbg !25 { define void @_Z3f131A(%struct.A* nocapture readonly %p1) #0 !dbg !25 {
entry: entry:
@ -200,8 +200,8 @@ attributes #5 = { builtin }
!38 = !DILocalVariable(name: "c", line: 19, scope: !34, file: !26, type: !4) !38 = !DILocalVariable(name: "c", line: 19, scope: !34, file: !26, type: !4)
!39 = !DILocalVariable(name: "d", line: 20, scope: !34, file: !26, type: !14) !39 = !DILocalVariable(name: "d", line: 20, scope: !34, file: !26, type: !14)
!40 = !{!41, !42} !40 = !{!41, !42}
!41 = !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !26, type: !20, variable: i64* @a) !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, variable: i32** @b) !42 = !DIGlobalVariable(name: "b", line: 7, isLocal: false, isDefinition: true, scope: null, file: !26, type: !12)
!43 = !{i32 2, !"Dwarf Version", i32 2} !43 = !{i32 2, !"Dwarf Version", i32 2}
!44 = !{i32 2, !"Debug Info Version", i32 3} !44 = !{i32 2, !"Debug Info Version", i32 3}
!45 = !{!"clang version 3.7.0 "} !45 = !{!"clang version 3.7.0 "}

View File

@ -12,7 +12,7 @@ target datalayout = "E-m:e-p:32:32-i64:64-v128:64:128-n32-S64"
%struct.S = type { i24 } %struct.S = type { i24 }
@s = common global %struct.S zeroinitializer, align 4 @s = common global %struct.S zeroinitializer, align 4, !dbg !4
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!12, !13, !14} !llvm.module.flags = !{!12, !13, !14}
@ -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") !1 = !DIFile(filename: "bitfield.c", directory: "/Volumes/Data/llvm")
!2 = !{} !2 = !{}
!3 = !{!4} !3 = !{!4}
!4 = distinct !DIGlobalVariable(name: "s", scope: !0, file: !1, line: 6, type: !5, isLocal: false, isDefinition: true, variable: %struct.S* @s) !4 = distinct !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, align: 32, elements: !6) !5 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S", file: !1, line: 1, size: 32, align: 32, elements: !6)
!6 = !{!7, !9, !10, !11} !6 = !{!7, !9, !10, !11}
; CHECK: DW_TAG_member ; CHECK: DW_TAG_member

View File

@ -20,7 +20,7 @@ target triple = "thumbv7-apple-ios"
%struct.anon = type { i8, [5 x i8] } %struct.anon = type { i8, [5 x i8] }
@a = common global %struct.anon zeroinitializer, align 1 @a = common global %struct.anon zeroinitializer, align 1, !dbg !4
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!11, !12, !13, !14, !15} !llvm.module.flags = !{!11, !12, !13, !14, !15}
@ -30,7 +30,7 @@ target triple = "thumbv7-apple-ios"
!1 = !DIFile(filename: "test.i", directory: "/") !1 = !DIFile(filename: "test.i", directory: "/")
!2 = !{} !2 = !{}
!3 = !{!4} !3 = !{!4}
!4 = !DIGlobalVariable(name: "a", scope: !0, file: !1, line: 5, type: !5, isLocal: false, isDefinition: true, variable: %struct.anon* @a) !4 = !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) !5 = !DICompositeType(tag: DW_TAG_structure_type, file: !1, line: 1, size: 48, align: 8, elements: !6)
!6 = !{!7, !9} !6 = !{!7, !9}
!7 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !5, file: !1, line: 2, baseType: !8, size: 8, align: 8) !7 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !5, file: !1, line: 2, baseType: !8, size: 8, align: 8)

View File

@ -15,8 +15,8 @@
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
target triple = "armv7--linux-gnueabihf" target triple = "armv7--linux-gnueabihf"
@ch = common global i8 0, align 1 @ch = common global i8 0, align 1, !dbg !8
@b = common global i32 0, align 4 @b = common global i32 0, align 4, !dbg !10
; Function Attrs: nounwind ; Function Attrs: nounwind
define void @proc() #0 !dbg !4 { define void @proc() #0 !dbg !4 {
@ -39,9 +39,9 @@ attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"=
!5 = !DISubroutineType(types: !6) !5 = !DISubroutineType(types: !6)
!6 = !{null} !6 = !{null}
!7 = !{!8, !10} !7 = !{!8, !10}
!8 = !DIGlobalVariable(name: "ch", scope: !0, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true, variable: i8* @ch) !8 = !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) !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, variable: i32* @b) !10 = !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) !11 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!12 = !{i32 2, !"Dwarf Version", i32 4} !12 = !{i32 2, !"Dwarf Version", i32 4}
!13 = !{i32 2, !"Debug Info Version", i32 3} !13 = !{i32 2, !"Debug Info Version", i32 3}

View File

@ -6,7 +6,7 @@
; Generated with clang with source ; Generated with clang with source
; __thread int x; ; __thread int x;
@x = thread_local global i32 0, align 4 @x = thread_local global i32 0, align 4, !dbg !4
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!7, !8} !llvm.module.flags = !{!7, !8}
@ -26,7 +26,7 @@
!1 = !DIFile(filename: "tls.c", directory: "/tmp") !1 = !DIFile(filename: "tls.c", directory: "/tmp")
!2 = !{} !2 = !{}
!3 = !{!4} !3 = !{!4}
!4 = !DIGlobalVariable(name: "x", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6, variable: i32* @x) !4 = !DIGlobalVariable(name: "x", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6)
!5 = !DIFile(filename: "tls.c", directory: "/tmp") !5 = !DIFile(filename: "tls.c", directory: "/tmp")
!6 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed) !6 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!7 = !{i32 2, !"Dwarf Version", i32 4} !7 = !{i32 2, !"Dwarf Version", i32 4}

View File

@ -36,7 +36,7 @@ target triple = "i686-pc-windows-msvc18.0.0"
%struct.S = type { i32, %struct.anon } %struct.S = type { i32, %struct.anon }
%struct.anon = type { i32 } %struct.anon = type { i32 }
@s = common global %struct.S zeroinitializer, align 4 @s = common global %struct.S zeroinitializer, align 4, !dbg !4
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!14, !15} !llvm.module.flags = !{!14, !15}
@ -46,7 +46,7 @@ target triple = "i686-pc-windows-msvc18.0.0"
!1 = !DIFile(filename: "-", directory: "/usr/local/google/home/majnemer/llvm/src") !1 = !DIFile(filename: "-", directory: "/usr/local/google/home/majnemer/llvm/src")
!2 = !{} !2 = !{}
!3 = !{!4} !3 = !{!4}
!4 = distinct !DIGlobalVariable(name: "s", scope: !0, file: !5, line: 5, type: !6, isLocal: false, isDefinition: true, variable: %struct.S* @s) !4 = distinct !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") !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) !6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S", file: !5, line: 2, size: 64, align: 32, elements: !7)
!7 = !{!8, !10} !7 = !{!8, !10}

View File

@ -57,7 +57,7 @@ source_filename = "t.cpp"
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc19.0.23918" target triple = "x86_64-pc-windows-msvc19.0.23918"
@"\01?x@@3W4BigThing@@A" = global i32 0, align 4 @"\01?x@@3W4BigThing@@A" = global i32 0, align 4, !dbg !5703
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!5704, !5705, !5706} !llvm.module.flags = !{!5704, !5705, !5706}
@ -5766,7 +5766,7 @@ target triple = "x86_64-pc-windows-msvc19.0.23918"
!5700 = !DIEnumerator(name: "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE5695", value: 5694) !5700 = !DIEnumerator(name: "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE5695", value: 5694)
!5701 = !DIEnumerator(name: "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE5696", value: 5695) !5701 = !DIEnumerator(name: "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE5696", value: 5695)
!5702 = !{!5703} !5702 = !{!5703}
!5703 = distinct !DIGlobalVariable(name: "x", linkageName: "\01?x@@3W4BigThing@@A", scope: !0, file: !1, line: 5698, type: !3, isLocal: false, isDefinition: true, variable: i32* @"\01?x@@3W4BigThing@@A") !5703 = distinct !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} !5704 = !{i32 2, !"CodeView", i32 1}
!5705 = !{i32 2, !"Debug Info Version", i32 3} !5705 = !{i32 2, !"Debug Info Version", i32 3}
!5706 = !{i32 1, !"PIC Level", i32 2} !5706 = !{i32 1, !"PIC Level", i32 2}

View File

@ -181,9 +181,9 @@ target triple = "x86_64-pc-windows-msvc18.0.0"
%struct.anon = type <{ i8, i16 }> %struct.anon = type <{ i8, i16 }>
%struct.S2 = type { i32 } %struct.S2 = type { i32 }
@s0 = common global %struct.S0 zeroinitializer, align 1 @s0 = common global %struct.S0 zeroinitializer, align 1, !dbg !4
@s1 = common global %struct.S1 zeroinitializer, align 1 @s1 = common global %struct.S1 zeroinitializer, align 1, !dbg !10
@s2 = common global %struct.S2 zeroinitializer, align 1 @s2 = common global %struct.S2 zeroinitializer, align 1, !dbg !29
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!33, !34, !35} !llvm.module.flags = !{!33, !34, !35}
@ -193,13 +193,13 @@ target triple = "x86_64-pc-windows-msvc18.0.0"
!1 = !DIFile(filename: "-", directory: "/usr/local/google/home/majnemer/llvm/src") !1 = !DIFile(filename: "-", directory: "/usr/local/google/home/majnemer/llvm/src")
!2 = !{} !2 = !{}
!3 = !{!4, !10, !29} !3 = !{!4, !10, !29}
!4 = distinct !DIGlobalVariable(name: "s0", scope: !0, file: !5, line: 7, type: !6, isLocal: false, isDefinition: true, variable: %struct.S0* @s0) !4 = distinct !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") !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, align: 8, elements: !7) !6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S0", file: !5, line: 3, size: 24, align: 8, elements: !7)
!7 = !{!8} !7 = !{!8}
!8 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !6, file: !5, line: 6, baseType: !9, size: 8, align: 16, offset: 16, flags: DIFlagBitField, extraData: i64 8) !8 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !6, file: !5, line: 6, baseType: !9, size: 8, align: 16, offset: 16, flags: DIFlagBitField, extraData: i64 8)
!9 = !DIBasicType(name: "short", size: 16, align: 16, encoding: DW_ATE_signed) !9 = !DIBasicType(name: "short", size: 16, align: 16, encoding: DW_ATE_signed)
!10 = distinct !DIGlobalVariable(name: "s1", scope: !0, file: !5, line: 18, type: !11, isLocal: false, isDefinition: true, variable: %struct.S1* @s1) !10 = distinct !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, align: 8, elements: !12) !11 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S1", file: !5, line: 10, size: 128, align: 8, elements: !12)
!12 = !{!13, !18, !19, !21, !22, !23, !28} !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, align: 8) !13 = !DIDerivedType(tag: DW_TAG_member, name: "x1", scope: !11, file: !5, line: 11, baseType: !14, size: 16, align: 8)
@ -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, align: 8) !26 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !24, file: !5, line: 16, baseType: !15, size: 8, align: 8)
!27 = !DIDerivedType(tag: DW_TAG_member, name: "s", scope: !24, file: !5, line: 16, baseType: !9, size: 16, align: 16, offset: 8) !27 = !DIDerivedType(tag: DW_TAG_member, name: "s", scope: !24, file: !5, line: 16, baseType: !9, size: 16, align: 16, offset: 8)
!28 = !DIDerivedType(tag: DW_TAG_member, name: "u", scope: !11, file: !5, line: 17, baseType: !9, size: 3, align: 16, offset: 112, flags: DIFlagBitField, extraData: i64 112) !28 = !DIDerivedType(tag: DW_TAG_member, name: "u", scope: !11, file: !5, line: 17, baseType: !9, size: 3, align: 16, offset: 112, flags: DIFlagBitField, extraData: i64 112)
!29 = distinct !DIGlobalVariable(name: "s2", scope: !0, file: !5, line: 24, type: !30, isLocal: false, isDefinition: true, variable: %struct.S2* @s2) !29 = distinct !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, align: 8, elements: !31) !30 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S2", file: !5, line: 21, size: 32, align: 8, elements: !31)
!31 = !{!32} !31 = !{!32}
!32 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !30, file: !5, line: 23, baseType: !20, size: 1, align: 32, flags: DIFlagBitField, extraData: i64 0) !32 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !30, file: !5, line: 23, baseType: !20, size: 1, align: 32, flags: DIFlagBitField, extraData: i64 0)

View File

@ -27,7 +27,7 @@
target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32" target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
target triple = "i686-pc-windows-msvc18.0.0" target triple = "i686-pc-windows-msvc18.0.0"
@"\01?e@@3W4E@@A" = global i32 0, align 4 @"\01?e@@3W4E@@A" = global i32 0, align 4, !dbg !9
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!10, !11} !llvm.module.flags = !{!10, !11}
@ -42,7 +42,7 @@ target triple = "i686-pc-windows-msvc18.0.0"
!6 = !{!7} !6 = !{!7}
!7 = !DIEnumerator(name: "BLAH", value: 0) !7 = !DIEnumerator(name: "BLAH", value: 0)
!8 = !{!9} !8 = !{!9}
!9 = distinct !DIGlobalVariable(name: "e", linkageName: "\01?e@@3W4E@@A", scope: !0, file: !4, line: 2, type: !3, isLocal: false, isDefinition: true, variable: i32* @"\01?e@@3W4E@@A") !9 = distinct !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} !10 = !{i32 2, !"CodeView", i32 1}
!11 = !{i32 2, !"Debug Info Version", i32 3} !11 = !{i32 2, !"Debug Info Version", i32 3}
!12 = !{!"clang version 3.9.0 (trunk 272790) (llvm/trunk 272813)"} !12 = !{!"clang version 3.9.0 (trunk 272790) (llvm/trunk 272813)"}

View File

@ -5,7 +5,7 @@
target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32" target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
target triple = "i686-pc-windows-msvc" target triple = "i686-pc-windows-msvc"
@"\01?id@?$numpunct@D@@0HA" = available_externally dllimport global i32 0, align 4 @"\01?id@?$numpunct@D@@0HA" = available_externally dllimport global i32 0, align 4, !dbg !4
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!13, !14} !llvm.module.flags = !{!13, !14}
@ -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") !1 = !DIFile(filename: "/usr/local/google/home/majnemer/Downloads/<stdin>", directory: "/usr/local/google/home/majnemer/llvm/src")
!2 = !{} !2 = !{}
!3 = !{!4} !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, variable: i32* @"\01?id@?$numpunct@D@@0HA", declaration: !7) !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)
!5 = !DIFile(filename: "/usr/local/google/home/majnemer/Downloads/t.ii", directory: "/usr/local/google/home/majnemer/llvm/src") !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) !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) !7 = !DIDerivedType(tag: DW_TAG_member, name: "id", scope: !8, file: !5, line: 2, baseType: !6, flags: DIFlagStaticMember)

View File

@ -15,7 +15,7 @@ source_filename = "t.ii"
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc19.0.0" target triple = "x86_64-pc-windows-msvc19.0.0"
@x = global i32 42 @x = global i32 42, !dbg !6
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!35, !36, !37} !llvm.module.flags = !{!35, !36, !37}
@ -27,7 +27,7 @@ target triple = "x86_64-pc-windows-msvc19.0.0"
!3 = !{!4, !6} !3 = !{!4, !6}
!4 = distinct !DIGlobalVariable(name: "_OptionsStorage", scope: !0, file: !1, line: 3, type: !5, isLocal: true, isDefinition: true) !4 = distinct !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) !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, variable: i32* @x) !6 = distinct !DIGlobalVariable(name: "x", scope: !0, file: !1, line: 4, type: !5, isLocal: true, isDefinition: true)
!35 = !{i32 2, !"CodeView", i32 1} !35 = !{i32 2, !"CodeView", i32 1}
!36 = !{i32 2, !"Debug Info Version", i32 3} !36 = !{i32 2, !"Debug Info Version", i32 3}

View File

@ -117,10 +117,10 @@ target triple = "x86_64-pc-windows-msvc19.0.23918"
$"\01?comdat@?$A@X@@2HB" = comdat any $"\01?comdat@?$A@X@@2HB" = comdat any
@"\01?first@@3HA" = internal global i32 0, align 4 @"\01?first@@3HA" = internal global i32 0, align 4, !dbg !4
@"\01?comdat@?$A@X@@2HB" = linkonce_odr constant i32 3, comdat, align 4 @"\01?comdat@?$A@X@@2HB" = linkonce_odr constant i32 3, comdat, align 4, !dbg !6
@"\01?middle@@3PEBHEB" = thread_local global i32* @"\01?comdat@?$A@X@@2HB", align 8 @"\01?middle@@3PEBHEB" = thread_local global i32* @"\01?comdat@?$A@X@@2HB", align 8, !dbg !13
@"\01?last@@3HA" = global i32 0, align 4 @"\01?last@@3HA" = global i32 0, align 4, !dbg !15
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!16, !17, !18} !llvm.module.flags = !{!16, !17, !18}
@ -130,18 +130,18 @@ $"\01?comdat@?$A@X@@2HB" = comdat any
!1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild") !1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
!2 = !{} !2 = !{}
!3 = !{!4, !6, !13, !15} !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, variable: i32* @"\01?first@@3HA") !4 = distinct !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) !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, variable: i32* @"\01?comdat@?$A@X@@2HB", declaration: !8) !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)
!7 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !5) !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) !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) !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} !10 = !{!8}
!11 = !{!12} !11 = !{!12}
!12 = !DITemplateTypeParameter(name: "T", type: null) !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, variable: i32** @"\01?middle@@3PEBHEB") !13 = distinct !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) !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, variable: i32* @"\01?last@@3HA") !15 = distinct !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} !16 = !{i32 2, !"CodeView", i32 1}
!17 = !{i32 2, !"Debug Info Version", i32 3} !17 = !{i32 2, !"Debug Info Version", i32 3}
!18 = !{i32 1, !"PIC Level", i32 2} !18 = !{i32 1, !"PIC Level", i32 2}

View File

@ -83,7 +83,7 @@ $"\01??_8B@@7B@" = comdat any
$"\01??_8C@@7B@" = comdat any $"\01??_8C@@7B@" = comdat any
@"\01?d@@3UD@@A" = global %struct.D zeroinitializer, align 8 @"\01?d@@3UD@@A" = global %struct.D zeroinitializer, align 8, !dbg !4
@"\01??_8D@@7BB@@@" = linkonce_odr unnamed_addr constant [2 x i32] [i32 0, i32 40], comdat @"\01??_8D@@7BB@@@" = linkonce_odr unnamed_addr constant [2 x i32] [i32 0, i32 40], comdat
@"\01??_8D@@7BC@@@" = linkonce_odr unnamed_addr constant [2 x i32] [i32 0, i32 24], comdat @"\01??_8D@@7BC@@@" = linkonce_odr unnamed_addr constant [2 x i32] [i32 0, i32 24], comdat
@"\01??_7D@@6B@" = linkonce_odr unnamed_addr constant [1 x i8*] [i8* bitcast (void (%struct.D*)* @"\01?f@D@@UEAAXXZ" to i8*)], comdat @"\01??_7D@@6B@" = linkonce_odr unnamed_addr constant [1 x i8*] [i8* bitcast (void (%struct.D*)* @"\01?f@D@@UEAAXXZ" to i8*)], comdat
@ -230,7 +230,7 @@ attributes #4 = { nounwind }
!1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild") !1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
!2 = !{} !2 = !{}
!3 = !{!4} !3 = !{!4}
!4 = distinct !DIGlobalVariable(name: "d", linkageName: "\01?d@@3UD@@A", scope: !0, file: !1, line: 9, type: !5, isLocal: false, isDefinition: true, variable: %struct.D* @"\01?d@@3UD@@A") !4 = distinct !DIGlobalVariable(name: "d", linkageName: "\01?d@@3UD@@A", scope: !0, file: !1, line: 9, type: !5, isLocal: false, isDefinition: true)
!5 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "D", file: !1, line: 4, size: 448, align: 64, elements: !6, vtableHolder: !5, identifier: ".?AUD@@") !5 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "D", file: !1, line: 4, size: 448, align: 64, elements: !6, vtableHolder: !5, identifier: ".?AUD@@")
!6 = !{!7, !21, !27, !28, !29} !6 = !{!7, !21, !27, !28, !29}
!7 = !DIDerivedType(tag: DW_TAG_inheritance, scope: !5, baseType: !8, offset: 64) !7 = !DIDerivedType(tag: DW_TAG_inheritance, scope: !5, baseType: !8, offset: 64)

View File

@ -44,7 +44,7 @@
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc18.0.0" target triple = "x86_64-pc-windows-msvc18.0.0"
@x = common global i32 0, align 4 @x = common global i32 0, align 4, !dbg !9
; Function Attrs: norecurse nounwind uwtable ; Function Attrs: norecurse nounwind uwtable
define void @f() #0 !dbg !4 { define void @f() #0 !dbg !4 {
@ -84,7 +84,7 @@ attributes #0 = { norecurse nounwind uwtable "disable-tail-calls"="false" "less-
!6 = !{null} !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) !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} !8 = !{!9}
!9 = !DIGlobalVariable(name: "x", scope: !0, file: !1, line: 1, type: !10, isLocal: false, isDefinition: true, variable: i32* @x) !9 = !DIGlobalVariable(name: "x", scope: !0, file: !1, line: 1, type: !10, isLocal: false, isDefinition: true)
!10 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !11) !10 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !11)
!11 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed) !11 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!12 = !{i32 2, !"CodeView", i32 1} !12 = !{i32 2, !"CodeView", i32 1}

View File

@ -106,7 +106,7 @@ source_filename = "t.cpp"
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc19.0.24210" target triple = "x86_64-pc-windows-msvc19.0.24210"
@"\01?x@@3HC" = global i32 0, align 4 @"\01?x@@3HC" = global i32 0, align 4, !dbg !4
; Function Attrs: norecurse nounwind uwtable ; Function Attrs: norecurse nounwind uwtable
define i32 @main() local_unnamed_addr #0 !dbg !11 { define i32 @main() local_unnamed_addr #0 !dbg !11 {
@ -140,7 +140,7 @@ attributes #0 = { norecurse nounwind uwtable "disable-tail-calls"="false" "less-
!1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild") !1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
!2 = !{} !2 = !{}
!3 = !{!4} !3 = !{!4}
!4 = distinct !DIGlobalVariable(name: "x", linkageName: "\01?x@@3HC", scope: !0, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true, variable: i32* @"\01?x@@3HC") !4 = distinct !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) !5 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !6)
!6 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed) !6 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!7 = !{i32 2, !"CodeView", i32 1} !7 = !{i32 2, !"CodeView", i32 1}

View File

@ -41,7 +41,7 @@
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc18.0.0" target triple = "x86_64-pc-windows-msvc18.0.0"
@"\01?x@@3HC" = global i32 0, align 4 @"\01?x@@3HC" = global i32 0, align 4, !dbg !14
; Function Attrs: norecurse nounwind uwtable ; Function Attrs: norecurse nounwind uwtable
define i32 @main() #0 !dbg !4 { define i32 @main() #0 !dbg !4 {
@ -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) !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) !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} !13 = !{!14}
!14 = !DIGlobalVariable(name: "x", linkageName: "\01?x@@3HC", scope: !0, file: !1, line: 1, type: !15, isLocal: false, isDefinition: true, variable: i32* @"\01?x@@3HC") !14 = !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) !15 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !7)
!16 = !{i32 2, !"CodeView", i32 1} !16 = !{i32 2, !"CodeView", i32 1}
!17 = !{i32 2, !"Debug Info Version", i32 3} !17 = !{i32 2, !"Debug Info Version", i32 3}

View File

@ -192,7 +192,7 @@
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc18.0.0" target triple = "x86_64-pc-windows-msvc18.0.0"
@x = internal global i32 0, align 4 @x = internal global i32 0, align 4, !dbg !23
; Function Attrs: nounwind uwtable ; Function Attrs: nounwind uwtable
define void @f(i32 %p) #0 !dbg !4 { define void @f(i32 %p) #0 !dbg !4 {
@ -261,7 +261,7 @@ attributes #3 = { nounwind }
!20 = !DILocalVariable(name: "a", arg: 1, scope: !16, file: !1, line: 4, type: !7) !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) !21 = !DILocalVariable(name: "b", scope: !16, file: !1, line: 5, type: !7)
!22 = !{!23} !22 = !{!23}
!23 = !DIGlobalVariable(name: "x", scope: !0, file: !1, line: 1, type: !24, isLocal: false, isDefinition: true, variable: i32* @x) !23 = !DIGlobalVariable(name: "x", scope: !0, file: !1, line: 1, type: !24, isLocal: false, isDefinition: true)
!24 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !7) !24 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !7)
!25 = !{i32 2, !"CodeView", i32 1} !25 = !{i32 2, !"CodeView", i32 1}
!26 = !{i32 2, !"Debug Info Version", i32 3} !26 = !{i32 2, !"Debug Info Version", i32 3}

View File

@ -79,7 +79,7 @@ target triple = "x86_64-pc-windows-msvc19.0.23918"
%"struct.foo::bar::GlobalRecord" = type { i32 } %"struct.foo::bar::GlobalRecord" = type { i32 }
%struct.LocalRecord = type { i32 } %struct.LocalRecord = type { i32 }
@"\01?g@bar@foo@@3UGlobalRecord@12@A" = global %"struct.foo::bar::GlobalRecord" zeroinitializer, align 4 @"\01?g@bar@foo@@3UGlobalRecord@12@A" = global %"struct.foo::bar::GlobalRecord" zeroinitializer, align 4, !dbg !4
; Function Attrs: nounwind uwtable ; Function Attrs: nounwind uwtable
define void @"\01?baz@bar@foo@@YAXXZ"() #0 !dbg !19 { define void @"\01?baz@bar@foo@@YAXXZ"() #0 !dbg !19 {
@ -113,7 +113,7 @@ attributes #1 = { nounwind readnone }
!1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild") !1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
!2 = !{} !2 = !{}
!3 = !{!4} !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, variable: %"struct.foo::bar::GlobalRecord"* @"\01?g@bar@foo@@3UGlobalRecord@12@A") !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)
!5 = !DINamespace(name: "bar", scope: !6, file: !1, line: 2) !5 = !DINamespace(name: "bar", scope: !6, file: !1, line: 2)
!6 = !DINamespace(name: "foo", scope: null, file: !1, line: 1) !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@@") !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@@")

View File

@ -127,10 +127,10 @@ target triple = "i686-pc-windows-msvc18.0.31101"
%struct.incomplete_struct = type { i32 } %struct.incomplete_struct = type { i32 }
@"\01?multi_dim_arr@@3PAY146DA" = global [2 x [5 x [7 x i8]]] zeroinitializer, align 1 @"\01?multi_dim_arr@@3PAY146DA" = global [2 x [5 x [7 x i8]]] zeroinitializer, align 1, !dbg !4
@"\01?p_incomplete_struct_arr@@3PAY02Uincomplete_struct@@A" = global [3 x i8]* null, align 4 @"\01?p_incomplete_struct_arr@@3PAY02Uincomplete_struct@@A" = global [3 x i8]* null, align 4, !dbg !11
@"\01?incomplete_struct_arr@@3PAUincomplete_struct@@A" = global [3 x %struct.incomplete_struct] zeroinitializer, align 4 @"\01?incomplete_struct_arr@@3PAUincomplete_struct@@A" = global [3 x %struct.incomplete_struct] zeroinitializer, align 4, !dbg !20
@"\01?typedef_arr@@3SDHD" = constant [4 x i32] zeroinitializer, align 4 @"\01?typedef_arr@@3SDHD" = constant [4 x i32] zeroinitializer, align 4, !dbg !21
; Function Attrs: nounwind ; Function Attrs: nounwind
define void @"\01?foo@@YAXH@Z"(i32 %x) #0 !dbg !31 { define void @"\01?foo@@YAXH@Z"(i32 %x) #0 !dbg !31 {
@ -172,14 +172,14 @@ attributes #2 = { nounwind }
!1 = !DIFile(filename: "t.cpp", directory: "/") !1 = !DIFile(filename: "t.cpp", directory: "/")
!2 = !{} !2 = !{}
!3 = !{!4, !11, !20, !21} !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, variable: [2 x [5 x [7 x i8]]]* @"\01?multi_dim_arr@@3PAY146DA") !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)
!5 = !DICompositeType(tag: DW_TAG_array_type, baseType: !6, size: 560, align: 8, elements: !7) !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) !6 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
!7 = !{!8, !9, !10} !7 = !{!8, !9, !10}
!8 = !DISubrange(count: 2) !8 = !DISubrange(count: 2)
!9 = !DISubrange(count: 5) !9 = !DISubrange(count: 5)
!10 = !DISubrange(count: 7) !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, variable: [3 x i8]** @"\01?p_incomplete_struct_arr@@3PAY02Uincomplete_struct@@A") !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)
!12 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !13, size: 32, align: 32) !12 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !13, size: 32, align: 32)
!13 = !DICompositeType(tag: DW_TAG_array_type, baseType: !14, elements: !18) !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@@") !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) !17 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!18 = !{!19} !18 = !{!19}
!19 = !DISubrange(count: 3) !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, variable: [3 x %struct.incomplete_struct]* @"\01?incomplete_struct_arr@@3PAUincomplete_struct@@A") !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, variable: [4 x i32]* @"\01?typedef_arr@@3SDHD") !21 = distinct !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) !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) !23 = !DIDerivedType(tag: DW_TAG_typedef, name: "T_INT", file: !1, line: 13, baseType: !24)
!24 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !25) !24 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !25)

View File

@ -79,7 +79,7 @@ target triple = "i686-pc-windows-msvc19.0.23918"
%struct.A = type { i8 } %struct.A = type { i8 }
@"\01?a@@3UA@@A" = global %struct.A zeroinitializer, align 1 @"\01?a@@3UA@@A" = global %struct.A zeroinitializer, align 1, !dbg !4
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!8, !9} !llvm.module.flags = !{!8, !9}
@ -89,7 +89,7 @@ target triple = "i686-pc-windows-msvc19.0.23918"
!1 = !DIFile(filename: "hello.cpp", directory: "D:\5Csrc\5Chello") !1 = !DIFile(filename: "hello.cpp", directory: "D:\5Csrc\5Chello")
!2 = !{} !2 = !{}
!3 = !{!4} !3 = !{!4}
!4 = distinct !DIGlobalVariable(name: "a", linkageName: "\01?a@@3UA@@A", scope: !0, file: !1, line: 3, type: !5, isLocal: false, isDefinition: true, variable: %struct.A* @"\01?a@@3UA@@A") !4 = distinct !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@@") !5 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "A", file: !1, line: 1, size: 8, align: 8, elements: !6, identifier: ".?AUA@@")
!6 = !{!7} !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@@") !7 = !DICompositeType(tag: DW_TAG_structure_type, name: "Nested", scope: !5, file: !1, line: 2, size: 8, align: 8, flags: DIFlagFwdDecl, identifier: ".?AUNested@A@@")

View File

@ -184,16 +184,16 @@ target triple = "x86_64-pc-windows-msvc19.0.23918"
%0 = type opaque %0 = type opaque
%1 = type opaque %1 = type opaque
@"\01?pmd_a@@3PEQA@@HEQ1@" = global i32 -1, align 8 @"\01?pmd_a@@3PEQA@@HEQ1@" = global i32 -1, align 8, !dbg !4
@"\01?pmd_b@@3PEQC@@HEQ1@" = global i32 -1, align 8 @"\01?pmd_b@@3PEQC@@HEQ1@" = global i32 -1, align 8, !dbg !10
@"\01?pmd_c@@3PEQD@@HEQ1@" = global { i32, i32 } { i32 0, i32 -1 }, align 8 @"\01?pmd_c@@3PEQD@@HEQ1@" = global { i32, i32 } { i32 0, i32 -1 }, align 8, !dbg !20
@"\01?pmd_d@@3PEQE@@HEQ1@" = global { i32, i32, i32 } { i32 0, i32 0, i32 -1 }, align 8 @"\01?pmd_d@@3PEQE@@HEQ1@" = global { i32, i32, i32 } { i32 0, i32 0, i32 -1 }, align 8, !dbg !23
@"\01?pmf_a@@3P8A@@EAAXXZEQ1@" = global i8* null, align 8 @"\01?pmf_a@@3P8A@@EAAXXZEQ1@" = global i8* null, align 8, !dbg !26
@"\01?pmf_b@@3P8C@@EAAXXZEQ1@" = global { i8*, i32 } zeroinitializer, align 8 @"\01?pmf_b@@3P8C@@EAAXXZEQ1@" = global { i8*, i32 } zeroinitializer, align 8, !dbg !31
@"\01?pmf_c@@3P8D@@EAAXXZEQ1@" = global { i8*, i32, i32 } zeroinitializer, align 8 @"\01?pmf_c@@3P8D@@EAAXXZEQ1@" = global { i8*, i32, i32 } zeroinitializer, align 8, !dbg !36
@"\01?pmf_d@@3P8E@@EAAXXZEQ1@" = global { i8*, i32, i32, i32 } zeroinitializer, align 8 @"\01?pmf_d@@3P8E@@EAAXXZEQ1@" = global { i8*, i32, i32, i32 } zeroinitializer, align 8, !dbg !41
@"\01?ppmd@@3PEAPEQIncomplete@@HEA" = global %0* null, align 8 @"\01?ppmd@@3PEAPEQIncomplete@@HEA" = global %0* null, align 8, !dbg !46
@"\01?ppmf@@3PEAP8Incomplete@@EAAXXZEA" = global %1* null, align 8 @"\01?ppmf@@3PEAP8Incomplete@@EAAXXZEA" = global %1* null, align 8, !dbg !50
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!56, !57, !58} !llvm.module.flags = !{!56, !57, !58}
@ -203,13 +203,13 @@ target triple = "x86_64-pc-windows-msvc19.0.23918"
!1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild") !1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
!2 = !{} !2 = !{}
!3 = !{!4, !10, !20, !23, !26, !31, !36, !41, !46, !50} !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, variable: i32* @"\01?pmd_a@@3PEQA@@HEQ1@") !4 = distinct !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) !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) !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@@") !7 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "A", file: !1, line: 1, size: 32, align: 32, elements: !8, identifier: ".?AUA@@")
!8 = !{!9} !8 = !{!9}
!9 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !7, file: !1, line: 1, baseType: !6, size: 32, align: 32) !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, variable: i32* @"\01?pmd_b@@3PEQC@@HEQ1@") !10 = distinct !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) !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@@") !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} !13 = !{!14, !15, !19}
@ -219,37 +219,37 @@ target triple = "x86_64-pc-windows-msvc19.0.23918"
!17 = !{!18} !17 = !{!18}
!18 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !16, file: !1, line: 2, baseType: !6, size: 32, align: 32) !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) !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, variable: { i32, i32 }* @"\01?pmd_c@@3PEQD@@HEQ1@") !20 = distinct !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) !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@@") !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, variable: { i32, i32, i32 }* @"\01?pmd_d@@3PEQE@@HEQ1@") !23 = distinct !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) !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@@") !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, variable: i8** @"\01?pmf_a@@3P8A@@EAAXXZEQ1@") !26 = distinct !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) !27 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !28, size: 64, flags: DIFlagSingleInheritance, extraData: !7)
!28 = !DISubroutineType(types: !29) !28 = !DISubroutineType(types: !29)
!29 = !{null, !30} !29 = !{null, !30}
!30 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !7, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer) !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, variable: { i8*, i32 }* @"\01?pmf_b@@3P8C@@EAAXXZEQ1@") !31 = distinct !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) !32 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !33, size: 128, flags: DIFlagMultipleInheritance, extraData: !12)
!33 = !DISubroutineType(types: !34) !33 = !DISubroutineType(types: !34)
!34 = !{null, !35} !34 = !{null, !35}
!35 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !12, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer) !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, variable: { i8*, i32, i32 }* @"\01?pmf_c@@3P8D@@EAAXXZEQ1@") !36 = distinct !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) !37 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !38, size: 128, flags: DIFlagVirtualInheritance, extraData: !22)
!38 = !DISubroutineType(types: !39) !38 = !DISubroutineType(types: !39)
!39 = !{null, !40} !39 = !{null, !40}
!40 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !22, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer) !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, variable: { i8*, i32, i32, i32 }* @"\01?pmf_d@@3P8E@@EAAXXZEQ1@") !41 = distinct !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) !42 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !43, size: 192, extraData: !25)
!43 = !DISubroutineType(types: !44) !43 = !DISubroutineType(types: !44)
!44 = !{null, !45} !44 = !{null, !45}
!45 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !25, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer) !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, variable: %0** @"\01?ppmd@@3PEAPEQIncomplete@@HEA") !46 = distinct !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) !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) !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@@") !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, variable: %1** @"\01?ppmf@@3PEAP8Incomplete@@EAAXXZEA") !50 = distinct !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) !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) !52 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !53, extraData: !49)
!53 = !DISubroutineType(types: !54) !53 = !DISubroutineType(types: !54)

View File

@ -55,7 +55,7 @@ target triple = "i686-pc-windows-msvc18.0.0"
%struct.S = type { i32 } %struct.S = type { i32 }
%union.pun = type { i32 } %union.pun = type { i32 }
@"\01?u@@3UU@@A" = global %struct.U zeroinitializer, align 4 @"\01?u@@3UU@@A" = global %struct.U zeroinitializer, align 4, !dbg !4
; Function Attrs: nounwind uwtable ; Function Attrs: nounwind uwtable
define void @"\01?f@@YAXXZ"() #0 !dbg !14 { define void @"\01?f@@YAXXZ"() #0 !dbg !14 {
@ -97,7 +97,7 @@ attributes #1 = { nounwind readnone }
!1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild") !1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
!2 = !{} !2 = !{}
!3 = !{!4} !3 = !{!4}
!4 = distinct !DIGlobalVariable(name: "u", linkageName: "\01?u@@3UU@@A", scope: !0, file: !1, line: 13, type: !5, isLocal: false, isDefinition: true, variable: %struct.U* @"\01?u@@3UU@@A") !4 = distinct !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) !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@@") !6 = distinct !DICompositeType(tag: DW_TAG_structure_type, file: !1, line: 12, size: 32, align: 32, elements: !7, identifier: ".?AUU@@")
!7 = !{!8} !7 = !{!8}

View File

@ -121,7 +121,7 @@ $"\01??_7A@@6B@" = comdat largest
$"\01??_R4A@@6B@" = comdat any $"\01??_R4A@@6B@" = comdat any
@"\01?p@@3PEAUC@@EA" = global %struct.C* null, align 8 @"\01?p@@3PEAUC@@EA" = global %struct.C* null, align 8, !dbg !4
@0 = private unnamed_addr constant [3 x i8*] [i8* bitcast (%rtti.CompleteObjectLocator* @"\01??_R4C@@6B@" to i8*), i8* bitcast (void (%struct.C*)* @"\01?f@C@@UEAAXXZ" to i8*), i8* bitcast (void (%struct.C*)* @"\01?g@C@@UEAAXXZ" to i8*)], comdat($"\01??_7C@@6B@") @0 = private unnamed_addr constant [3 x i8*] [i8* bitcast (%rtti.CompleteObjectLocator* @"\01??_R4C@@6B@" to i8*), i8* bitcast (void (%struct.C*)* @"\01?f@C@@UEAAXXZ" to i8*), i8* bitcast (void (%struct.C*)* @"\01?g@C@@UEAAXXZ" to i8*)], comdat($"\01??_7C@@6B@")
@"\01??_R4C@@6B@" = linkonce_odr constant %rtti.CompleteObjectLocator { i32 1, i32 0, i32 0, i32 trunc (i64 sub nuw nsw (i64 ptrtoint (%rtti.TypeDescriptor7* @"\01??_R0?AUC@@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 ptrtoint (%rtti.ClassHierarchyDescriptor* @"\01??_R3C@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 ptrtoint (%rtti.CompleteObjectLocator* @"\01??_R4C@@6B@" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }, comdat @"\01??_R4C@@6B@" = linkonce_odr constant %rtti.CompleteObjectLocator { i32 1, i32 0, i32 0, i32 trunc (i64 sub nuw nsw (i64 ptrtoint (%rtti.TypeDescriptor7* @"\01??_R0?AUC@@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 ptrtoint (%rtti.ClassHierarchyDescriptor* @"\01??_R3C@@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 trunc (i64 sub nuw nsw (i64 ptrtoint (%rtti.CompleteObjectLocator* @"\01??_R4C@@6B@" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }, comdat
@"\01??_7type_info@@6B@" = external constant i8* @"\01??_7type_info@@6B@" = external constant i8*
@ -237,7 +237,7 @@ attributes #6 = { nounwind }
!1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild") !1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
!2 = !{} !2 = !{}
!3 = !{!4} !3 = !{!4}
!4 = distinct !DIGlobalVariable(name: "p", linkageName: "\01?p@@3PEAUC@@EA", scope: !0, file: !1, line: 13, type: !5, isLocal: false, isDefinition: true, variable: %struct.C** @"\01?p@@3PEAUC@@EA") !4 = distinct !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) !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@@") !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} !7 = !{!8, !30, !34}

View File

@ -40,8 +40,8 @@ target triple = "x86_64-pc-windows-msvc"
$"\01??_DUseCompleteType@@QEAA@XZ" = comdat any $"\01??_DUseCompleteType@@QEAA@XZ" = comdat any
@"\01?force_fwd_decl@@3UGetFwdDecl@@A" = global %struct.GetFwdDecl zeroinitializer, align 1 @"\01?force_fwd_decl@@3UGetFwdDecl@@A" = global %struct.GetFwdDecl zeroinitializer, align 1, !dbg !4
@"\01?require_complete@@3UUseCompleteType@@A" = global %struct.UseCompleteType zeroinitializer, align 8 @"\01?require_complete@@3UUseCompleteType@@A" = global %struct.UseCompleteType zeroinitializer, align 8, !dbg !10
@llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__sub_I_t.cpp, i8* null }] @llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__sub_I_t.cpp, i8* null }]
; Function Attrs: nounwind ; Function Attrs: nounwind
@ -100,13 +100,13 @@ attributes #3 = { nounwind readnone }
!1 = !DIFile(filename: "<stdin>", directory: "C:\5Csrc\5Cllvm\5Cbuild") !1 = !DIFile(filename: "<stdin>", directory: "C:\5Csrc\5Cllvm\5Cbuild")
!2 = !{} !2 = !{}
!3 = !{!4, !10} !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, variable: %struct.GetFwdDecl* @"\01?force_fwd_decl@@3UGetFwdDecl@@A") !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)
!5 = !DIFile(filename: "t.cpp", directory: "C:\5Csrc\5Cllvm\5Cbuild") !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@@") !6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "GetFwdDecl", file: !5, line: 2, size: 8, align: 8, elements: !7, identifier: ".?AUGetFwdDecl@@")
!7 = !{!8} !7 = !{!8}
!8 = !DIDerivedType(tag: DW_TAG_member, name: "format", scope: !6, file: !5, line: 3, baseType: !9, flags: DIFlagStaticMember) !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@@") !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, variable: %struct.UseCompleteType* @"\01?require_complete@@3UUseCompleteType@@A") !10 = distinct !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@@") !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} !12 = !{!13, !17, !21}
!13 = !DIDerivedType(tag: DW_TAG_member, name: "currencySpcAfterSym", scope: !11, file: !5, line: 13, baseType: !14, size: 64, align: 64) !13 = !DIDerivedType(tag: DW_TAG_member, name: "currencySpcAfterSym", scope: !11, file: !5, line: 13, baseType: !14, size: 64, align: 64)

View File

@ -1,5 +1,5 @@
; RUN: llc %s -o /dev/null ; RUN: llc %s -o /dev/null
@0 = internal constant i32 1 @0 = internal constant i32 1, !dbg !5
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!9} !llvm.module.flags = !{!9}
@ -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) !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 = !{} !2 = !{}
!3 = !{!5} !3 = !{!5}
!5 = !DIGlobalVariable(name: "a", line: 2, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7, variable: i32* @0) !5 = !DIGlobalVariable(name: "a", line: 2, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7)
!6 = !DIFile(filename: "g.c", directory: "/private/tmp") !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) !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") !8 = !DIFile(filename: "g.c", directory: "/private/tmp")

View File

@ -6,7 +6,7 @@
; CHECK-NEXT: DW_AT_name ; CHECK-NEXT: DW_AT_name
@i = common global i32 0 ; <i32*> [#uses=2] @i = common global i32 0, !dbg !16 ; <i32*> [#uses=2]
declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone
@ -45,7 +45,7 @@ entry:
!13 = !{!14, !15} !13 = !{!14, !15}
!14 = !DIDerivedType(tag: DW_TAG_member, name: "a", line: 10, size: 32, align: 32, file: !27, scope: !12, baseType: !5) !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) !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, variable: i32* @i) !16 = !DIGlobalVariable(name: "i", line: 5, isLocal: false, isDefinition: true, scope: !1, file: !1, type: !5)
!17 = !DILocation(line: 15, scope: !18) !17 = !DILocation(line: 15, scope: !18)
!18 = distinct !DILexicalBlock(line: 14, column: 0, file: !1, scope: !6) !18 = distinct !DILexicalBlock(line: 14, column: 0, file: !1, scope: !6)
!19 = !DILocation(line: 9, scope: !0, inlinedAt: !17) !19 = !DILocation(line: 9, scope: !0, inlinedAt: !17)

View File

@ -52,18 +52,18 @@
@ForceTopDown = common global i32 0, align 4 @ForceTopDown = common global i32 0, align 4, !dbg !4
@_ZNSt3__116allocator_traitsINS_9allocatorINS_11__tree_nodeINS_12__value_typeIPN4llvm10BasicBlockEPNS4_10RegionNodeEEEPvEEEEE11__constructIS9_JNS_4pairIS6_S8_EEEEEvNS_17integral_constantIbLb1EEERSC_PT_DpOT0_ = common global i32 0, align 4 @_ZNSt3__116allocator_traitsINS_9allocatorINS_11__tree_nodeINS_12__value_typeIPN4llvm10BasicBlockEPNS4_10RegionNodeEEEPvEEEEE11__constructIS9_JNS_4pairIS6_S8_EEEEEvNS_17integral_constantIbLb1EEERSC_PT_DpOT0_ = common global i32 0, align 4, !dbg !6
@_ZN5clang23DataRecursiveASTVisitorIN12_GLOBAL__N_124UnusedBackingIvarCheckerEE26TraverseCUDAKernelCallExprEPNS_18CUDAKernelCallExprE = common global i32 0, align 4 @_ZN5clang23DataRecursiveASTVisitorIN12_GLOBAL__N_124UnusedBackingIvarCheckerEE26TraverseCUDAKernelCallExprEPNS_18CUDAKernelCallExprE = common global i32 0, align 4, !dbg !7
@_ZN4llvm16DenseMapIteratorIPNS_10MDLocationENS_6detail13DenseSetEmptyENS_10MDNodeInfoIS1_EENS3_12DenseSetPairIS2_EELb0EE23AdvancePastEmptyBucketsEv = common global i32 0, align 4 @_ZN4llvm16DenseMapIteratorIPNS_10MDLocationENS_6detail13DenseSetEmptyENS_10MDNodeInfoIS1_EENS3_12DenseSetPairIS2_EELb0EE23AdvancePastEmptyBucketsEv = common global i32 0, align 4, !dbg !8
@_ZNK4llvm12LivePhysRegs5printERNS_11raw_ostreamE = common global i32 0, align 4 @_ZNK4llvm12LivePhysRegs5printERNS_11raw_ostreamE = common global i32 0, align 4, !dbg !9
@_ZN4llvm15ScalarEvolution14getSignedRangeEPKNS_4SCEVE = common global i32 0, align 4 @_ZN4llvm15ScalarEvolution14getSignedRangeEPKNS_4SCEVE = common global i32 0, align 4, !dbg !10
@k1 = common global i32 0, align 4 @k1 = common global i32 0, align 4, !dbg !11
@is = common global i32 0, align 4 @is = common global i32 0, align 4, !dbg !12
@setStmt = common global i32 0, align 4 @setStmt = common global i32 0, align 4, !dbg !13
@_ZN4llvm5TwineC1Ei = common global i32 0, align 4 @_ZN4llvm5TwineC1Ei = common global i32 0, align 4, !dbg !14
@_ZNK5clang12OverrideAttr5cloneERNS_10ASTContextE = common global i32 0, align 4 @_ZNK5clang12OverrideAttr5cloneERNS_10ASTContextE = common global i32 0, align 4, !dbg !15
@_ZN4llvm22MachineModuleInfoMachOD2Ev = common global i32 0, align 4 @_ZN4llvm22MachineModuleInfoMachOD2Ev = common global i32 0, align 4, !dbg !16
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!17, !18, !19} !llvm.module.flags = !{!17, !18, !19}
@ -73,19 +73,19 @@
!1 = !DIFile(filename: "hash-collisions.c", directory: "/tmp") !1 = !DIFile(filename: "hash-collisions.c", directory: "/tmp")
!2 = !{} !2 = !{}
!3 = !{!4, !6, !7, !8, !9, !10, !11, !12, !13, !14, !15, !16} !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, variable: i32* @ForceTopDown) !4 = !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) !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, variable: i32* @_ZNSt3__116allocator_traitsINS_9allocatorINS_11__tree_nodeINS_12__value_typeIPN4llvm10BasicBlockEPNS4_10RegionNodeEEEPvEEEEE11__constructIS9_JNS_4pairIS6_S8_EEEEEvNS_17integral_constantIbLb1EEERSC_PT_DpOT0_) !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, variable: i32* @_ZN5clang23DataRecursiveASTVisitorIN12_GLOBAL__N_124UnusedBackingIvarCheckerEE26TraverseCUDAKernelCallExprEPNS_18CUDAKernelCallExprE) !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, variable: i32* @_ZN4llvm16DenseMapIteratorIPNS_10MDLocationENS_6detail13DenseSetEmptyENS_10MDNodeInfoIS1_EENS3_12DenseSetPairIS2_EELb0EE23AdvancePastEmptyBucketsEv) !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, variable: i32* @_ZNK4llvm12LivePhysRegs5printERNS_11raw_ostreamE) !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, variable: i32* @_ZN4llvm15ScalarEvolution14getSignedRangeEPKNS_4SCEVE) !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, variable: i32* @k1) !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, variable: i32* @is) !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, variable: i32* @setStmt) !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, variable: i32* @_ZN4llvm5TwineC1Ei) !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, variable: i32* @_ZNK5clang12OverrideAttr5cloneERNS_10ASTContextE) !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, variable: i32* @_ZN4llvm22MachineModuleInfoMachOD2Ev) !16 = !DIGlobalVariable(name: "_ZN4llvm22MachineModuleInfoMachOD2Ev", scope: !0, file: !1, line: 12, type: !5, isLocal: false, isDefinition: true)
!17 = !{i32 2, !"Dwarf Version", i32 2} !17 = !{i32 2, !"Dwarf Version", i32 2}
!18 = !{i32 2, !"Debug Info Version", i32 3} !18 = !{i32 2, !"Debug Info Version", i32 3}
!19 = !{i32 1, !"PIC Level", i32 2} !19 = !{i32 1, !"PIC Level", i32 2}

View File

@ -37,8 +37,8 @@
; CHECK: DW_AT_name {{.*}}"a.cpp" ; CHECK: DW_AT_name {{.*}}"a.cpp"
; CHECK: DW_AT_name {{.*}} "func" ; CHECK: DW_AT_name {{.*}} "func"
@x = global i32 (i32)* @_Z4funci, align 8 @x = global i32 (i32)* @_Z4funci, align 8, !dbg !10
@y = global i32 (i32)* @_Z4funci, align 8 @y = global i32 (i32)* @_Z4funci, align 8, !dbg !18
; Function Attrs: inlinehint nounwind uwtable ; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i32 @_Z4funci(i32 %i) #0 !dbg !4 { define linkonce_odr i32 @_Z4funci(i32 %i) #0 !dbg !4 {
@ -69,14 +69,14 @@ attributes #1 = { nounwind readnone }
!7 = !{!8, !8} !7 = !{!8, !8}
!8 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed) !8 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!9 = !{!10} !9 = !{!10}
!10 = !DIGlobalVariable(name: "x", line: 4, isLocal: false, isDefinition: true, scope: null, file: !5, type: !11, variable: i32 (i32)** @x) !10 = !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) !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) !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") !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) !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") !16 = !DIFile(filename: "b.cpp", directory: "/tmp/dbginfo")
!17 = !{!18} !17 = !{!18}
!18 = !DIGlobalVariable(name: "y", line: 4, isLocal: false, isDefinition: true, scope: null, file: !16, type: !11, variable: i32 (i32)** @y) !18 = !DIGlobalVariable(name: "y", line: 4, isLocal: false, isDefinition: true, scope: null, file: !16, type: !11)
!19 = !{i32 2, !"Dwarf Version", i32 4} !19 = !{i32 2, !"Dwarf Version", i32 4}
!20 = !{i32 1, !"Debug Info Version", i32 3} !20 = !{i32 1, !"Debug Info Version", i32 3}
!21 = !{!"clang version 3.5.0 "} !21 = !{!"clang version 3.5.0 "}

View File

@ -25,8 +25,8 @@
; CHECK: DW_TAG_compile_unit ; CHECK: DW_TAG_compile_unit
; CHECK-NOT: DW_TAG_subprogram ; CHECK-NOT: DW_TAG_subprogram
@x = global i32 (i32)* @_Z4funci, align 8 @x = global i32 (i32)* @_Z4funci, align 8, !dbg !11
@y = global i32 (i32)* @_Z4funci, align 8 @y = global i32 (i32)* @_Z4funci, align 8, !dbg !16
; Function Attrs: inlinehint nounwind uwtable ; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i32 @_Z4funci(i32 %i) #0 !dbg !4 { define linkonce_odr i32 @_Z4funci(i32 %i) #0 !dbg !4 {
@ -58,12 +58,12 @@ attributes #1 = { nounwind readnone }
!8 = !{!9, !9} !8 = !{!9, !9}
!9 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed) !9 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!10 = !{!11} !10 = !{!11}
!11 = !DIGlobalVariable(name: "x", line: 4, isLocal: false, isDefinition: true, scope: null, file: !6, type: !12, variable: i32 (i32)** @x) !11 = !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) !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) !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") !14 = !DIFile(filename: "b.cpp", directory: "/tmp/dbginfo")
!15 = !{!16} !15 = !{!16}
!16 = !DIGlobalVariable(name: "y", line: 4, isLocal: false, isDefinition: true, scope: null, file: !6, type: !12, variable: i32 (i32)** @y) !16 = !DIGlobalVariable(name: "y", line: 4, isLocal: false, isDefinition: true, scope: null, file: !6, type: !12)
!17 = !{i32 2, !"Dwarf Version", i32 4} !17 = !{i32 2, !"Dwarf Version", i32 4}
!18 = !{i32 1, !"Debug Info Version", i32 3} !18 = !{i32 1, !"Debug Info Version", i32 3}
!19 = !{!"clang version 3.5.0 "} !19 = !{!"clang version 3.5.0 "}

View File

@ -3,7 +3,7 @@
; Do not unnecessarily use AT_specification DIE. ; Do not unnecessarily use AT_specification DIE.
; CHECK-NOT: AT_specification ; CHECK-NOT: AT_specification
@a = common global [10 x i32] zeroinitializer, align 16 @a = common global [10 x i32] zeroinitializer, align 16, !dbg !5
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!12} !llvm.module.flags = !{!12}
@ -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) !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 = !{} !2 = !{}
!3 = !{!5} !3 = !{!5}
!5 = !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7, variable: [10 x i32]* @a) !5 = !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7)
!6 = !DIFile(filename: "x.c", directory: "/private/tmp") !6 = !DIFile(filename: "x.c", directory: "/private/tmp")
!7 = !DICompositeType(tag: DW_TAG_array_type, size: 320, align: 32, baseType: !8, elements: !9) !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) !8 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)

View File

@ -21,7 +21,7 @@
%struct.Y = type { %struct.X* } %struct.Y = type { %struct.X* }
%struct.X = type opaque %struct.X = type opaque
@y = common global %struct.Y zeroinitializer, align 8 @y = common global %struct.Y zeroinitializer, align 8, !dbg !4
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!10, !11} !llvm.module.flags = !{!10, !11}
@ -31,7 +31,7 @@
!1 = !DIFile(filename: "minimal.c", directory: "/tmp") !1 = !DIFile(filename: "minimal.c", directory: "/tmp")
!2 = !{} !2 = !{}
!3 = !{!4} !3 = !{!4}
!4 = !DIGlobalVariable(name: "y", scope: !0, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true, variable: %struct.Y* @y) !4 = !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) !5 = !DICompositeType(tag: DW_TAG_structure_type, name: "Y", file: !1, line: 3, size: 64, align: 64, elements: !6)
!6 = !{!7} !6 = !{!7}
!7 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !5, file: !1, line: 4, baseType: !8, size: 64, align: 64) !7 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !5, file: !1, line: 4, baseType: !8, size: 64, align: 64)

View File

@ -51,9 +51,9 @@
%struct.C = type { i8 } %struct.C = type { i8 }
@_ZN1C22static_member_variableE = global i32 0, align 4 @_ZN1C22static_member_variableE = global i32 0, align 4, !dbg !25
@global_variable = global %struct.C zeroinitializer, align 1 @global_variable = global %struct.C zeroinitializer, align 1, !dbg !26
@_ZN2ns25global_namespace_variableE = global i32 1, align 4 @_ZN2ns25global_namespace_variableE = global i32 1, align 4, !dbg !27
define void @_ZN1C15member_functionEv(%struct.C* %this) nounwind uwtable align 2 !dbg !3 { define void @_ZN1C15member_functionEv(%struct.C* %this) nounwind uwtable align 2 !dbg !3 {
entry: entry:
@ -114,9 +114,9 @@ attributes #1 = { nounwind readnone }
!22 = !DISubroutineType(types: !23) !22 = !DISubroutineType(types: !23)
!23 = !{null} !23 = !{null}
!24 = !{!25, !26, !27} !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, variable: i32* @_ZN1C22static_member_variableE, declaration: !10) !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, variable: %struct.C* @global_variable) !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, variable: i32* @_ZN2ns25global_namespace_variableE) !27 = !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) !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) !29 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !8)
!30 = !DILocation(line: 9, scope: !3) !30 = !DILocation(line: 9, scope: !3)

View File

@ -33,7 +33,7 @@
; CHECK: DW_TAG_enumerator ; CHECK: DW_TAG_enumerator
; CHECK-NEXT: DW_AT_name{{.*}} = "X" ; CHECK-NEXT: DW_AT_name{{.*}} = "X"
@a = global i64 0, align 8 @a = global i64 0, align 8, !dbg !18
; Function Attrs: nounwind uwtable ; Function Attrs: nounwind uwtable
define void @_Z4funcv() #0 !dbg !13 { define void @_Z4funcv() #0 !dbg !13 {
@ -70,7 +70,7 @@ attributes #1 = { nounwind readnone }
!15 = !DISubroutineType(types: !16) !15 = !DISubroutineType(types: !16)
!16 = !{null} !16 = !{null}
!17 = !{!18} !17 = !{!18}
!18 = !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !14, type: !3, variable: i64* @a) !18 = !DIGlobalVariable(name: "a", line: 1, isLocal: false, isDefinition: true, scope: null, file: !14, type: !3)
!19 = !{i32 2, !"Dwarf Version", i32 3} !19 = !{i32 2, !"Dwarf Version", i32 3}
!20 = !DILocalVariable(name: "b", line: 4, scope: !13, file: !14, type: !21) !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) !21 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)

View File

@ -16,8 +16,8 @@
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128" target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
target triple = "arm64-apple-ios" target triple = "arm64-apple-ios"
@a = common global i32 0, align 4 @a = common global i32 0, align 4, !dbg !16
@b = common global i32 0, align 4 @b = common global i32 0, align 4, !dbg !17
; Function Attrs: nounwind ; Function Attrs: nounwind
define void @f3() #0 !dbg !12 { define void @f3() #0 !dbg !12 {
@ -81,8 +81,8 @@ attributes #3 = { nounwind }
!13 = !DISubroutineType(types: !14) !13 = !DISubroutineType(types: !14)
!14 = !{null} !14 = !{null}
!15 = !{!16, !17} !15 = !{!16, !17}
!16 = !DIGlobalVariable(name: "a", scope: !0, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true, variable: i32* @a) !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, variable: i32* @b) !17 = !DIGlobalVariable(name: "b", scope: !0, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true)
!18 = !{i32 2, !"Dwarf Version", i32 2} !18 = !{i32 2, !"Dwarf Version", i32 2}
!19 = !{i32 2, !"Debug Info Version", i32 3} !19 = !{i32 2, !"Debug Info Version", i32 3}
!20 = !{!"clang version 3.8.0 (trunk 245562) (llvm/trunk 245569)"} !20 = !{!"clang version 3.8.0 (trunk 245562) (llvm/trunk 245569)"}

View File

@ -17,8 +17,8 @@
; int S::*x = 0; ; int S::*x = 0;
; void (S::*y)(int) = 0; ; void (S::*y)(int) = 0;
@x = global i64 -1, align 8 @x = global i64 -1, align 8, !dbg !5
@y = global { i64, i64 } zeroinitializer, align 8 @y = global { i64, i64 } zeroinitializer, align 8, !dbg !10
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!16} !llvm.module.flags = !{!16}
@ -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) !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 = !{} !1 = !{}
!3 = !{!5, !10} !3 = !{!5, !10}
!5 = !DIGlobalVariable(name: "x", line: 4, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7, variable: i64* @x) !5 = !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") !6 = !DIFile(filename: "simple.cpp", directory: "/home/blaikie/Development/scratch")
!7 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !8, extraData: !9) !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) !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) !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, variable: { i64, i64 }* @y) !10 = !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) !11 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !12, extraData: !9)
!12 = !DISubroutineType(types: !13) !12 = !DISubroutineType(types: !13)
!13 = !{null, !14, !8} !13 = !{null, !14, !8}

View File

@ -200,8 +200,8 @@
; } ; }
; void B::func_fwd() {} ; void B::func_fwd() {}
@_ZN1A1B1iE = global i32 0, align 4 @_ZN1A1B1iE = global i32 0, align 4, !dbg !31
@_ZN1A1B7var_fwdE = global i32 0, align 4 @_ZN1A1B7var_fwdE = global i32 0, align 4, !dbg !32
@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 }] @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 ; Function Attrs: nounwind ssp uwtable
@ -317,8 +317,8 @@ attributes #1 = { nounwind readnone }
!28 = !DIFile(filename: "debug-info-namespace.cpp", directory: "/tmp") !28 = !DIFile(filename: "debug-info-namespace.cpp", directory: "/tmp")
!29 = !DISubroutineType(types: !2) !29 = !DISubroutineType(types: !2)
!30 = !{!31, !32} !30 = !{!31, !32}
!31 = !DIGlobalVariable(name: "i", linkageName: "_ZN1A1B1iE", line: 20, isLocal: false, isDefinition: true, scope: !6, file: !18, type: !13, variable: i32* @_ZN1A1B1iE) !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, variable: i32* @_ZN1A1B7var_fwdE) !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} !33 = !{!34, !35, !36, !37, !40, !41, !42, !43, !44, !45, !47, !48, !49, !51, !54, !55, !56}
!34 = !DIImportedEntity(tag: DW_TAG_imported_module, line: 15, scope: !7, entity: !6) !34 = !DIImportedEntity(tag: DW_TAG_imported_module, line: 15, scope: !7, entity: !6)
!35 = !DIImportedEntity(tag: DW_TAG_imported_module, line: 18, scope: !0, entity: !7) !35 = !DIImportedEntity(tag: DW_TAG_imported_module, line: 18, scope: !0, entity: !7)

View File

@ -88,7 +88,7 @@
%struct.C = type { i32 } %struct.C = type { i32 }
@x = global %struct.C* null, align 8 @x = global %struct.C* null, align 8, !dbg !27
; Function Attrs: nounwind ; Function Attrs: nounwind
define void @_Z3fn6v() #0 !dbg !14 { define void @_Z3fn6v() #0 !dbg !14 {
@ -225,7 +225,7 @@ attributes #3 = { nounwind }
!24 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !22, type: !25) !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) !25 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !4)
!26 = !{!27} !26 = !{!27}
!27 = !DIGlobalVariable(name: "x", line: 13, isLocal: false, isDefinition: true, scope: null, file: !15, type: !25, variable: %struct.C** @x) !27 = !DIGlobalVariable(name: "x", line: 13, isLocal: false, isDefinition: true, scope: null, file: !15, type: !25)
!28 = !{i32 2, !"Dwarf Version", i32 4} !28 = !{i32 2, !"Dwarf Version", i32 4}
!29 = !{i32 2, !"Debug Info Version", i32 3} !29 = !{i32 2, !"Debug Info Version", i32 3}
!30 = !{!"clang version 3.6.0 "} !30 = !{!"clang version 3.6.0 "}

View File

@ -20,7 +20,7 @@
%class.bar = type { i8 } %class.bar = type { i8 }
@filters = global %class.bar zeroinitializer, align 1 @filters = global %class.bar zeroinitializer, align 1, !dbg !4
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!36, !37} !llvm.module.flags = !{!36, !37}
@ -29,7 +29,7 @@
!1 = !DIFile(filename: "debug-info-template-recursive.cpp", directory: "/usr/local/google/home/echristo/tmp") !1 = !DIFile(filename: "debug-info-template-recursive.cpp", directory: "/usr/local/google/home/echristo/tmp")
!2 = !{} !2 = !{}
!3 = !{!4} !3 = !{!4}
!4 = !DIGlobalVariable(name: "filters", line: 10, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6, variable: %class.bar* @filters) !4 = !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") !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) !6 = !DICompositeType(tag: DW_TAG_class_type, name: "bar", line: 9, size: 8, align: 8, file: !1, elements: !7)
!7 = !{!8, !31} !7 = !{!8, !31}

View File

@ -11,7 +11,7 @@
; }; ; };
; int Foo:*x = 0; ; int Foo:*x = 0;
@x = global i64 -1, align 8 @x = global i64 -1, align 8, !dbg !6
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!10, !11} !llvm.module.flags = !{!10, !11}
@ -22,7 +22,7 @@
!3 = !{!4} !3 = !{!4}
!4 = !DICompositeType(tag: DW_TAG_structure_type, name: "Foo", line: 1, flags: DIFlagFwdDecl, file: !1, identifier: "_ZTS3Foo") !4 = !DICompositeType(tag: DW_TAG_structure_type, name: "Foo", line: 1, flags: DIFlagFwdDecl, file: !1, identifier: "_ZTS3Foo")
!5 = !{!6} !5 = !{!6}
!6 = !DIGlobalVariable(name: "x", line: 4, isLocal: false, isDefinition: true, scope: null, file: !7, type: !8, variable: i64* @x) !6 = !DIGlobalVariable(name: "x", line: 4, isLocal: false, isDefinition: true, scope: null, file: !7, type: !8)
!7 = !DIFile(filename: "foo.cpp", directory: ".") !7 = !DIFile(filename: "foo.cpp", directory: ".")
!8 = !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !9, extraData: !4) !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) !9 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)

View File

@ -12,7 +12,7 @@
; CHECK-NOT: DW_AT_type ; CHECK-NOT: DW_AT_type
; CHECK: {{DW_TAG|NULL}} ; CHECK: {{DW_TAG|NULL}}
@y = global i8* null, align 8 @y = global i8* null, align 8, !dbg !4
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!8, !9} !llvm.module.flags = !{!8, !9}
@ -22,7 +22,7 @@
!1 = !DIFile(filename: "typedef.cpp", directory: "/tmp/dbginfo") !1 = !DIFile(filename: "typedef.cpp", directory: "/tmp/dbginfo")
!2 = !{} !2 = !{}
!3 = !{!4} !3 = !{!4}
!4 = !DIGlobalVariable(name: "y", line: 2, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6, variable: i8** @y) !4 = !DIGlobalVariable(name: "y", line: 2, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6)
!5 = !DIFile(filename: "typedef.cpp", directory: "/tmp/dbginfo") !5 = !DIFile(filename: "typedef.cpp", directory: "/tmp/dbginfo")
!6 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !7) !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) !7 = !DIDerivedType(tag: DW_TAG_typedef, name: "x", line: 1, file: !1, baseType: null)

View File

@ -41,7 +41,7 @@
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu" target triple = "x86_64-unknown-linux-gnu"
@m = common global i32 0, align 4 @m = common global i32 0, align 4, !dbg !16
@.str = private unnamed_addr constant [13 x i8] c"m(main): %d\0A\00", align 1 @.str = private unnamed_addr constant [13 x i8] c"m(main): %d\0A\00", align 1
; Function Attrs: nounwind uwtable ; Function Attrs: nounwind uwtable
@ -121,7 +121,7 @@
!13 = !DILocalVariable(name: "argv", arg: 2, scope: !4, file: !1, line: 6, type: !8) !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) !14 = !DILocalVariable(name: "n", scope: !4, file: !1, line: 7, type: !7)
!15 = !{!16} !15 = !{!16}
!16 = !DIGlobalVariable(name: "m", scope: !0, file: !1, line: 2, type: !7, isLocal: false, isDefinition: true, variable: i32* @m) !16 = !DIGlobalVariable(name: "m", scope: !0, file: !1, line: 2, type: !7, isLocal: false, isDefinition: true)
!17 = !{i32 2, !"Dwarf Version", i32 4} !17 = !{i32 2, !"Dwarf Version", i32 4}
!18 = !{i32 2, !"Debug Info Version", i32 3} !18 = !{i32 2, !"Debug Info Version", i32 3}
!19 = !{!"clang version 3.8.0 (trunk 253049)"} !19 = !{!"clang version 3.8.0 (trunk 253049)"}

View File

@ -6,7 +6,7 @@
; CHECK-NEXT: info_string ; CHECK-NEXT: info_string
@i = common global i32 0 ; <i32*> [#uses=2] @i = common global i32 0, !dbg !16 ; <i32*> [#uses=2]
declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone
@ -45,7 +45,7 @@ entry:
!13 = !{!14, !15} !13 = !{!14, !15}
!14 = !DIDerivedType(tag: DW_TAG_member, name: "a", line: 10, size: 32, align: 32, file: !27, scope: !12, baseType: !5) !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) !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, variable: i32* @i) !16 = !DIGlobalVariable(name: "i", line: 5, isLocal: false, isDefinition: true, scope: !1, file: !1, type: !5)
!17 = !DILocation(line: 15, scope: !18) !17 = !DILocation(line: 15, scope: !18)
!18 = distinct !DILexicalBlock(line: 14, column: 0, file: !1, scope: !6) !18 = distinct !DILexicalBlock(line: 14, column: 0, file: !1, scope: !6)
!19 = !DILocation(line: 9, scope: !0, inlinedAt: !17) !19 = !DILocation(line: 9, scope: !0, inlinedAt: !17)

View File

@ -17,7 +17,7 @@
; CHECK-NEXT: .Laddr_sec: ; CHECK-NEXT: .Laddr_sec:
; CHECK-NEXT: .quad tls@DTPREL+32768 ; CHECK-NEXT: .quad tls@DTPREL+32768
@tls = thread_local global i32 0, align 4 @tls = thread_local global i32 0, align 4, !dbg !4
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!7, !8} !llvm.module.flags = !{!7, !8}
@ -26,7 +26,7 @@
!1 = !DIFile(filename: "tls.cpp", directory: "/tmp") !1 = !DIFile(filename: "tls.cpp", directory: "/tmp")
!2 = !{} !2 = !{}
!3 = !{!4} !3 = !{!4}
!4 = !DIGlobalVariable(name: "tls", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6, variable: i32* @tls) !4 = !DIGlobalVariable(name: "tls", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6)
!5 = !DIFile(filename: "tls.cpp", directory: "/tmp") !5 = !DIFile(filename: "tls.cpp", directory: "/tmp")
!6 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed) !6 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!7 = !{i32 2, !"Dwarf Version", i32 3} !7 = !{i32 2, !"Dwarf Version", i32 3}

View File

@ -12,7 +12,7 @@
; DW_OP_GNU_push_tls_address ; DW_OP_GNU_push_tls_address
; CHECK: .byte 224 ; CHECK: .byte 224
@tls = thread_local global i32 7, align 4 @tls = thread_local global i32 7, align 4, !dbg !4
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!7, !8} !llvm.module.flags = !{!7, !8}
@ -21,7 +21,7 @@
!1 = !DIFile(filename: "tls.cpp", directory: "/tmp") !1 = !DIFile(filename: "tls.cpp", directory: "/tmp")
!2 = !{} !2 = !{}
!3 = !{!4} !3 = !{!4}
!4 = !DIGlobalVariable(name: "tls", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6, variable: i32* @tls) !4 = !DIGlobalVariable(name: "tls", line: 1, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6)
!5 = !DIFile(filename: "tls.cpp", directory: "/tmp") !5 = !DIFile(filename: "tls.cpp", directory: "/tmp")
!6 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed) !6 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!7 = !{i32 2, !"Dwarf Version", i32 3} !7 = !{i32 2, !"Dwarf Version", i32 3}

View File

@ -3,7 +3,7 @@
; ModuleID = 'test.c' ; ModuleID = 'test.c'
@GLB = common global i32 0, align 4 @GLB = common global i32 0, align 4, !dbg !14
define i32 @f() nounwind !dbg !5 { define i32 @f() nounwind !dbg !5 {
%LOC = alloca i32, align 4 %LOC = alloca i32, align 4
@ -27,7 +27,7 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone
!8 = !{!9} !8 = !{!9}
!9 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed) !9 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!12 = !{!14} !12 = !{!14}
!14 = !DIGlobalVariable(name: "GLB", line: 1, isLocal: false, isDefinition: true, scope: null, file: !6, type: !9, variable: i32* @GLB) !14 = !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) !15 = !DILocalVariable(name: "LOC", line: 4, scope: !16, file: !6, type: !9)
!16 = distinct !DILexicalBlock(line: 3, column: 9, file: !20, scope: !5) !16 = distinct !DILexicalBlock(line: 3, column: 9, file: !20, scope: !5)
!17 = !DILocation(line: 4, column: 9, scope: !16) !17 = !DILocation(line: 4, column: 9, scope: !16)

View File

@ -11,7 +11,7 @@ target triple = "x86_64-apple-macosx"
%struct.s = type opaque %struct.s = type opaque
@i = common global %struct.s* null, align 8 @i = common global %struct.s* null, align 8, !dbg !4
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!7, !8} !llvm.module.flags = !{!7, !8}
@ -20,7 +20,7 @@ target triple = "x86_64-apple-macosx"
!1 = !DIFile(filename: "test.c", directory: "/") !1 = !DIFile(filename: "test.c", directory: "/")
!2 = !{} !2 = !{}
!3 = !{!4} !3 = !{!4}
!4 = !DIGlobalVariable(name: "s", scope: !0, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true, variable: %struct.s** @i) !4 = !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) !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) !6 = !DICompositeType(tag: DW_TAG_structure_type, name: "s", scope: !9, file: !1, line: 1, flags: DIFlagFwdDecl)
!7 = !{i32 2, !"Dwarf Version", i32 2} !7 = !{i32 2, !"Dwarf Version", i32 2}

View File

@ -42,7 +42,7 @@ source_filename = "t.cpp"
target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32" target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
target triple = "i386-pc-windows-msvc19.0.23918" target triple = "i386-pc-windows-msvc19.0.23918"
@"\01?fptr@@3P6IHHH@ZA" = global i32 (i32, i32)* @"\01?f@@YIHHH@Z", align 4 @"\01?fptr@@3P6IHHH@ZA" = global i32 (i32, i32)* @"\01?f@@YIHHH@Z", align 4, !dbg !4
; Function Attrs: nounwind readnone ; Function Attrs: nounwind readnone
define x86_fastcallcc i32 @"\01?f@@YIHHH@Z"(i32 inreg %a, i32 inreg %b) #0 !dbg !12 { define x86_fastcallcc i32 @"\01?f@@YIHHH@Z"(i32 inreg %a, i32 inreg %b) #0 !dbg !12 {
@ -67,7 +67,7 @@ attributes #1 = { nounwind readnone }
!1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild") !1 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild")
!2 = !{} !2 = !{}
!3 = !{!4} !3 = !{!4}
!4 = distinct !DIGlobalVariable(name: "fptr", linkageName: "\01?fptr@@3P6IHHH@ZA", scope: !0, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true, variable: i32 (i32, i32)** @"\01?fptr@@3P6IHHH@ZA") !4 = distinct !DIGlobalVariable(name: "fptr", linkageName: "\01?fptr@@3P6IHHH@ZA", scope: !0, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true)
!5 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !6, size: 32, align: 32) !5 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !6, size: 32, align: 32)
!6 = !DISubroutineType(cc: DW_CC_BORLAND_msfastcall, types: !7) !6 = !DISubroutineType(cc: DW_CC_BORLAND_msfastcall, types: !7)
!7 = !{!8, !8, !8} !7 = !{!8, !8, !8}

View File

@ -10,7 +10,7 @@
; CHECK: DW_AT_specification {{.*}} "_ZN3foo3barEv" ; CHECK: DW_AT_specification {{.*}} "_ZN3foo3barEv"
@_ZZN3foo3barEvE1x = constant i32 0, align 4 @_ZZN3foo3barEvE1x = constant i32 0, align 4, !dbg !20
define void @_ZN3foo3barEv() !dbg !5 { define void @_ZN3foo3barEv() !dbg !5 {
entry: entry:
@ -32,7 +32,7 @@ entry:
!12 = !DICompositeType(tag: DW_TAG_class_type, name: "foo", line: 1, size: 8, align: 8, file: !27, elements: !13) !12 = !DICompositeType(tag: DW_TAG_class_type, name: "foo", line: 1, size: 8, align: 8, file: !27, elements: !13)
!13 = !{!11} !13 = !{!11}
!18 = !{!20} !18 = !{!20}
!20 = !DIGlobalVariable(name: "x", line: 5, isLocal: true, isDefinition: true, scope: !5, file: !6, type: !21, variable: i32* @_ZZN3foo3barEvE1x) !20 = !DIGlobalVariable(name: "x", line: 5, isLocal: true, isDefinition: true, scope: !5, file: !6, type: !21)
!21 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !22) !21 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !22)
!22 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed) !22 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!25 = !DILocation(line: 6, column: 1, scope: !26) !25 = !DILocation(line: 6, column: 1, scope: !26)

View File

@ -12,8 +12,8 @@
%class.A = type { i32 } %class.A = type { i32 }
%class.B = type { i32 } %class.B = type { i32 }
@a = global %class.A zeroinitializer, align 4 @a = global %class.A zeroinitializer, align 4, !dbg !5
@b = global %class.B zeroinitializer, align 4 @b = global %class.B zeroinitializer, align 4, !dbg !17
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!29} !llvm.module.flags = !{!29}
@ -21,7 +21,7 @@
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.1 (trunk 153413) (llvm/trunk 153428)", isOptimized: false, emissionKind: FullDebug, file: !28, enums: !1, retainedTypes: !1, globals: !3, imports: !1) !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.1 (trunk 153413) (llvm/trunk 153428)", isOptimized: false, emissionKind: FullDebug, file: !28, enums: !1, retainedTypes: !1, globals: !3, imports: !1)
!1 = !{} !1 = !{}
!3 = !{!5, !17} !3 = !{!5, !17}
!5 = !DIGlobalVariable(name: "a", line: 10, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7, variable: %class.A* @a) !5 = !DIGlobalVariable(name: "a", line: 10, isLocal: false, isDefinition: true, scope: null, file: !6, type: !7)
!6 = !DIFile(filename: "foo.cpp", directory: "/Users/echristo/tmp") !6 = !DIFile(filename: "foo.cpp", directory: "/Users/echristo/tmp")
!7 = !DICompositeType(tag: DW_TAG_class_type, name: "A", line: 1, size: 32, align: 32, file: !28, elements: !8) !7 = !DICompositeType(tag: DW_TAG_class_type, name: "A", line: 1, size: 32, align: 32, file: !28, elements: !8)
!8 = !{!9, !11} !8 = !{!9, !11}
@ -31,7 +31,7 @@
!12 = !DISubroutineType(types: !13) !12 = !DISubroutineType(types: !13)
!13 = !{null, !14} !13 = !{null, !14}
!14 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial, baseType: !7) !14 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial, baseType: !7)
!17 = !DIGlobalVariable(name: "b", line: 11, isLocal: false, isDefinition: true, scope: null, file: !6, type: !18, variable: %class.B* @b) !17 = !DIGlobalVariable(name: "b", line: 11, isLocal: false, isDefinition: true, scope: null, file: !6, type: !18)
!18 = !DICompositeType(tag: DW_TAG_class_type, name: "B", line: 5, size: 32, align: 32, file: !28, elements: !19) !18 = !DICompositeType(tag: DW_TAG_class_type, name: "B", line: 5, size: 32, align: 32, file: !28, elements: !19)
!19 = !{!20, !21, !27} !19 = !{!20, !21, !27}
!20 = !DIDerivedType(tag: DW_TAG_member, name: "b", line: 7, size: 32, align: 32, flags: DIFlagPrivate, file: !28, scope: !18, baseType: !10) !20 = !DIDerivedType(tag: DW_TAG_member, name: "b", line: 7, size: 32, align: 32, flags: DIFlagPrivate, file: !28, scope: !18, baseType: !10)

View File

@ -6,7 +6,7 @@
; CHECK-NEXT: info_string ; CHECK-NEXT: info_string
@i = common global i32 0 ; <i32*> [#uses=2] @i = common global i32 0, !dbg !16 ; <i32*> [#uses=2]
declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone
@ -45,7 +45,7 @@ entry:
!13 = !{!14, !15} !13 = !{!14, !15}
!14 = !DIDerivedType(tag: DW_TAG_member, name: "a", line: 10, size: 32, align: 32, file: !27, scope: !12, baseType: !5) !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) !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, variable: i32* @i) !16 = !DIGlobalVariable(name: "i", line: 5, isLocal: false, isDefinition: true, scope: !1, file: !1, type: !5)
!17 = !DILocation(line: 15, scope: !18) !17 = !DILocation(line: 15, scope: !18)
!18 = distinct !DILexicalBlock(line: 14, column: 0, file: !1, scope: !6) !18 = distinct !DILexicalBlock(line: 14, column: 0, file: !1, scope: !6)
!19 = !DILocation(line: 9, scope: !0, inlinedAt: !17) !19 = !DILocation(line: 9, scope: !0, inlinedAt: !17)

View File

@ -31,7 +31,7 @@ target triple = "x86_64-apple-macosx10.11.0"
%struct.S0 = type { i16, i32 } %struct.S0 = type { i16, i32 }
@a = common global %struct.S0 zeroinitializer, align 4 @a = common global %struct.S0 zeroinitializer, align 4, !dbg !21
declare void @llvm.dbg.declare(metadata, metadata, metadata) declare void @llvm.dbg.declare(metadata, metadata, metadata)
declare void @llvm.dbg.value(metadata, i64, metadata, metadata) declare void @llvm.dbg.value(metadata, i64, metadata, metadata)
@ -84,7 +84,7 @@ entry:
!18 = !DISubroutineType(types: !19) !18 = !DISubroutineType(types: !19)
!19 = !{!15} !19 = !{!15}
!20 = !{!21} !20 = !{!21}
!21 = !DIGlobalVariable(name: "a", scope: !0, file: !1, line: 4, type: !11, isLocal: false, isDefinition: true, variable: %struct.S0* @a) !21 = !DIGlobalVariable(name: "a", scope: !0, file: !1, line: 4, type: !11, isLocal: false, isDefinition: true)
!22 = !{i32 2, !"Dwarf Version", i32 2} !22 = !{i32 2, !"Dwarf Version", i32 2}
!23 = !{i32 2, !"Debug Info Version", i32 3} !23 = !{i32 2, !"Debug Info Version", i32 3}
!24 = !{i32 1, !"PIC Level", i32 2} !24 = !{i32 1, !"PIC Level", i32 2}

View File

@ -10,7 +10,7 @@
target triple = "x86_64-linux-gnu" target triple = "x86_64-linux-gnu"
@_ZTId = external constant i8* @_ZTId = external constant i8*
@zed = global [1 x void ()*] [void ()* @bar] @zed = global [1 x void ()*] [void ()* @bar], !dbg !11
define void @foo() !dbg !4 { define void @foo() !dbg !4 {
ret void ret void
@ -42,7 +42,7 @@ lpad: ; preds = %0
!8 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed) !8 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!9 = distinct !DISubprogram(name: "bar_d", linkageName: "bar", scope: !5, file: !5, line: 3, type: !6, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2) !9 = distinct !DISubprogram(name: "bar_d", linkageName: "bar", scope: !5, file: !5, line: 3, type: !6, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
!10 = !{!11} !10 = !{!11}
!11 = !DIGlobalVariable(name: "zed", scope: !0, file: !5, line: 6, type: !12, isLocal: false, isDefinition: true, variable: [1 x void ()*]* @zed) !11 = !DIGlobalVariable(name: "zed", scope: !0, file: !5, line: 6, type: !12, isLocal: false, isDefinition: true)
!12 = !DICompositeType(tag: DW_TAG_array_type, baseType: !13, size: 64, align: 64, elements: !15) !12 = !DICompositeType(tag: DW_TAG_array_type, baseType: !13, size: 64, align: 64, elements: !15)
!13 = !DIDerivedType(tag: DW_TAG_typedef, name: "vifunc", file: !5, line: 5, baseType: !14) !13 = !DIDerivedType(tag: DW_TAG_typedef, name: "vifunc", file: !5, line: 5, baseType: !14)
!14 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !6, size: 64, align: 64) !14 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !6, size: 64, align: 64)

View File

@ -22,7 +22,7 @@
%struct.foo = type { i8 } %struct.foo = type { i8 }
@f = global %struct.foo zeroinitializer, align 1 @f = global %struct.foo zeroinitializer, align 1, !dbg !10
@i = external global i32 @i = external global i32
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
@ -39,7 +39,7 @@
!7 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !8) !7 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !8)
!8 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed) !8 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!9 = !{!10} !9 = !{!10}
!10 = !DIGlobalVariable(name: "f", line: 6, isLocal: false, isDefinition: true, scope: null, file: !11, type: !4, variable: %struct.foo* @f) !10 = !DIGlobalVariable(name: "f", line: 6, isLocal: false, isDefinition: true, scope: null, file: !11, type: !4)
!11 = !DIFile(filename: "simple.cpp", directory: "/tmp/dbginfo") !11 = !DIFile(filename: "simple.cpp", directory: "/tmp/dbginfo")
!12 = !{i32 2, !"Dwarf Version", i32 4} !12 = !{i32 2, !"Dwarf Version", i32 4}
!13 = !{i32 1, !"Debug Info Version", i32 3} !13 = !{i32 1, !"Debug Info Version", i32 3}

View File

@ -21,7 +21,7 @@ target triple = "x86_64-apple-macosx"
%struct.PackedBits = type <{ i8, i32 }> %struct.PackedBits = type <{ i8, i32 }>
@s = common global %struct.PackedBits zeroinitializer, align 1 @s = common global %struct.PackedBits zeroinitializer, align 1, !dbg !4
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!14, !15, !16} !llvm.module.flags = !{!14, !15, !16}
@ -31,7 +31,7 @@ target triple = "x86_64-apple-macosx"
!1 = !DIFile(filename: "bitfield.c", directory: "/Volumes/Data/llvm") !1 = !DIFile(filename: "bitfield.c", directory: "/Volumes/Data/llvm")
!2 = !{} !2 = !{}
!3 = !{!4} !3 = !{!4}
!4 = distinct !DIGlobalVariable(name: "s", scope: !0, file: !1, line: 8, type: !5, isLocal: false, isDefinition: true, variable: %struct.PackedBits* @s) !4 = distinct !DIGlobalVariable(name: "s", scope: !0, file: !1, line: 8, type: !5, isLocal: false, isDefinition: true)
!5 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "PackedBits", file: !1, line: 3, size: 40, align: 8, elements: !6) !5 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "PackedBits", file: !1, line: 3, size: 40, align: 8, elements: !6)
!6 = !{!7, !9, !13} !6 = !{!7, !9, !13}

View File

@ -48,7 +48,7 @@ target triple = "x86_64-apple-macosx"
%struct.bitfield = type <{ i8, [3 x i8], i64 }> %struct.bitfield = type <{ i8, [3 x i8], i64 }>
@b = common global %struct.bitfield zeroinitializer, align 4 @b = common global %struct.bitfield zeroinitializer, align 4, !dbg !4
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!13, !14, !15} !llvm.module.flags = !{!13, !14, !15}
@ -58,7 +58,7 @@ target triple = "x86_64-apple-macosx"
!1 = !DIFile(filename: "bitfields.c", directory: "/") !1 = !DIFile(filename: "bitfields.c", directory: "/")
!2 = !{} !2 = !{}
!3 = !{!4} !3 = !{!4}
!4 = !DIGlobalVariable(name: "b", scope: !0, file: !5, line: 8, type: !6, isLocal: false, isDefinition: true, variable: %struct.bitfield* @b) !4 = !DIGlobalVariable(name: "b", scope: !0, file: !5, line: 8, type: !6, isLocal: false, isDefinition: true)
!5 = !DIFile(filename: "bitfields.c", directory: "/") !5 = !DIFile(filename: "bitfields.c", directory: "/")
!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "bitfield", file: !5, line: 1, size: 96, align: 32, elements: !7) !6 = !DICompositeType(tag: DW_TAG_structure_type, name: "bitfield", file: !5, line: 1, size: 96, align: 32, elements: !7)
!7 = !{!8, !10, !11, !12} !7 = !{!8, !10, !11, !12}

View File

@ -11,7 +11,7 @@
%struct.foo = type {} %struct.foo = type {}
@f = common global %struct.foo zeroinitializer, align 1 @f = common global %struct.foo zeroinitializer, align 1, !dbg !4
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!7, !8} !llvm.module.flags = !{!7, !8}
@ -21,7 +21,7 @@
!1 = !DIFile(filename: "simple.c", directory: "/tmp/dbginfo") !1 = !DIFile(filename: "simple.c", directory: "/tmp/dbginfo")
!2 = !{} !2 = !{}
!3 = !{!4} !3 = !{!4}
!4 = !DIGlobalVariable(name: "f", line: 2, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6, variable: %struct.foo* @f) !4 = !DIGlobalVariable(name: "f", line: 2, isLocal: false, isDefinition: true, scope: null, file: !5, type: !6)
!5 = !DIFile(filename: "simple.c", directory: "/tmp/dbginfo") !5 = !DIFile(filename: "simple.c", directory: "/tmp/dbginfo")
!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "foo", line: 1, align: 8, file: !1, elements: !2) !6 = !DICompositeType(tag: DW_TAG_structure_type, name: "foo", line: 1, align: 8, file: !1, elements: !2)
!7 = !{i32 2, !"Dwarf Version", i32 4} !7 = !{i32 2, !"Dwarf Version", i32 4}

View File

@ -118,7 +118,7 @@ declare void @_Z8moz_freePv(i8*)
!45 = !DILocalVariable(name: "this", line: 4, arg: 1, flags: DIFlagArtificial, scope: !31, file: !6, type: !34) !45 = !DILocalVariable(name: "this", line: 4, arg: 1, flags: DIFlagArtificial, scope: !31, file: !6, type: !34)
!46 = !DILocalVariable(name: "aValue", line: 4, arg: 2, scope: !31, file: !6, type: !9) !46 = !DILocalVariable(name: "aValue", line: 4, arg: 2, scope: !31, file: !6, type: !9)
!47 = !{!49} !47 = !{!49}
!49 = !DIGlobalVariable(name: "mRefCnt", line: 9, isLocal: false, isDefinition: true, scope: null, file: !6, type: !37, variable: i32* null) !49 = !DIGlobalVariable(name: "mRefCnt", line: 9, isLocal: false, isDefinition: true, scope: null, file: !6, type: !37)
!50 = !DILocation(line: 5, column: 5, scope: !51, inlinedAt: !52) !50 = !DILocation(line: 5, column: 5, scope: !51, inlinedAt: !52)
!51 = distinct !DILexicalBlock(line: 4, column: 29, file: !6, scope: !31) !51 = distinct !DILexicalBlock(line: 4, column: 29, file: !6, scope: !31)
!52 = !DILocation(line: 15, scope: !53) !52 = !DILocation(line: 15, scope: !53)

View File

@ -20,7 +20,7 @@
%class.A = type { i32 } %class.A = type { i32 }
@a = global %class.A zeroinitializer, align 4 @a = global %class.A zeroinitializer, align 4, !dbg !22
@llvm.global_ctors = appending global [1 x { i32, void ()* }] [{ i32, void ()* } { i32 65535, void ()* @_GLOBAL__I_a }] @llvm.global_ctors = appending global [1 x { i32, void ()* }] [{ i32, void ()* } { i32 65535, void ()* @_GLOBAL__I_a }]
define internal void @__cxx_global_var_init() section ".text.startup" !dbg !14 { define internal void @__cxx_global_var_init() section ".text.startup" !dbg !14 {
@ -81,7 +81,7 @@ attributes #1 = { nounwind readnone }
!19 = distinct !DISubprogram(name: "", linkageName: "_GLOBAL__I_a", line: 3, isLocal: true, isDefinition: true, virtualIndex: 6, flags: DIFlagArtificial, isOptimized: false, unit: !0, scopeLine: 3, file: !1, scope: !15, type: !20, variables: !2) !19 = distinct !DISubprogram(name: "", linkageName: "_GLOBAL__I_a", line: 3, isLocal: true, isDefinition: true, virtualIndex: 6, flags: DIFlagArtificial, isOptimized: false, unit: !0, scopeLine: 3, file: !1, scope: !15, type: !20, variables: !2)
!20 = !DISubroutineType(types: !2) !20 = !DISubroutineType(types: !2)
!21 = !{!22} !21 = !{!22}
!22 = !DIGlobalVariable(name: "a", line: 8, isLocal: false, isDefinition: true, scope: null, file: !15, type: !4, variable: %class.A* @a) !22 = !DIGlobalVariable(name: "a", line: 8, isLocal: false, isDefinition: true, scope: null, file: !15, type: !4)
!23 = !{i32 2, !"Dwarf Version", i32 4} !23 = !{i32 2, !"Dwarf Version", i32 4}
!24 = !{i32 1, !"Debug Info Version", i32 3} !24 = !{i32 1, !"Debug Info Version", i32 3}
!25 = !{!"clang version 3.5 (trunk 199923) (llvm/trunk 199940)"} !25 = !{!"clang version 3.5 (trunk 199923) (llvm/trunk 199940)"}

View File

@ -28,7 +28,7 @@
%struct.foo = type { i8, i32 } %struct.foo = type { i8, i32 }
@f = global %struct.foo zeroinitializer, align 4 @f = global %struct.foo zeroinitializer, align 4, !dbg !11
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!13, !15} !llvm.module.flags = !{!13, !15}
@ -45,7 +45,7 @@
!8 = !DIDerivedType(tag: DW_TAG_member, name: "i", line: 3, size: 32, align: 32, offset: 32, file: !1, scope: !4, baseType: !9) !8 = !DIDerivedType(tag: DW_TAG_member, name: "i", line: 3, size: 32, align: 32, offset: 32, file: !1, scope: !4, baseType: !9)
!9 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed) !9 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!10 = !{!11} !10 = !{!11}
!11 = !DIGlobalVariable(name: "f", line: 6, isLocal: false, isDefinition: true, scope: null, file: !12, type: !4, variable: %struct.foo* @f) !11 = !DIGlobalVariable(name: "f", line: 6, isLocal: false, isDefinition: true, scope: null, file: !12, type: !4)
!12 = !DIFile(filename: "data_member_location.cpp", directory: "/tmp/dbginfo") !12 = !DIFile(filename: "data_member_location.cpp", directory: "/tmp/dbginfo")
!13 = !{i32 2, !"Dwarf Version", i32 4} !13 = !{i32 2, !"Dwarf Version", i32 4}
!14 = !{!"clang version 3.4 "} !14 = !{!"clang version 3.4 "}

View File

@ -3,7 +3,7 @@
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.7.2" target triple = "x86_64-apple-macosx10.7.2"
@s = common global [4294967296 x i8] zeroinitializer, align 16 @s = common global [4294967296 x i8] zeroinitializer, align 16, !dbg !13
; CHECK: .quad 4294967296 ## DW_AT_count ; CHECK: .quad 4294967296 ## DW_AT_count
define void @bar() nounwind uwtable ssp !dbg !5 { define void @bar() nounwind uwtable ssp !dbg !5 {
@ -22,7 +22,7 @@ entry:
!7 = !DISubroutineType(types: !8) !7 = !DISubroutineType(types: !8)
!8 = !{null} !8 = !{null}
!11 = !{!13} !11 = !{!13}
!13 = !DIGlobalVariable(name: "s", line: 2, isLocal: false, isDefinition: true, scope: null, file: !6, type: !14, variable: [4294967296 x i8]* @s) !13 = !DIGlobalVariable(name: "s", line: 2, isLocal: false, isDefinition: true, scope: null, file: !6, type: !14)
!14 = !DICompositeType(tag: DW_TAG_array_type, size: 34359738368, align: 8, baseType: !15, elements: !16) !14 = !DICompositeType(tag: DW_TAG_array_type, size: 34359738368, align: 8, baseType: !15, elements: !16)
!15 = !DIBasicType(tag: DW_TAG_base_type, name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char) !15 = !DIBasicType(tag: DW_TAG_base_type, name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
!16 = !{!17} !16 = !{!17}

View File

@ -41,7 +41,7 @@
%struct.S1 = type { float*, i32 } %struct.S1 = type { float*, i32 }
@p = common global %struct.S1 zeroinitializer, align 8 @p = common global %struct.S1 zeroinitializer, align 8, !dbg !19
define i32 @foo(%struct.S1* nocapture %sp, i32 %nums) nounwind optsize ssp !dbg !0 { define i32 @foo(%struct.S1* nocapture %sp, i32 %nums) nounwind optsize ssp !dbg !0 {
entry: entry:
@ -93,7 +93,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
!16 = !DIBasicType(tag: DW_TAG_base_type, name: "float", size: 32, align: 32, encoding: DW_ATE_float) !16 = !DIBasicType(tag: DW_TAG_base_type, name: "float", size: 32, align: 32, encoding: DW_ATE_float)
!17 = !DIDerivedType(tag: DW_TAG_member, name: "nums", line: 3, size: 32, align: 32, offset: 64, file: !42, scope: !1, baseType: !5) !17 = !DIDerivedType(tag: DW_TAG_member, name: "nums", line: 3, size: 32, align: 32, offset: 64, file: !42, scope: !1, baseType: !5)
!18 = !DILocalVariable(name: "nums", line: 7, arg: 2, scope: !0, file: !1, type: !5) !18 = !DILocalVariable(name: "nums", line: 7, arg: 2, scope: !0, file: !1, type: !5)
!19 = !DIGlobalVariable(name: "p", line: 14, isLocal: false, isDefinition: true, scope: !2, file: !1, type: !11, variable: %struct.S1* @p) !19 = !DIGlobalVariable(name: "p", line: 14, isLocal: false, isDefinition: true, scope: !2, file: !1, type: !11)
!20 = !DILocation(line: 7, column: 13, scope: !0) !20 = !DILocation(line: 7, column: 13, scope: !0)
!21 = !DILocation(line: 7, column: 21, scope: !0) !21 = !DILocation(line: 7, column: 21, scope: !0)
!22 = !DILocation(line: 9, column: 3, scope: !23) !22 = !DILocation(line: 9, column: 3, scope: !23)

View File

@ -36,7 +36,7 @@
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc18.0.0" target triple = "x86_64-pc-windows-msvc18.0.0"
@x = common global i32 0, align 4 @x = common global i32 0, align 4, !dbg !15
; Function Attrs: nounwind uwtable ; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** nocapture readnone %argv) #0 !dbg !4 { define i32 @main(i32 %argc, i8** nocapture readnone %argv) #0 !dbg !4 {
@ -89,7 +89,7 @@ attributes #3 = { nounwind }
!12 = !DILocalVariable(name: "argv", arg: 2, scope: !4, file: !1, line: 4, type: !8) !12 = !DILocalVariable(name: "argv", arg: 2, scope: !4, file: !1, line: 4, type: !8)
!13 = !DILocalVariable(name: "argc", arg: 1, scope: !4, file: !1, line: 4, type: !7) !13 = !DILocalVariable(name: "argc", arg: 1, scope: !4, file: !1, line: 4, type: !7)
!14 = !{!15} !14 = !{!15}
!15 = !DIGlobalVariable(name: "x", scope: !0, file: !1, line: 1, type: !16, isLocal: false, isDefinition: true, variable: i32* @x) !15 = !DIGlobalVariable(name: "x", scope: !0, file: !1, line: 1, type: !16, isLocal: false, isDefinition: true)
!16 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !7) !16 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !7)
!17 = !{i32 2, !"Dwarf Version", i32 4} !17 = !{i32 2, !"Dwarf Version", i32 4}
!18 = !{i32 2, !"Debug Info Version", i32 3} !18 = !{i32 2, !"Debug Info Version", i32 3}

View File

@ -91,9 +91,9 @@ target triple = "x86_64-apple-macosx10.10.0"
%class.B = type { i8 } %class.B = type { i8 }
%union.U = type { i32 } %union.U = type { i32 }
@a = global %struct.A zeroinitializer, align 1 @a = global %struct.A zeroinitializer, align 1, !dbg !35
@b = global %class.B zeroinitializer, align 1 @b = global %class.B zeroinitializer, align 1, !dbg !36
@u = global %union.U zeroinitializer, align 4 @u = global %union.U zeroinitializer, align 4, !dbg !37
; Function Attrs: nounwind ssp uwtable ; Function Attrs: nounwind ssp uwtable
define void @_Z4freev() #0 !dbg !30 { define void @_Z4freev() #0 !dbg !30 {
@ -140,9 +140,9 @@ attributes #0 = { nounwind ssp uwtable }
!32 = !DISubroutineType(types: !33) !32 = !DISubroutineType(types: !33)
!33 = !{null} !33 = !{null}
!34 = !{!35, !36, !37} !34 = !{!35, !36, !37}
!35 = !DIGlobalVariable(name: "a", line: 37, isLocal: false, isDefinition: true, scope: null, file: !31, type: !4, variable: %struct.A* @a) !35 = !DIGlobalVariable(name: "a", line: 37, isLocal: false, isDefinition: true, scope: null, file: !31, type: !4)
!36 = !DIGlobalVariable(name: "b", line: 38, isLocal: false, isDefinition: true, scope: null, file: !31, type: !12, variable: %class.B* @b) !36 = !DIGlobalVariable(name: "b", line: 38, isLocal: false, isDefinition: true, scope: null, file: !31, type: !12)
!37 = !DIGlobalVariable(name: "u", line: 39, isLocal: false, isDefinition: true, scope: null, file: !31, type: !22, variable: %union.U* @u) !37 = !DIGlobalVariable(name: "u", line: 39, isLocal: false, isDefinition: true, scope: null, file: !31, type: !22)
!38 = !{i32 2, !"Dwarf Version", i32 2} !38 = !{i32 2, !"Dwarf Version", i32 2}
!39 = !{i32 2, !"Debug Info Version", i32 3} !39 = !{i32 2, !"Debug Info Version", i32 3}
!40 = !{!"clang version 3.6.0 "} !40 = !{!"clang version 3.6.0 "}

View File

@ -139,10 +139,10 @@ target triple = "x86_64-apple-darwin"
; CHECK: DW_AT_bit_offset {{.*}} (0x1f) ; CHECK: DW_AT_bit_offset {{.*}} (0x1f)
; CHECK: DW_AT_data_member_location {{.*}}0c ; CHECK: DW_AT_data_member_location {{.*}}0c
@l0 = common global %struct.layout0 zeroinitializer, align 8 @l0 = common global %struct.layout0 zeroinitializer, align 8, !dbg !4
@l1 = common global %struct.layout1 zeroinitializer, align 4 @l1 = common global %struct.layout1 zeroinitializer, align 4, !dbg !18
@l2 = common global %struct.layout2 zeroinitializer, align 1 @l2 = common global %struct.layout2 zeroinitializer, align 1, !dbg !25
@l3 = common global %struct.layout3 zeroinitializer, align 4 @l3 = common global %struct.layout3 zeroinitializer, align 4, !dbg !35
!llvm.dbg.cu = !{!0} !llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!45, !46} !llvm.module.flags = !{!45, !46}
@ -152,7 +152,7 @@ target triple = "x86_64-apple-darwin"
!1 = !DIFile(filename: "/llvm/tools/clang/test/CodeGen/<stdin>", directory: "/llvm/_build.ninja.release") !1 = !DIFile(filename: "/llvm/tools/clang/test/CodeGen/<stdin>", directory: "/llvm/_build.ninja.release")
!2 = !{} !2 = !{}
!3 = !{!4, !18, !25, !35} !3 = !{!4, !18, !25, !35}
!4 = !DIGlobalVariable(name: "l0", scope: !0, file: !5, line: 88, type: !6, isLocal: false, isDefinition: true, variable: %struct.layout0* @l0) !4 = !DIGlobalVariable(name: "l0", scope: !0, file: !5, line: 88, type: !6, isLocal: false, isDefinition: true)
!5 = !DIFile(filename: "/llvm/tools/clang/test/CodeGen/debug-info-packed-struct.c", directory: "/llvm/_build.ninja.release") !5 = !DIFile(filename: "/llvm/tools/clang/test/CodeGen/debug-info-packed-struct.c", directory: "/llvm/_build.ninja.release")
!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout0", file: !5, line: 15, size: 192, align: 64, elements: !7) !6 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout0", file: !5, line: 15, size: 192, align: 64, elements: !7)
!7 = !{!8, !10, !17} !7 = !{!8, !10, !17}
@ -166,14 +166,14 @@ target triple = "x86_64-apple-darwin"
!15 = !DIDerivedType(tag: DW_TAG_member, name: "l", scope: !11, file: !5, line: 13, baseType: !16, size: 60, offset: 4) !15 = !DIDerivedType(tag: DW_TAG_member, name: "l", scope: !11, file: !5, line: 13, baseType: !16, size: 60, offset: 4)
!16 = !DIBasicType(name: "long long int", size: 64, align: 64, encoding: DW_ATE_signed) !16 = !DIBasicType(name: "long long int", size: 64, align: 64, encoding: DW_ATE_signed)
!17 = !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs16", scope: !6, file: !5, line: 18, baseType: !14, size: 1, align: 32, offset: 128) !17 = !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs16", scope: !6, file: !5, line: 18, baseType: !14, size: 1, align: 32, offset: 128)
!18 = !DIGlobalVariable(name: "l1", scope: !0, file: !5, line: 89, type: !19, isLocal: false, isDefinition: true, variable: %struct.layout1* @l1) !18 = !DIGlobalVariable(name: "l1", scope: !0, file: !5, line: 89, type: !19, isLocal: false, isDefinition: true)
!19 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout1", file: !5, line: 34, size: 96, align: 32, elements: !20) !19 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout1", file: !5, line: 34, size: 96, align: 32, elements: !20)
!20 = !{!21, !22, !24} !20 = !{!21, !22, !24}
!21 = !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs0", scope: !19, file: !5, line: 35, baseType: !9, size: 8, align: 8) !21 = !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs0", scope: !19, file: !5, line: 35, baseType: !9, size: 8, align: 8)
!22 = !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs1", scope: !19, file: !5, line: 36, baseType: !23, size: 64, align: 8, offset: 8) !22 = !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs1", scope: !19, file: !5, line: 36, baseType: !23, size: 64, align: 8, offset: 8)
!23 = !DICompositeType(tag: DW_TAG_structure_type, name: "size8_anon", file: !5, line: 30, size: 64, align: 8, elements: !2) !23 = !DICompositeType(tag: DW_TAG_structure_type, name: "size8_anon", file: !5, line: 30, size: 64, align: 8, elements: !2)
!24 = !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs9", scope: !19, file: !5, line: 37, baseType: !14, size: 1, align: 32, offset: 72) !24 = !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs9", scope: !19, file: !5, line: 37, baseType: !14, size: 1, align: 32, offset: 72)
!25 = !DIGlobalVariable(name: "l2", scope: !0, file: !5, line: 90, type: !26, isLocal: false, isDefinition: true, variable: %struct.layout2* @l2) !25 = !DIGlobalVariable(name: "l2", scope: !0, file: !5, line: 90, type: !26, isLocal: false, isDefinition: true)
!26 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout2", file: !5, line: 54, size: 80, align: 8, elements: !27) !26 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout2", file: !5, line: 54, size: 80, align: 8, elements: !27)
!27 = !{!28, !29, !34} !27 = !{!28, !29, !34}
!28 = !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs0", scope: !26, file: !5, line: 55, baseType: !9, size: 8, align: 8) !28 = !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs0", scope: !26, file: !5, line: 55, baseType: !9, size: 8, align: 8)
@ -183,7 +183,7 @@ target triple = "x86_64-apple-darwin"
!32 = !DIDerivedType(tag: DW_TAG_member, name: "i", scope: !30, file: !5, line: 51, baseType: !14, size: 4, align: 32) !32 = !DIDerivedType(tag: DW_TAG_member, name: "i", scope: !30, file: !5, line: 51, baseType: !14, size: 4, align: 32)
!33 = !DIDerivedType(tag: DW_TAG_member, name: "l", scope: !30, file: !5, line: 52, baseType: !16, size: 60, offset: 4) !33 = !DIDerivedType(tag: DW_TAG_member, name: "l", scope: !30, file: !5, line: 52, baseType: !16, size: 60, offset: 4)
!34 = !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs9", scope: !26, file: !5, line: 57, baseType: !14, size: 1, align: 32, offset: 72) !34 = !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs9", scope: !26, file: !5, line: 57, baseType: !14, size: 1, align: 32, offset: 72)
!35 = !DIGlobalVariable(name: "l3", scope: !0, file: !5, line: 91, type: !36, isLocal: false, isDefinition: true, variable: %struct.layout3* @l3) !35 = !DIGlobalVariable(name: "l3", scope: !0, file: !5, line: 91, type: !36, isLocal: false, isDefinition: true)
!36 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout3", file: !5, line: 76, size: 128, align: 32, elements: !37) !36 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout3", file: !5, line: 76, size: 128, align: 32, elements: !37)
!37 = !{!38, !39, !44} !37 = !{!38, !39, !44}
!38 = !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs0", scope: !36, file: !5, line: 77, baseType: !9, size: 8, align: 8) !38 = !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs0", scope: !36, file: !5, line: 77, baseType: !9, size: 8, align: 8)

Some files were not shown because too many files have changed in this diff Show More