diff --git a/clang-tools-extra/clangd/SemanticHighlighting.cpp b/clang-tools-extra/clangd/SemanticHighlighting.cpp index 6745e2594ead3e..f667567407793a 100644 --- a/clang-tools-extra/clangd/SemanticHighlighting.cpp +++ b/clang-tools-extra/clangd/SemanticHighlighting.cpp @@ -619,14 +619,14 @@ class CollectExtraHighlightings bool VisitCXXNewExpr(CXXNewExpr *E) { auto &Token = H.addToken(E->getBeginLoc(), HighlightingKind::Operator); - if (isa(E->getOperatorNew())) + if (isa_and_present(E->getOperatorNew())) Token.addModifier(HighlightingModifier::UserDefined); return true; } bool VisitCXXDeleteExpr(CXXDeleteExpr *E) { auto &Token = H.addToken(E->getBeginLoc(), HighlightingKind::Operator); - if (isa(E->getOperatorDelete())) + if (isa_and_present(E->getOperatorDelete())) Token.addModifier(HighlightingModifier::UserDefined); return true; } diff --git a/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp b/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp index de3d099986fe92..bc890bf088a52a 100644 --- a/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp +++ b/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp @@ -932,6 +932,16 @@ sizeof...($TemplateParameter[[Elements]]); auto $LocalVariable_def[[k]] = $Operator[[&]]$Class[[Foo]]::$Method[[foo]]; ($Parameter[[f]]$Operator[[.*]]$LocalVariable[[k]])(); // no crash on VisitCXXMemberCallExpr } + )cpp", + R"cpp( + template + class $Class_def[[Foo]] {}; + + template + void $Function_def[[k]]() { + auto $LocalVariable_def[[s]] = $Operator[[new]] $Class[[Foo]]<$TemplateParameter[[T]]>(); + $Operator[[delete]] $LocalVariable[[s]]; + } )cpp"}; for (const auto &TestCase : TestCases) // Mask off scope modifiers to keep the tests manageable.