forked from OSchip/llvm-project
Removing an "if (this == nullptr)" check from two print methods. The condition
will never be true in a well-defined context. The checking for null pointers has been moved into the caller logic so it does not rely on undefined behavior. llvm-svn: 210498
This commit is contained in:
parent
a23043cb9c
commit
ddd01cec0e
|
@ -403,9 +403,13 @@ void APValue::printPretty(raw_ostream &Out, ASTContext &Ctx, QualType Ty) const{
|
|||
|
||||
if (const ValueDecl *VD = Base.dyn_cast<const ValueDecl*>())
|
||||
Out << *VD;
|
||||
else
|
||||
else {
|
||||
assert(Base.get<const Expr *>() != nullptr &&
|
||||
"Expecting non-null Expr");
|
||||
Base.get<const Expr*>()->printPretty(Out, nullptr,
|
||||
Ctx.getPrintingPolicy());
|
||||
}
|
||||
|
||||
if (!O.isZero()) {
|
||||
Out << " + " << (O / S);
|
||||
if (IsReference)
|
||||
|
@ -426,6 +430,7 @@ void APValue::printPretty(raw_ostream &Out, ASTContext &Ctx, QualType Ty) const{
|
|||
ElemTy = VD->getType();
|
||||
} else {
|
||||
const Expr *E = Base.get<const Expr*>();
|
||||
assert(E != nullptr && "Expecting non-null Expr");
|
||||
E->printPretty(Out, nullptr, Ctx.getPrintingPolicy());
|
||||
ElemTy = E->getType();
|
||||
}
|
||||
|
|
|
@ -536,6 +536,7 @@ void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) {
|
|||
SimpleInit->printPretty(Out, nullptr, Policy, Indentation);
|
||||
else {
|
||||
for (unsigned I = 0; I != NumArgs; ++I) {
|
||||
assert(Args[I] != nullptr && "Expected non-null Expr");
|
||||
if (isa<CXXDefaultArgExpr>(Args[I]))
|
||||
break;
|
||||
|
||||
|
@ -586,7 +587,8 @@ void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) {
|
|||
} else
|
||||
Out << ' ';
|
||||
|
||||
D->getBody()->printPretty(Out, nullptr, SubPolicy, Indentation);
|
||||
if (D->getBody())
|
||||
D->getBody()->printPretty(Out, nullptr, SubPolicy, Indentation);
|
||||
Out << '\n';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -645,6 +645,7 @@ void OMPClausePrinter::VisitOMPClauseList(T *Node, char StartSym) {
|
|||
for (typename T::varlist_iterator I = Node->varlist_begin(),
|
||||
E = Node->varlist_end();
|
||||
I != E; ++I) {
|
||||
assert(*I && "Expected non-null Stmt");
|
||||
if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(*I)) {
|
||||
OS << (I == Node->varlist_begin() ? StartSym : ',');
|
||||
cast<NamedDecl>(DRE->getDecl())->printQualifiedName(OS);
|
||||
|
@ -2025,11 +2026,6 @@ void Stmt::printPretty(raw_ostream &OS,
|
|||
PrinterHelper *Helper,
|
||||
const PrintingPolicy &Policy,
|
||||
unsigned Indentation) const {
|
||||
if (this == nullptr) {
|
||||
OS << "<NULL>";
|
||||
return;
|
||||
}
|
||||
|
||||
StmtPrinter P(OS, Helper, Policy, Indentation);
|
||||
P.Visit(const_cast<Stmt*>(this));
|
||||
}
|
||||
|
|
|
@ -593,7 +593,8 @@ FunctionProtoType::printExceptionSpecification(raw_ostream &OS,
|
|||
OS << " noexcept";
|
||||
if (getExceptionSpecType() == EST_ComputedNoexcept) {
|
||||
OS << '(';
|
||||
getNoexceptExpr()->printPretty(OS, nullptr, Policy);
|
||||
if (getNoexceptExpr())
|
||||
getNoexceptExpr()->printPretty(OS, nullptr, Policy);
|
||||
OS << ')';
|
||||
}
|
||||
}
|
||||
|
@ -761,7 +762,8 @@ void TypePrinter::printTypedefAfter(const TypedefType *T, raw_ostream &OS) { }
|
|||
void TypePrinter::printTypeOfExprBefore(const TypeOfExprType *T,
|
||||
raw_ostream &OS) {
|
||||
OS << "typeof ";
|
||||
T->getUnderlyingExpr()->printPretty(OS, nullptr, Policy);
|
||||
if (T->getUnderlyingExpr())
|
||||
T->getUnderlyingExpr()->printPretty(OS, nullptr, Policy);
|
||||
spaceBeforePlaceHolder(OS);
|
||||
}
|
||||
void TypePrinter::printTypeOfExprAfter(const TypeOfExprType *T,
|
||||
|
@ -777,7 +779,8 @@ void TypePrinter::printTypeOfAfter(const TypeOfType *T, raw_ostream &OS) { }
|
|||
|
||||
void TypePrinter::printDecltypeBefore(const DecltypeType *T, raw_ostream &OS) {
|
||||
OS << "decltype(";
|
||||
T->getUnderlyingExpr()->printPretty(OS, nullptr, Policy);
|
||||
if (T->getUnderlyingExpr())
|
||||
T->getUnderlyingExpr()->printPretty(OS, nullptr, Policy);
|
||||
OS << ')';
|
||||
spaceBeforePlaceHolder(OS);
|
||||
}
|
||||
|
|
|
@ -3926,7 +3926,8 @@ public:
|
|||
|
||||
void VisitIfStmt(IfStmt *I) {
|
||||
OS << "if ";
|
||||
I->getCond()->printPretty(OS,Helper,Policy);
|
||||
if (Stmt *C = I->getCond())
|
||||
C->printPretty(OS, Helper, Policy);
|
||||
}
|
||||
|
||||
// Default case.
|
||||
|
@ -3974,19 +3975,22 @@ public:
|
|||
}
|
||||
|
||||
void VisitAbstractConditionalOperator(AbstractConditionalOperator* C) {
|
||||
C->getCond()->printPretty(OS, Helper, Policy);
|
||||
if (Stmt *Cond = C->getCond())
|
||||
Cond->printPretty(OS, Helper, Policy);
|
||||
OS << " ? ... : ...";
|
||||
}
|
||||
|
||||
void VisitChooseExpr(ChooseExpr *C) {
|
||||
OS << "__builtin_choose_expr( ";
|
||||
C->getCond()->printPretty(OS, Helper, Policy);
|
||||
if (Stmt *Cond = C->getCond())
|
||||
Cond->printPretty(OS, Helper, Policy);
|
||||
OS << " )";
|
||||
}
|
||||
|
||||
void VisitIndirectGotoStmt(IndirectGotoStmt *I) {
|
||||
OS << "goto *";
|
||||
I->getTarget()->printPretty(OS, Helper, Policy);
|
||||
if (Stmt *T = I->getTarget())
|
||||
T->printPretty(OS, Helper, Policy);
|
||||
}
|
||||
|
||||
void VisitBinaryOperator(BinaryOperator* B) {
|
||||
|
@ -3995,7 +3999,8 @@ public:
|
|||
return;
|
||||
}
|
||||
|
||||
B->getLHS()->printPretty(OS, Helper, Policy);
|
||||
if (B->getLHS())
|
||||
B->getLHS()->printPretty(OS, Helper, Policy);
|
||||
|
||||
switch (B->getOpcode()) {
|
||||
case BO_LOr:
|
||||
|
@ -4026,7 +4031,8 @@ static void print_elem(raw_ostream &OS, StmtPrinterHelper &Helper,
|
|||
const CFGElement &E) {
|
||||
if (Optional<CFGStmt> CS = E.getAs<CFGStmt>()) {
|
||||
const Stmt *S = CS->getStmt();
|
||||
|
||||
assert(S != nullptr && "Expecting non-null Stmt");
|
||||
|
||||
// special printing for statement-expressions.
|
||||
if (const StmtExpr *SE = dyn_cast<StmtExpr>(S)) {
|
||||
const CompoundStmt *Sub = SE->getSubStmt();
|
||||
|
@ -4172,8 +4178,9 @@ static void print_block(raw_ostream &OS, const CFG* cfg,
|
|||
OS << L->getName();
|
||||
else if (CaseStmt *C = dyn_cast<CaseStmt>(Label)) {
|
||||
OS << "case ";
|
||||
C->getLHS()->printPretty(OS, &Helper,
|
||||
PrintingPolicy(Helper.getLangOpts()));
|
||||
if (C->getLHS())
|
||||
C->getLHS()->printPretty(OS, &Helper,
|
||||
PrintingPolicy(Helper.getLangOpts()));
|
||||
if (C->getRHS()) {
|
||||
OS << " ... ";
|
||||
C->getRHS()->printPretty(OS, &Helper,
|
||||
|
|
|
@ -332,6 +332,8 @@ bool Rewriter::ReplaceText(SourceRange range, SourceRange replacementRange) {
|
|||
/// printer to generate the replacement code. This returns true if the input
|
||||
/// could not be rewritten, or false if successful.
|
||||
bool Rewriter::ReplaceStmt(Stmt *From, Stmt *To) {
|
||||
assert(From != nullptr && To != nullptr && "Expected non-null Stmt's");
|
||||
|
||||
// Measaure the old text.
|
||||
int Size = getRangeSize(From->getSourceRange());
|
||||
if (Size == -1)
|
||||
|
@ -348,6 +350,7 @@ bool Rewriter::ReplaceStmt(Stmt *From, Stmt *To) {
|
|||
}
|
||||
|
||||
std::string Rewriter::ConvertToString(Stmt *From) {
|
||||
assert(From != nullptr && "Expected non-null Stmt");
|
||||
std::string SStr;
|
||||
llvm::raw_string_ostream S(SStr);
|
||||
From->printPretty(S, nullptr, PrintingPolicy(*LangOpts));
|
||||
|
|
|
@ -267,6 +267,7 @@ namespace {
|
|||
}
|
||||
|
||||
void ReplaceStmtWithRange(Stmt *Old, Stmt *New, SourceRange SrcRange) {
|
||||
assert(Old != nullptr && New != nullptr && "Expected non-null Stmt's");
|
||||
if (DisableReplaceStmt)
|
||||
return;
|
||||
|
||||
|
@ -2587,6 +2588,7 @@ void RewriteModernObjC::SynthGetMetaClassFunctionDecl() {
|
|||
}
|
||||
|
||||
Stmt *RewriteModernObjC::RewriteObjCStringLiteral(ObjCStringLiteral *Exp) {
|
||||
assert (Exp != nullptr && "Expected non-null ObjCStringLiteral");
|
||||
QualType strType = getConstantStringStructType();
|
||||
|
||||
std::string S = "__NSConstantStringImpl_";
|
||||
|
|
|
@ -216,6 +216,7 @@ namespace {
|
|||
}
|
||||
|
||||
void ReplaceStmtWithRange(Stmt *Old, Stmt *New, SourceRange SrcRange) {
|
||||
assert(Old != nullptr && New != nullptr && "Expected non-null Stmt's");
|
||||
if (DisableReplaceStmt)
|
||||
return;
|
||||
|
||||
|
@ -1697,6 +1698,7 @@ Stmt *RewriteObjC::RewriteObjCSynchronizedStmt(ObjCAtSynchronizedStmt *S) {
|
|||
CK, syncExpr);
|
||||
std::string syncExprBufS;
|
||||
llvm::raw_string_ostream syncExprBuf(syncExprBufS);
|
||||
assert(syncExpr != nullptr && "Expected non-null Expr");
|
||||
syncExpr->printPretty(syncExprBuf, nullptr, PrintingPolicy(LangOpts));
|
||||
syncBuf += syncExprBuf.str();
|
||||
syncBuf += ");";
|
||||
|
@ -2485,6 +2487,7 @@ void RewriteObjC::SynthGetMetaClassFunctionDecl() {
|
|||
}
|
||||
|
||||
Stmt *RewriteObjC::RewriteObjCStringLiteral(ObjCStringLiteral *Exp) {
|
||||
assert(Exp != nullptr && "Expected non-null ObjCStringLiteral");
|
||||
QualType strType = getConstantStringStructType();
|
||||
|
||||
std::string S = "__NSConstantStringImpl_";
|
||||
|
|
|
@ -6181,6 +6181,8 @@ enum {
|
|||
void Sema::DiagnoseAlwaysNonNullPointer(Expr *E,
|
||||
Expr::NullPointerConstantKind NullKind,
|
||||
bool IsEqual, SourceRange Range) {
|
||||
if (!E)
|
||||
return;
|
||||
|
||||
// Don't warn inside macros.
|
||||
if (E->getExprLoc().isMacroID())
|
||||
|
|
|
@ -11407,6 +11407,8 @@ Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc,
|
|||
StringLiteral *AssertMessage,
|
||||
SourceLocation RParenLoc,
|
||||
bool Failed) {
|
||||
assert(AssertExpr != nullptr && AssertMessage != nullptr &&
|
||||
"Expected non-null Expr's");
|
||||
if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() &&
|
||||
!Failed) {
|
||||
// In a static_assert-declaration, the constant-expression shall be a
|
||||
|
|
|
@ -283,6 +283,7 @@ bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) {
|
|||
|
||||
case EST_ComputedNoexcept:
|
||||
OS << "noexcept(";
|
||||
assert(OldProto->getNoexceptExpr() != nullptr && "Expected non-null Expr");
|
||||
OldProto->getNoexceptExpr()->printPretty(OS, nullptr, getPrintingPolicy());
|
||||
OS << ")";
|
||||
break;
|
||||
|
|
|
@ -205,7 +205,8 @@ void Environment::print(raw_ostream &Out, const char *NL,
|
|||
}
|
||||
|
||||
const Stmt *S = En.getStmt();
|
||||
|
||||
assert(S != nullptr && "Expected non-null Stmt");
|
||||
|
||||
Out << " (" << (const void*) En.getLocationContext() << ','
|
||||
<< (const void*) S << ") ";
|
||||
LangOptions LO; // FIXME.
|
||||
|
|
|
@ -2428,7 +2428,8 @@ struct DOTGraphTraits<ExplodedNode*> :
|
|||
if (const CaseStmt *C = dyn_cast<CaseStmt>(Label)) {
|
||||
Out << "\\lcase ";
|
||||
LangOptions LO; // FIXME.
|
||||
C->getLHS()->printPretty(Out, nullptr, PrintingPolicy(LO));
|
||||
if (C->getLHS())
|
||||
C->getLHS()->printPretty(Out, nullptr, PrintingPolicy(LO));
|
||||
|
||||
if (const Stmt *RHS = C->getRHS()) {
|
||||
Out << " .. ";
|
||||
|
@ -2471,6 +2472,7 @@ struct DOTGraphTraits<ExplodedNode*> :
|
|||
|
||||
default: {
|
||||
const Stmt *S = Loc.castAs<StmtPoint>().getStmt();
|
||||
assert(S != nullptr && "Expecting non-null Stmt");
|
||||
|
||||
Out << S->getStmtClassName() << ' ' << (const void*) S << ' ';
|
||||
LangOptions LO; // FIXME.
|
||||
|
|
|
@ -508,10 +508,12 @@ void ObjCIvarRegion::dumpToStream(raw_ostream &os) const {
|
|||
}
|
||||
|
||||
void StringRegion::dumpToStream(raw_ostream &os) const {
|
||||
assert(Str != nullptr && "Expecting non-null StringLiteral");
|
||||
Str->printPretty(os, nullptr, PrintingPolicy(getContext().getLangOpts()));
|
||||
}
|
||||
|
||||
void ObjCStringRegion::dumpToStream(raw_ostream &os) const {
|
||||
assert(Str != nullptr && "Expecting non-null ObjCStringLiteral");
|
||||
Str->printPretty(os, nullptr, PrintingPolicy(getContext().getLangOpts()));
|
||||
}
|
||||
|
||||
|
|
|
@ -32,6 +32,7 @@ using namespace tooling;
|
|||
namespace {
|
||||
|
||||
void PrintStmt(raw_ostream &Out, const ASTContext *Context, const Stmt *S) {
|
||||
assert(S != nullptr && "Expected non-null Stmt");
|
||||
PrintingPolicy Policy = Context->getPrintingPolicy();
|
||||
S->printPretty(Out, /*Helper*/ nullptr, Policy);
|
||||
}
|
||||
|
|
|
@ -484,9 +484,11 @@ namespace {
|
|||
<< "Type(), Record);\n";
|
||||
}
|
||||
void writeValue(raw_ostream &OS) const override {
|
||||
OS << "\";\n"
|
||||
<< " " << getLowerName() << "Expr->printPretty(OS, 0, Policy);\n"
|
||||
<< " OS << \"";
|
||||
OS << "\";\n";
|
||||
OS << " assert(is" << getLowerName() << "Expr && " << getLowerName()
|
||||
<< "Expr != nullptr);\n";
|
||||
OS << " " << getLowerName() << "Expr->printPretty(OS, 0, Policy);\n";
|
||||
OS << " OS << \"";
|
||||
}
|
||||
void writeDump(raw_ostream &OS) const override {
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue