diff --git a/clang-tools-extra/clangd/InlayHints.cpp b/clang-tools-extra/clangd/InlayHints.cpp index f4e38aeb653ec7..a009f84d448aeb 100644 --- a/clang-tools-extra/clangd/InlayHints.cpp +++ b/clang-tools-extra/clangd/InlayHints.cpp @@ -304,8 +304,8 @@ class InlayHintVisitor : public RecursiveASTVisitor { return true; } - if (D->getType()->getContainedAutoType()) { - if (!D->getType()->isDependentType()) { + if (auto *AT = D->getType()->getContainedAutoType()) { + if (AT->isDeduced() && !D->getType()->isDependentType()) { // Our current approach is to place the hint on the variable // and accordingly print the full type // (e.g. for `const auto& x = 42`, print `const int&`). diff --git a/clang-tools-extra/clangd/unittests/InlayHintTests.cpp b/clang-tools-extra/clangd/unittests/InlayHintTests.cpp index 06f2c055a4d3c8..459c51a44d5753 100644 --- a/clang-tools-extra/clangd/unittests/InlayHintTests.cpp +++ b/clang-tools-extra/clangd/unittests/InlayHintTests.cpp @@ -1256,6 +1256,13 @@ TEST(TypeHints, StructuredBindings_NoInitializer) { )cpp"); } +TEST(TypeHints, InvalidType) { + assertTypeHints(R"cpp( + auto x = (unknown_type)42; /*error-ok*/ + auto *y = (unknown_ptr)nullptr; + )cpp"); +} + TEST(TypeHints, ReturnTypeDeduction) { assertTypeHints( R"cpp(