Only mark dump() function definitions 'used' in debug builds

This has the dual effect of (1) enabling more dead-stripping in release builds
and (2) ensuring that debug helper functions aren't stripped away in debug
builds, as they're intended to be called from the debugger.

Note that the attribute is applied to definitions rather than declarations in
headers going forward because it's now conditional on NDEBUG:

  /// \brief Mark debug helper function definitions like dump() that should not be
  /// stripped from debug builds.

Requires corresponding macro added in LLVM r198456.

llvm-svn: 198489
This commit is contained in:
Alp Toker 2014-01-04 13:47:14 +00:00
parent c2dee7dc74
commit ef6b007dc5
17 changed files with 44 additions and 59 deletions

View File

@ -194,9 +194,9 @@ public:
const char *getCommentKindName() const;
LLVM_ATTRIBUTE_USED void dump() const;
LLVM_ATTRIBUTE_USED void dumpColor() const;
LLVM_ATTRIBUTE_USED void dump(const ASTContext &Context) const;
void dump() const;
void dumpColor() const;
void dump(const ASTContext &Context) const;
void dump(raw_ostream &OS, const CommandTraits *Traits,
const SourceManager *SM) const;

View File

@ -938,9 +938,9 @@ public:
raw_ostream &Out, const PrintingPolicy &Policy,
unsigned Indentation = 0);
// Debuggers don't usually respect default arguments.
LLVM_ATTRIBUTE_USED void dump() const;
void dump() const;
// Same as dump(), but forces color printing.
LLVM_ATTRIBUTE_USED void dumpColor() const;
void dumpColor() const;
void dump(raw_ostream &Out) const;
private:
@ -1616,9 +1616,9 @@ public:
static bool classof(const Decl *D);
static bool classof(const DeclContext *D) { return true; }
LLVM_ATTRIBUTE_USED void dumpDeclContext() const;
LLVM_ATTRIBUTE_USED void dumpLookups() const;
LLVM_ATTRIBUTE_USED void dumpLookups(llvm::raw_ostream &OS) const;
void dumpDeclContext() const;
void dumpLookups() const;
void dumpLookups(llvm::raw_ostream &OS) const;
private:
void reconcileExternalVisibleStorage();

View File

@ -371,12 +371,12 @@ public:
/// \brief Dumps the specified AST fragment and all subtrees to
/// \c llvm::errs().
LLVM_ATTRIBUTE_USED void dump() const;
LLVM_ATTRIBUTE_USED void dump(SourceManager &SM) const;
void dump() const;
void dump(SourceManager &SM) const;
void dump(raw_ostream &OS, SourceManager &SM) const;
/// dumpColor - same as dump(), but forces color highlighting.
LLVM_ATTRIBUTE_USED void dumpColor() const;
void dumpColor() const;
/// dumpPretty/printPretty - These two methods do a "pretty print" of the AST
/// back to its original source language syntax.

View File

@ -1797,7 +1797,7 @@ public:
return CanonicalType;
}
CanQualType getCanonicalTypeUnqualified() const; // in CanonicalType.h
LLVM_ATTRIBUTE_USED void dump() const;
void dump() const;
friend class ASTReader;
friend class ASTWriter;

View File

@ -252,7 +252,7 @@ public:
virtual void Profile(llvm::FoldingSetNodeID &ID) = 0;
void dumpStack(raw_ostream &OS, StringRef Indent = "") const;
LLVM_ATTRIBUTE_USED void dumpStack() const;
void dumpStack() const;
public:
static void ProfileCommon(llvm::FoldingSetNodeID &ID,

View File

@ -172,7 +172,7 @@ public:
}
void print(raw_ostream &OS, const SourceManager &SM) const;
LLVM_ATTRIBUTE_USED std::string printToString(const SourceManager &SM) const;
std::string printToString(const SourceManager &SM) const;
void dump(const SourceManager &SM) const;
};
@ -331,7 +331,7 @@ public:
/// \brief Prints information about this FullSourceLoc to stderr.
///
/// This is useful for debugging.
LLVM_ATTRIBUTE_USED void dump() const;
void dump() const;
friend inline bool
operator==(const FullSourceLoc &LHS, const FullSourceLoc &RHS) {

View File

@ -423,7 +423,7 @@ public:
return Result;
}
LLVM_ATTRIBUTE_USED void dump() const;
void dump() const;
};
class PathDiagnosticSpotPiece : public PathDiagnosticPiece {

View File

@ -379,7 +379,7 @@ public:
// For debugging purposes only
void dump(raw_ostream &Out) const;
LLVM_ATTRIBUTE_USED void dump() const;
void dump() const;
};

View File

@ -2096,27 +2096,25 @@ void ASTDumper::visitVerbatimLineComment(const VerbatimLineComment *C) {
// Decl method implementations
//===----------------------------------------------------------------------===//
void Decl::dump() const {
dump(llvm::errs());
}
LLVM_DUMP_METHOD void Decl::dump() const { dump(llvm::errs()); }
void Decl::dump(raw_ostream &OS) const {
LLVM_DUMP_METHOD void Decl::dump(raw_ostream &OS) const {
ASTDumper P(OS, &getASTContext().getCommentCommandTraits(),
&getASTContext().getSourceManager());
P.dumpDecl(this);
}
void Decl::dumpColor() const {
LLVM_DUMP_METHOD void Decl::dumpColor() const {
ASTDumper P(llvm::errs(), &getASTContext().getCommentCommandTraits(),
&getASTContext().getSourceManager(), /*ShowColors*/true);
P.dumpDecl(this);
}
void DeclContext::dumpLookups() const {
LLVM_DUMP_METHOD void DeclContext::dumpLookups() const {
dumpLookups(llvm::errs());
}
void DeclContext::dumpLookups(raw_ostream &OS) const {
LLVM_DUMP_METHOD void DeclContext::dumpLookups(raw_ostream &OS) const {
const DeclContext *DC = this;
while (!DC->isTranslationUnit())
DC = DC->getParent();
@ -2129,21 +2127,21 @@ void DeclContext::dumpLookups(raw_ostream &OS) const {
// Stmt method implementations
//===----------------------------------------------------------------------===//
void Stmt::dump(SourceManager &SM) const {
LLVM_DUMP_METHOD void Stmt::dump(SourceManager &SM) const {
dump(llvm::errs(), SM);
}
void Stmt::dump(raw_ostream &OS, SourceManager &SM) const {
LLVM_DUMP_METHOD void Stmt::dump(raw_ostream &OS, SourceManager &SM) const {
ASTDumper P(OS, 0, &SM);
P.dumpStmt(this);
}
void Stmt::dump() const {
LLVM_DUMP_METHOD void Stmt::dump() const {
ASTDumper P(llvm::errs(), 0, 0);
P.dumpStmt(this);
}
void Stmt::dumpColor() const {
LLVM_DUMP_METHOD void Stmt::dumpColor() const {
ASTDumper P(llvm::errs(), 0, 0, /*ShowColors*/true);
P.dumpStmt(this);
}
@ -2152,11 +2150,9 @@ void Stmt::dumpColor() const {
// Comment method implementations
//===----------------------------------------------------------------------===//
void Comment::dump() const {
dump(llvm::errs(), 0, 0);
}
LLVM_DUMP_METHOD void Comment::dump() const { dump(llvm::errs(), 0, 0); }
void Comment::dump(const ASTContext &Context) const {
LLVM_DUMP_METHOD void Comment::dump(const ASTContext &Context) const {
dump(llvm::errs(), &Context.getCommentCommandTraits(),
&Context.getSourceManager());
}
@ -2168,7 +2164,7 @@ void Comment::dump(raw_ostream &OS, const CommandTraits *Traits,
D.dumpFullComment(FC);
}
void Comment::dumpColor() const {
LLVM_DUMP_METHOD void Comment::dumpColor() const {
const FullComment *FC = dyn_cast<FullComment>(this);
ASTDumper D(llvm::errs(), 0, 0, /*ShowColors*/true);
D.dumpFullComment(FC);

View File

@ -167,7 +167,7 @@ void Decl::printGroup(Decl** Begin, unsigned NumDecls,
}
}
void DeclContext::dumpDeclContext() const {
LLVM_DUMP_METHOD void DeclContext::dumpDeclContext() const {
// Get the translation unit
const DeclContext *DC = this;
while (!DC->isTranslationUnit())

View File

@ -1423,13 +1423,10 @@ void QualType::dump(const char *msg) const {
print(llvm::errs(), PrintingPolicy(LO), "identifier");
llvm::errs() << '\n';
}
void QualType::dump() const {
dump(0);
}
void Type::dump() const {
QualType(this, 0).dump();
}
LLVM_DUMP_METHOD void QualType::dump() const { dump(0); }
LLVM_DUMP_METHOD void Type::dump() const { QualType(this, 0).dump(); }
std::string Qualifiers::getAsString() const {
LangOptions LO;

View File

@ -435,7 +435,7 @@ void LocationContext::dumpStack(raw_ostream &OS, StringRef Indent) const {
}
}
void LocationContext::dumpStack() const {
LLVM_DUMP_METHOD void LocationContext::dumpStack() const {
dumpStack(llvm::errs());
}

View File

@ -61,14 +61,15 @@ void SourceLocation::print(raw_ostream &OS, const SourceManager &SM)const{
OS << '>';
}
std::string SourceLocation::printToString(const SourceManager &SM) const {
LLVM_DUMP_METHOD std::string
SourceLocation::printToString(const SourceManager &SM) const {
std::string S;
llvm::raw_string_ostream OS(S);
print(OS, SM);
return OS.str();
}
void SourceLocation::dump(const SourceManager &SM) const {
LLVM_DUMP_METHOD void SourceLocation::dump(const SourceManager &SM) const {
print(llvm::errs(), SM);
}
@ -122,7 +123,7 @@ bool FullSourceLoc::isBeforeInTranslationUnitThan(SourceLocation Loc) const {
return SrcMgr->isBeforeInTranslationUnit(*this, Loc);
}
void FullSourceLoc::dump() const {
LLVM_DUMP_METHOD void FullSourceLoc::dump() const {
SourceLocation::dump(*SrcMgr);
}

View File

@ -108,9 +108,7 @@ public:
OS << Table[(unsigned) K];
}
LLVM_ATTRIBUTE_USED void dump() const {
dump(llvm::errs());
}
LLVM_DUMP_METHOD void dump() const { dump(llvm::errs()); }
};
enum ReallocPairKind {

View File

@ -3501,8 +3501,7 @@ BugType *BugReporter::getBugTypeForName(StringRef name,
return BT;
}
void PathPieces::dump() const {
LLVM_DUMP_METHOD void PathPieces::dump() const {
unsigned index = 0;
for (PathPieces::const_iterator I = begin(), E = end(); I != E; ++I) {
llvm::errs() << "[" << index++ << "] ";

View File

@ -209,9 +209,7 @@ SVal CallEvent::getReturnValue() const {
return getSVal(E);
}
void CallEvent::dump() const {
dump(llvm::errs());
}
LLVM_DUMP_METHOD void CallEvent::dump() const { dump(llvm::errs()); }
void CallEvent::dump(raw_ostream &Out) const {
ASTContext &Ctx = getState()->getStateManager().getContext();

View File

@ -104,7 +104,7 @@ public:
Data == X.Data;
}
LLVM_ATTRIBUTE_USED void dump() const;
void dump() const;
};
} // end anonymous namespace
@ -133,9 +133,7 @@ namespace llvm {
};
} // end llvm namespace
void BindingKey::dump() const {
llvm::errs() << *this;
}
LLVM_DUMP_METHOD void BindingKey::dump() const { llvm::errs() << *this; }
//===----------------------------------------------------------------------===//
// Actual Store type.
@ -224,9 +222,7 @@ public:
}
}
LLVM_ATTRIBUTE_USED void dump() const {
dump(llvm::errs(), "\n");
}
LLVM_DUMP_METHOD void dump() const { dump(llvm::errs(), "\n"); }
};
} // end anonymous namespace