зеркало из https://github.com/microsoft/clang-1.git
Don't produce 'instancetype' as the type of a message send expression. Map it down to 'id'.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139394 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
e761230ae3
Коммит
5c16d635ff
|
@ -271,6 +271,13 @@ ObjCMethodDecl *Sema::tryCaptureObjCSelf() {
|
|||
return method;
|
||||
}
|
||||
|
||||
static QualType stripObjCInstanceType(ASTContext &Context, QualType T) {
|
||||
if (T == Context.getObjCInstanceType())
|
||||
return Context.getObjCIdType();
|
||||
|
||||
return T;
|
||||
}
|
||||
|
||||
QualType Sema::getMessageSendResultType(QualType ReceiverType,
|
||||
ObjCMethodDecl *Method,
|
||||
bool isClassMessage, bool isSuperMessage) {
|
||||
|
@ -283,7 +290,7 @@ QualType Sema::getMessageSendResultType(QualType ReceiverType,
|
|||
// was a class message send, T is the declared return type of the method
|
||||
// found
|
||||
if (Method->isInstanceMethod() && isClassMessage)
|
||||
return Method->getSendResultType();
|
||||
return stripObjCInstanceType(Context, Method->getSendResultType());
|
||||
|
||||
// - if the receiver is super, T is a pointer to the class of the
|
||||
// enclosing method definition
|
||||
|
@ -302,7 +309,7 @@ QualType Sema::getMessageSendResultType(QualType ReceiverType,
|
|||
// T is the declared return type of the method.
|
||||
if (ReceiverType->isObjCClassType() ||
|
||||
ReceiverType->isObjCQualifiedClassType())
|
||||
return Method->getSendResultType();
|
||||
return stripObjCInstanceType(Context, Method->getSendResultType());
|
||||
|
||||
// - if the receiver is id, qualified id, Class, or qualified Class, T
|
||||
// is the receiver type, otherwise
|
||||
|
|
Загрузка…
Ссылка в новой задаче