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) {