diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index f4596dcb14e..0cd258ba210 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -2711,7 +2711,8 @@ static void semanticHighlighter(QFutureInterface &future, if (detail.startsWith("operator")) { return !detail.contains('=') && !detail.contains("++") && !detail.contains("--") - && !detail.contains("<<") && !detail.contains(">>"); + && !detail.contains("<<") && !detail.contains(">>") + && !detail.contains("*"); } firstChildTree << n.children().value_or(QList()); } diff --git a/src/plugins/clangcodemodel/test/clangdtests.cpp b/src/plugins/clangcodemodel/test/clangdtests.cpp index adaa705cb85..462b91f5092 100644 --- a/src/plugins/clangcodemodel/test/clangdtests.cpp +++ b/src/plugins/clangcodemodel/test/clangdtests.cpp @@ -1308,6 +1308,8 @@ void ClangdTestHighlighting::test_data() << QList{C_PREPROCESSOR} << 0; QTest::newRow("built-in define 3") << 952 << 21 << 952 << 40 << QList{C_PREPROCESSOR} << 0; + QTest::newRow("deref operator (object)") << 960 << 10 << 960 << 11 << QList{C_LOCAL} << 0; + QTest::newRow("deref operator (member)") << 960 << 12 << 960 << 13 << QList{C_FIELD} << 0; } void ClangdTestHighlighting::test() diff --git a/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp b/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp index 2ef28c11ba5..31ddb82a00c 100644 --- a/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp +++ b/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp @@ -951,3 +951,12 @@ void builtinDefines() const auto f2 = __FUNCTION__; const auto f3 = __PRETTY_FUNCTION__; } + +void derefOperator() +{ + struct S { bool operator*(); }; + struct S2 { S s; }; + S2 s; + if (*s.s) + return; +}