void replaceFunctionField(unsigned Elt, Function *F);
public:
- explicit DIDescriptor() : DbgNode(0) {}
- explicit DIDescriptor(const MDNode *N) : DbgNode(N) {}
- explicit DIDescriptor(const DIFile F);
- explicit DIDescriptor(const DISubprogram F);
- explicit DIDescriptor(const DILexicalBlockFile F);
- explicit DIDescriptor(const DILexicalBlock F);
- explicit DIDescriptor(const DIVariable F);
- explicit DIDescriptor(const DIType F);
+ explicit DIDescriptor(const MDNode *N = 0) : DbgNode(N) {}
bool Verify() const;
return !operator==(Other);
}
- unsigned getTag() const {
+ uint16_t getTag() const {
return getUnsignedField(0) & ~LLVMDebugVersionMask;
}
bool isSubrange() const;
bool isEnumerator() const;
bool isType() const;
- bool isGlobal() const;
bool isUnspecifiedParameter() const;
bool isTemplateTypeParameter() const;
bool isTemplateValueParameter() const;
/// DIArray - This descriptor holds an array of descriptors.
class DIArray : public DIDescriptor {
public:
- explicit DIArray(const MDNode *N = 0)
- : DIDescriptor(N) {}
+ explicit DIArray(const MDNode *N = 0) : DIDescriptor(N) {}
unsigned getNumElements() const;
DIDescriptor getElement(unsigned Idx) const {
public:
explicit DIScope(const MDNode *N = 0) : DIDescriptor (N) {}
+ /// Gets the parent scope for this scope node or returns a
+ /// default constructed scope.
+ DIScope getContext() const;
StringRef getFilename() const;
StringRef getDirectory() const;
};
void printInternal(raw_ostream &OS) const;
public:
+ DIType(const MDNode *N = 0) : DIScope(N) {}
+
/// Verify - Verify that a type descriptor is well formed.
bool Verify() const;
- explicit DIType(const MDNode *N);
- explicit DIType() {}
DIScope getContext() const { return getFieldAs<DIScope>(2); }
StringRef getName() const { return getStringField(3); }
void printInternal(raw_ostream &OS) const;
public:
- explicit DIDerivedType(const MDNode *N = 0)
- : DIType(N) {}
+ explicit DIDerivedType(const MDNode *N = 0) : DIType(N) {}
DIType getTypeDerivedFrom() const { return getFieldAs<DIType>(9); }
friend class DIDescriptor;
void printInternal(raw_ostream &OS) const;
public:
- explicit DICompositeType(const MDNode *N = 0)
- : DIDerivedType(N) {
- if (N && !isCompositeType())
- DbgNode = 0;
- }
+ explicit DICompositeType(const MDNode *N = 0) : DIDerivedType(N) {}
DIArray getTypeArray() const { return getFieldAs<DIArray>(10); }
void setTypeArray(DIArray Elements, DIArray TParams = DIArray());
+ void addMember(DIDescriptor D);
unsigned getRunTimeLang() const { return getUnsignedField(11); }
DICompositeType getContainingType() const {
return getFieldAs<DICompositeType>(12);
class DIFile : public DIScope {
friend class DIDescriptor;
public:
- explicit DIFile(const MDNode *N = 0) : DIScope(N) {
- if (DbgNode && !isFile())
- DbgNode = 0;
- }
+ explicit DIFile(const MDNode *N = 0) : DIScope(N) {}
MDNode *getFileNode() const;
bool Verify() const;
};
friend class DIDescriptor;
void printInternal(raw_ostream &OS) const;
public:
- explicit DIVariable(const MDNode *N = 0)
- : DIDescriptor(N) {}
+ explicit DIVariable(const MDNode *N = 0) : DIDescriptor(N) {}
DIScope getContext() const { return getFieldAs<DIScope>(1); }
StringRef getName() const { return getStringField(2); }
/// cleanseInlinedVariable - Remove inlined scope from the variable.
DIVariable cleanseInlinedVariable(MDNode *DV, LLVMContext &VMContext);
- /// DebugInfoFinder tries to list all debug info MDNodes in a module. To
+ /// DebugInfoFinder tries to list all debug info MDNodes used in a module. To
/// list debug info MDNodes used by an instruction, DebugInfoFinder uses
- /// processDeclare and processValue. processModule will go through
- /// all DICompileUnits and list debug info MDNodes used by the CUs.
+ /// processDeclare, processValue and processLocation to handle DbgDeclareInst,
+ /// DbgValueInst and DbgLoc attached to instructions. processModule will go
+ /// through all DICompileUnits in llvm.dbg.cu and list debug info MDNodes
+ /// used by the CUs.
class DebugInfoFinder {
public:
/// processModule - Process entire module and collect debug info
void processDeclare(const DbgDeclareInst *DDI);
/// Process DbgValueInst.
void processValue(const DbgValueInst *DVI);
+ /// processLocation - Process DILocation.
+ void processLocation(DILocation Loc);
/// Clear all lists.
void reset();
/// processSubprogram - Process DISubprogram.
void processSubprogram(DISubprogram SP);
- /// processLocation - Process DILocation.
- void processLocation(DILocation Loc);
-
void processScope(DIScope Scope);
/// addCompileUnit - Add compile unit into CUs.