forked from OSchip/llvm-project
[Sema][ObjC] Do not propagate the nullability specifier on the receiver
to the result type of a message send if the result type cannot have a nullability specifier. Previously, clang would print the following message when the code in nullability.m was compiled: "incompatible integer to pointer conversion initializing 'int *' with an expression of type 'int _Nullable'" This is wrong as 'int' isn't supposed to have any nullability specifiers. rdar://problem/40830514 llvm-svn: 338048
This commit is contained in:
parent
2e4106b73d
commit
66d405d31f
|
@ -1357,6 +1357,11 @@ QualType Sema::getMessageSendResultType(QualType ReceiverType,
|
|||
if (isClassMessage)
|
||||
return resultType;
|
||||
|
||||
// There is nothing left to do if the result type cannot have a nullability
|
||||
// specifier.
|
||||
if (!resultType->canHaveNullability())
|
||||
return resultType;
|
||||
|
||||
// Map the nullability of the result into a table index.
|
||||
unsigned receiverNullabilityIdx = 0;
|
||||
if (auto nullability = ReceiverType->getNullability(Context))
|
||||
|
|
|
@ -279,3 +279,14 @@ void test(ArraysInMethods *obj) {
|
|||
[obj simpleSugar:0]; // expected-warning {{null passed to a callee that requires a non-null argument}}
|
||||
[obj sugarWithTypedef:0]; // expected-warning {{null passed to a callee that requires a non-null argument}}
|
||||
}
|
||||
|
||||
// Check that we don't propagate the nullability specifier on the receiver to
|
||||
// the result type of a message send if the result type cannot have a
|
||||
// nullability specifier.
|
||||
@interface C0
|
||||
-(int) count;
|
||||
@end
|
||||
|
||||
void testMessageSendResultType(C0 * _Nullable c0) {
|
||||
int *p = [c0 count]; // expected-warning {{incompatible integer to pointer conversion initializing 'int *' with an expression of type 'int'}}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue