From c0364564a4470a5ae6d64078d7de0369f6af5fe8 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Thu, 10 Aug 2017 15:24:50 +0200 Subject: [PATCH] Clang: Fix highlighting of template function in using declaration This completes commit a3a62e78f7378182138555936b45a885865c00ad Clang: Fix highlighting of function in using declaration Change-Id: I3c163096374d7a1f45a590bb8ebfe5f5a1f8d417 Reviewed-by: Ivan Donchevskii Reviewed-by: Marco Bubke --- src/tools/clangbackend/ipcsource/highlightingmark.cpp | 3 ++- tests/unit/unittest/data/highlightingmarks.cpp | 3 +++ tests/unit/unittest/highlightingmarks-test.cpp | 7 +++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/tools/clangbackend/ipcsource/highlightingmark.cpp b/src/tools/clangbackend/ipcsource/highlightingmark.cpp index bc918326a7c..510192b6e70 100644 --- a/src/tools/clangbackend/ipcsource/highlightingmark.cpp +++ b/src/tools/clangbackend/ipcsource/highlightingmark.cpp @@ -165,7 +165,8 @@ void HighlightingMark::overloadedDeclRefKind(const Cursor &cursor) // Workaround https://bugs.llvm.org//show_bug.cgi?id=33256 - SomeType in // "using N::SomeType" is mistakenly considered as a CXCursor_OverloadedDeclRef. if (cursor.overloadedDeclarationsCount() >= 1 - && cursor.overloadedDeclaration(0).kind() != CXCursor_FunctionDecl) { + && cursor.overloadedDeclaration(0).kind() != CXCursor_FunctionDecl + && cursor.overloadedDeclaration(0).kind() != CXCursor_FunctionTemplate) { m_types.mainHighlightingType = HighlightingType::Type; } } diff --git a/tests/unit/unittest/data/highlightingmarks.cpp b/tests/unit/unittest/data/highlightingmarks.cpp index 5b3374d582a..860dbddc708 100644 --- a/tests/unit/unittest/data/highlightingmarks.cpp +++ b/tests/unit/unittest/data/highlightingmarks.cpp @@ -579,3 +579,6 @@ void f32() NonConstPointerArgument(x.getter()); } + +namespace N { template void SizeIs(); } +using N::SizeIs; diff --git a/tests/unit/unittest/highlightingmarks-test.cpp b/tests/unit/unittest/highlightingmarks-test.cpp index 7c21d7c8108..cbedd9d8445 100644 --- a/tests/unit/unittest/highlightingmarks-test.cpp +++ b/tests/unit/unittest/highlightingmarks-test.cpp @@ -1177,6 +1177,13 @@ TEST_F(HighlightingMarks, DISABLED_VariableInOperatorFunctionCall) ASSERT_THAT(infos[2], HasOnlyType(HighlightingType::LocalVariable)); } +TEST_F(HighlightingMarks, UsingTemplateFunction) +{ + const auto infos = translationUnit.highlightingMarksInRange(sourceRange(584, 17)); + + ASSERT_THAT(infos[3], HasOnlyType(HighlightingType::Function)); +} + Data *HighlightingMarks::d; void HighlightingMarks::SetUpTestCase()