diff --git a/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp b/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp --- a/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp +++ b/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp @@ -413,6 +413,23 @@ )cpp"); EXPECT_THAT(External.Completions, AllOf(has("pub"), Not(has("prot")), Not(has("priv")))); + + auto Results = completions(R"cpp( + struct Foo { + public: void pub(); + protected: void prot(); + private: void priv(); + }; + struct Bar : public Foo { + private: using Foo::pub; + }; + void test() { + Bar B; + B.^ + } + )cpp"); + EXPECT_THAT(Results.Completions, + AllOf(Not(has("priv")), Not(has("prot")), Not(has("pub")))); } TEST(CompletionTest, Qualifiers) { diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp --- a/clang/lib/Sema/SemaCodeComplete.cpp +++ b/clang/lib/Sema/SemaCodeComplete.cpp @@ -1095,7 +1095,9 @@ if (const UsingShadowDecl *Using = dyn_cast(R.Declaration)) { CodeCompletionResult Result(Using->getTargetDecl(), getBasePriority(Using->getTargetDecl()), - R.Qualifier); + R.Qualifier, false, + (R.Availability == CXAvailability_Available || + R.Availability == CXAvailability_Deprecated)); Result.ShadowDecl = Using; MaybeAddResult(Result, CurContext); return; @@ -1268,7 +1270,9 @@ if (const auto *Using = dyn_cast(R.Declaration)) { CodeCompletionResult Result(Using->getTargetDecl(), getBasePriority(Using->getTargetDecl()), - R.Qualifier); + R.Qualifier, false, + (R.Availability == CXAvailability_Available || + R.Availability == CXAvailability_Deprecated)); Result.ShadowDecl = Using; AddResult(Result, CurContext, Hiding); return;