From 46dbd19afb79c5c81ccb87cee9e41ad668b35324 Mon Sep 17 00:00:00 2001 From: Sam McCall Date: Mon, 21 Mar 2022 18:53:59 +0100 Subject: [PATCH] [clangd] Fix nullptr crash in AddUsing tweak on catch(...) Fixes https://github.com/clangd/clangd/issues/1072 --- clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp | 2 ++ clang-tools-extra/clangd/unittests/tweaks/AddUsingTests.cpp | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp b/clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp index a75c485..5a4e1aa 100644 --- a/clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp @@ -78,6 +78,8 @@ public: } bool TraverseDecl(Decl *Node) { + if (!Node) + return true; // There is no need to go deeper into nodes that do not enclose selection, // since "using" there will not affect selection, nor would it make a good // insertion point. diff --git a/clang-tools-extra/clangd/unittests/tweaks/AddUsingTests.cpp b/clang-tools-extra/clangd/unittests/tweaks/AddUsingTests.cpp index b9b5cf4..662000a 100644 --- a/clang-tools-extra/clangd/unittests/tweaks/AddUsingTests.cpp +++ b/clang-tools-extra/clangd/unittests/tweaks/AddUsingTests.cpp @@ -78,6 +78,19 @@ public: EXPECT_UNAVAILABLE(Header + "void fun() { one::two::f^f(); }"); } +TEST_F(AddUsingTest, Crash1072) { + // Used to crash when traversing catch(...) + // https://github.com/clangd/clangd/issues/1072 + const char *Code = R"cpp( + namespace ns { class A; } + ns::^A *err; + void catchall() { + try {} catch(...) {} + } + )cpp"; + EXPECT_AVAILABLE(Code); +} + TEST_F(AddUsingTest, Apply) { FileName = "test.cpp"; struct { -- 2.7.4