diff --git a/clang-tools-extra/clangd/SemanticHighlighting.cpp b/clang-tools-extra/clangd/SemanticHighlighting.cpp --- a/clang-tools-extra/clangd/SemanticHighlighting.cpp +++ b/clang-tools-extra/clangd/SemanticHighlighting.cpp @@ -164,7 +164,7 @@ // Whether T is const in a loose sense - is a variable with this type readonly? bool isConst(QualType T) { - if (T.isNull() || T->isDependentType()) + if (T.isNull()) return false; T = T.getNonReferenceType(); if (T.isConstQualified()) diff --git a/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp b/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp --- a/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp +++ b/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp @@ -855,6 +855,17 @@ const char *$LocalVariable_decl_readonly[[s]] = $LocalVariable_readonly_static[[__func__]]; } )cpp", + // Issue 1022: readonly modifier for generic parameter + R"cpp( + template + auto $Function_decl[[foo]](const $TemplateParameter[[T]] $Parameter_decl_readonly[[template_type]], + const $TemplateParameter[[auto]] $Parameter_decl_readonly[[auto_type]], + const int $Parameter_decl_readonly[[explicit_type]]) { + return $Parameter_readonly[[template_type]] + + $Parameter_readonly[[auto_type]] + + $Parameter_readonly[[explicit_type]]; + } + )cpp", // Explicit template specialization R"cpp( struct $Class_decl[[Base]]{};