summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan James <n.james93@hotmail.co.uk>2020-02-02 14:04:25 +0000
committerHans Wennborg <hans@chromium.org>2020-02-03 16:09:12 +0100
commit7ad47b46b55fe33bc763411ae7b8bcca5a63d8dc (patch)
tree5f1e6165eadf2c2f43c197f2ff6fb55978a2811e
parentfa51929f03f541de48e7eaf4a06a27166db3580c (diff)
downloadbcm5719-llvm-7ad47b46b55fe33bc763411ae7b8bcca5a63d8dc.tar.gz
bcm5719-llvm-7ad47b46b55fe33bc763411ae7b8bcca5a63d8dc.zip
[clang-tidy] Fixed crash 44745 in readability-else-after-return
Summary: Fixes [[ https://bugs.llvm.org/show_bug.cgi?id=44745 | readability-else-after-return crashes ]] Reviewers: aaron.ballman, alexfh, hokein, JonasToth, gribozavr2 Reviewed By: alexfh Subscribers: merge_guards_bot, xazax.hun, cfe-commits Tags: #clang, #clang-tools-extra Differential Revision: https://reviews.llvm.org/D73841 (cherry picked from commit d591bdce6d623208d4aeb335a762d839f0f8f0f7)
-rw-r--r--clang-tools-extra/clang-tidy/readability/ElseAfterReturnCheck.cpp4
-rw-r--r--clang-tools-extra/test/clang-tidy/checkers/readability-else-after-return.cpp13
2 files changed, 17 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-tidy/readability/ElseAfterReturnCheck.cpp b/clang-tools-extra/clang-tidy/readability/ElseAfterReturnCheck.cpp
index 93b197a52a5..b3b4e0de2bf 100644
--- a/clang-tools-extra/clang-tidy/readability/ElseAfterReturnCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/ElseAfterReturnCheck.cpp
@@ -27,6 +27,8 @@ static const char WarningMessage[] = "do not use 'else' after '%0'";
static const char WarnOnUnfixableStr[] = "WarnOnUnfixable";
const DeclRefExpr *findUsage(const Stmt *Node, int64_t DeclIdentifier) {
+ if (!Node)
+ return nullptr;
if (const auto *DeclRef = dyn_cast<DeclRefExpr>(Node)) {
if (DeclRef->getDecl()->getID() == DeclIdentifier) {
return DeclRef;
@@ -44,6 +46,8 @@ const DeclRefExpr *findUsage(const Stmt *Node, int64_t DeclIdentifier) {
const DeclRefExpr *
findUsageRange(const Stmt *Node,
const llvm::iterator_range<int64_t *> &DeclIdentifiers) {
+ if (!Node)
+ return nullptr;
if (const auto *DeclRef = dyn_cast<DeclRefExpr>(Node)) {
if (llvm::is_contained(DeclIdentifiers, DeclRef->getDecl()->getID())) {
return DeclRef;
diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability-else-after-return.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability-else-after-return.cpp
index 69ac9eb2957..1e3b4cf5755 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/readability-else-after-return.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability-else-after-return.cpp
@@ -213,3 +213,16 @@ int lifeTimeExtensionTests(int a) {
return b;
}
}
+
+void test_B44745() {
+ // This is the actual minimum test case for the crash in bug 44745. We aren't
+ // too worried about the warning or fix here, more we don't want a crash.
+ // CHECK-MESSAGES: :[[@LINE+3]]:5: warning: do not use 'else' after 'return' [readability-else-after-return]
+ if (auto X = false) {
+ return;
+ } else {
+ for (;;) {
+ }
+ }
+ return;
+}
OpenPOWER on IntegriCloud