diff options
Diffstat (limited to 'clang/lib/Sema/SemaCodeComplete.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaCodeComplete.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp index 00232f64b77..5369a4beb21 100644 --- a/clang/lib/Sema/SemaCodeComplete.cpp +++ b/clang/lib/Sema/SemaCodeComplete.cpp @@ -5529,7 +5529,7 @@ void Sema::CodeCompleteObjCInstanceMessage(Scope *S, Expr *Receiver, // If we're messaging an expression with type "id" or "Class", check // whether we know something special about the receiver that allows // us to assume a more-specific receiver type. - if (ReceiverType->isObjCIdType() || ReceiverType->isObjCClassType()) + if (ReceiverType->isObjCIdType() || ReceiverType->isObjCClassType()) { if (ObjCInterfaceDecl *IFace = GetAssumedMessageSendExprType(RecExpr)) { if (ReceiverType->isObjCClassType()) return CodeCompleteObjCClassMessage(S, @@ -5540,6 +5540,13 @@ void Sema::CodeCompleteObjCInstanceMessage(Scope *S, Expr *Receiver, ReceiverType = Context.getObjCObjectPointerType( Context.getObjCInterfaceType(IFace)); } + } else if (RecExpr && getLangOpts().CPlusPlus) { + ExprResult Conv = PerformContextuallyConvertToObjCPointer(RecExpr); + if (Conv.isUsable()) { + RecExpr = Conv.take(); + ReceiverType = RecExpr->getType(); + } + } // Build the set of methods we can see. ResultBuilder Results(*this, CodeCompleter->getAllocator(), |

