Index: cfe/trunk/include/clang/Sema/Scope.h =================================================================== --- cfe/trunk/include/clang/Sema/Scope.h +++ cfe/trunk/include/clang/Sema/Scope.h @@ -127,6 +127,9 @@ /// This is a compound statement scope. CompoundStmtScope = 0x400000, + + /// We are between inheritance colon and the real class/struct definition scope. + ClassInheritanceScope = 0x800000, }; private: /// The parent scope for this scope. This is null for the translation-unit Index: cfe/trunk/lib/Parse/ParseDeclCXX.cpp =================================================================== --- cfe/trunk/lib/Parse/ParseDeclCXX.cpp +++ cfe/trunk/lib/Parse/ParseDeclCXX.cpp @@ -3195,6 +3195,9 @@ } if (Tok.is(tok::colon)) { + ParseScope InheritanceScope(this, getCurScope()->getFlags() | + Scope::ClassInheritanceScope); + ParseBaseClause(TagDecl); if (!Tok.is(tok::l_brace)) { bool SuggestFixIt = false; Index: cfe/trunk/lib/Sema/SemaCodeComplete.cpp =================================================================== --- cfe/trunk/lib/Sema/SemaCodeComplete.cpp +++ cfe/trunk/lib/Sema/SemaCodeComplete.cpp @@ -1658,21 +1658,23 @@ if (CCC == Sema::PCC_Class) { AddTypedefResult(Results); + bool IsNotInheritanceScope = + !(S->getFlags() & Scope::ClassInheritanceScope); // public: Builder.AddTypedTextChunk("public"); - if (Results.includeCodePatterns()) + if (IsNotInheritanceScope && Results.includeCodePatterns()) Builder.AddChunk(CodeCompletionString::CK_Colon); Results.AddResult(Result(Builder.TakeString())); // protected: Builder.AddTypedTextChunk("protected"); - if (Results.includeCodePatterns()) + if (IsNotInheritanceScope && Results.includeCodePatterns()) Builder.AddChunk(CodeCompletionString::CK_Colon); Results.AddResult(Result(Builder.TakeString())); // private: Builder.AddTypedTextChunk("private"); - if (Results.includeCodePatterns()) + if (IsNotInheritanceScope && Results.includeCodePatterns()) Builder.AddChunk(CodeCompletionString::CK_Colon); Results.AddResult(Result(Builder.TakeString())); } Index: cfe/trunk/test/Index/complete-super.cpp =================================================================== --- cfe/trunk/test/Index/complete-super.cpp +++ cfe/trunk/test/Index/complete-super.cpp @@ -40,3 +40,8 @@ // CHECK-ACCESS-PATTERN: NotImplemented:{TypedText private}{Colon :} (40) // CHECK-ACCESS-PATTERN: NotImplemented:{TypedText protected}{Colon :} (40) // CHECK-ACCESS-PATTERN: NotImplemented:{TypedText public}{Colon :} (40) + +// RUN: env CINDEXTEST_CODE_COMPLETE_PATTERNS=1 c-index-test -code-completion-at=%s:10:12 %s | FileCheck -check-prefix=CHECK-INHERITANCE-PATTERN %s +// CHECK-INHERITANCE-PATTERN: NotImplemented:{TypedText private} (40) +// CHECK-INHERITANCE-PATTERN: NotImplemented:{TypedText protected} (40) +// CHECK-INHERITANCE-PATTERN: NotImplemented:{TypedText public} (40)