From f7e9d5b43e72439f5841f9ff5ef690a625fd312c Mon Sep 17 00:00:00 2001 From: Haojian Wu Date: Sat, 7 Jan 2023 22:59:50 +0100 Subject: [PATCH] [clangd] Fix an inlay-hint crash on a null deduced type. --- clang-tools-extra/clangd/InlayHints.cpp | 3 ++- clang-tools-extra/clangd/unittests/InlayHintTests.cpp | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/clang-tools-extra/clangd/InlayHints.cpp b/clang-tools-extra/clangd/InlayHints.cpp index 30c7c05e3c02..f4e38aeb653e 100644 --- a/clang-tools-extra/clangd/InlayHints.cpp +++ b/clang-tools-extra/clangd/InlayHints.cpp @@ -671,7 +671,8 @@ private: if (QT->isDecltypeType()) return true; if (const AutoType *AT = QT->getContainedAutoType()) - if (AT->getDeducedType()->isDecltypeType()) + if (!AT->getDeducedType().isNull() && + AT->getDeducedType()->isDecltypeType()) return true; return false; } diff --git a/clang-tools-extra/clangd/unittests/InlayHintTests.cpp b/clang-tools-extra/clangd/unittests/InlayHintTests.cpp index 53621f97a604..06f2c055a4d3 100644 --- a/clang-tools-extra/clangd/unittests/InlayHintTests.cpp +++ b/clang-tools-extra/clangd/unittests/InlayHintTests.cpp @@ -1378,11 +1378,16 @@ TEST(TypeHints, Decltype) { using G = Foo<$g[[decltype(0)]], float>; auto $h[[h]] = $i[[decltype(0)]]{}; + + // No crash + /* error-ok */ + auto $j[[s]]; )cpp", ExpectedHint{": int", "a"}, ExpectedHint{": int", "b"}, ExpectedHint{": int", "c"}, ExpectedHint{": int", "e"}, ExpectedHint{": int", "f"}, ExpectedHint{": int", "g"}, - ExpectedHint{": int", "h"}, ExpectedHint{": int", "i"}); + ExpectedHint{": int", "h"}, ExpectedHint{": int", "i"}, + ExpectedHint{": auto", "j"}); } TEST(DesignatorHints, Basic) {