summaryrefslogtreecommitdiff
path: root/compilerplugins
diff options
context:
space:
mode:
Diffstat (limited to 'compilerplugins')
-rw-r--r--compilerplugins/clang/flatten.cxx7
1 files changed, 6 insertions, 1 deletions
diff --git a/compilerplugins/clang/flatten.cxx b/compilerplugins/clang/flatten.cxx
index bac4ae8a4370..a615b8366b63 100644
--- a/compilerplugins/clang/flatten.cxx
+++ b/compilerplugins/clang/flatten.cxx
@@ -427,7 +427,7 @@ llvm::Optional<std::string> Flatten::invertCondition(Expr const * condExpr, Sour
// an if statement will automatically invoke a bool-conversion method
if (auto memberCallExpr = dyn_cast<CXXMemberCallExpr>(condExpr))
{
- if (isa<CXXConversionDecl>(memberCallExpr->getMethodDecl()))
+ if (memberCallExpr->getMethodDecl() && isa<CXXConversionDecl>(memberCallExpr->getMethodDecl()))
condExpr = memberCallExpr->getImplicitObjectArgument()->IgnoreImpCasts();
}
@@ -665,6 +665,11 @@ std::string Flatten::getSourceAsString(SourceRange range)
// in case it happens during code replacement
return "clang returned bad pointers";
}
+ if (p2 - p1 > 64 * 1024) {
+ // workaround clang weirdness, but don't return empty string
+ // in case it happens during code replacement
+ return "clang returned overlay large source range";
+ }
return std::string( p1, p2 - p1);
}