forked from OSchip/llvm-project
[analyzer] Reword error messages for nil keys and values of NSMutableDictionary.
llvm-svn: 178935
This commit is contained in:
parent
a4fdefffd0
commit
4d1e30471d
|
@ -123,18 +123,29 @@ void NilArgChecker::WarnIfNilArg(CheckerContext &C,
|
|||
if (Class == FC_NSArray) {
|
||||
os << "Array element cannot be nil";
|
||||
} else if (Class == FC_NSDictionary) {
|
||||
if (Arg == 0)
|
||||
os << "Dictionary object cannot be nil";
|
||||
else {
|
||||
if (Arg == 0) {
|
||||
os << "Value stored in '";
|
||||
os << GetReceiverInterfaceName(msg) << "' cannot be nil";
|
||||
} else {
|
||||
assert(Arg == 1);
|
||||
os << "Dictionary key cannot be nil";
|
||||
os << "'"<< GetReceiverInterfaceName(msg) << "' key cannot be nil";
|
||||
}
|
||||
} else
|
||||
llvm_unreachable("Missing foundation class for the subscript expr");
|
||||
|
||||
} else {
|
||||
os << "Argument to '" << GetReceiverInterfaceName(msg) << "' method '"
|
||||
<< msg.getSelector().getAsString() << "' cannot be nil";
|
||||
if (Class == FC_NSDictionary) {
|
||||
if (Arg == 0)
|
||||
os << "Value argument ";
|
||||
else {
|
||||
assert(Arg == 1);
|
||||
os << "Key argument ";
|
||||
}
|
||||
os << "to '" << msg.getSelector().getAsString() << "' cannot be nil";
|
||||
} else {
|
||||
os << "Argument to '" << GetReceiverInterfaceName(msg) << "' method '"
|
||||
<< msg.getSelector().getAsString() << "' cannot be nil";
|
||||
}
|
||||
}
|
||||
|
||||
BugReport *R = new BugReport(*BT, os.str(), N);
|
||||
|
|
|
@ -115,32 +115,32 @@ void testNilArgNSArray1() {
|
|||
|
||||
// NSMutableDictionary and NSDictionary APIs.
|
||||
void testNilArgNSMutableDictionary1(NSMutableDictionary *d, NSString* key) {
|
||||
[d setObject:0 forKey:key]; // expected-warning {{Argument to 'NSMutableDictionary' method 'setObject:forKey:' cannot be nil}}
|
||||
[d setObject:0 forKey:key]; // expected-warning {{Value argument to 'setObject:forKey:' cannot be nil}}
|
||||
}
|
||||
|
||||
void testNilArgNSMutableDictionary2(NSMutableDictionary *d, NSObject *obj) {
|
||||
[d setObject:obj forKey:0]; // expected-warning {{Argument to 'NSMutableDictionary' method 'setObject:forKey:' cannot be nil}}
|
||||
[d setObject:obj forKey:0]; // expected-warning {{Key argument to 'setObject:forKey:' cannot be nil}}
|
||||
}
|
||||
|
||||
void testNilArgNSMutableDictionary3(NSMutableDictionary *d) {
|
||||
[d removeObjectForKey:0]; // expected-warning {{Argument to 'NSMutableDictionary' method 'removeObjectForKey:' cannot be nil}}
|
||||
[d removeObjectForKey:0]; // expected-warning {{Value argument to 'removeObjectForKey:' cannot be nil}}
|
||||
}
|
||||
|
||||
void testNilArgNSMutableDictionary5(NSMutableDictionary *d, NSString* key) {
|
||||
d[key] = 0; // expected-warning {{Dictionary object cannot be nil}}
|
||||
d[key] = 0; // expected-warning {{Value stored in 'NSMutableDictionary' cannot be nil}}
|
||||
}
|
||||
void testNilArgNSMutableDictionary6(NSMutableDictionary *d, NSString *key) {
|
||||
if (key)
|
||||
;
|
||||
d[key] = 0; // expected-warning {{Dictionary key cannot be nil}}
|
||||
// expected-warning@-1 {{Dictionary object cannot be nil}}
|
||||
d[key] = 0; // expected-warning {{'NSMutableDictionary' key cannot be nil}}
|
||||
// expected-warning@-1 {{Value stored in 'NSMutableDictionary' cannot be nil}}
|
||||
}
|
||||
|
||||
NSDictionary *testNilArgNSDictionary1(NSString* key) {
|
||||
return [NSDictionary dictionaryWithObject:0 forKey:key]; // expected-warning {{Argument to 'NSDictionary' method 'dictionaryWithObject:forKey:' cannot be nil}}
|
||||
return [NSDictionary dictionaryWithObject:0 forKey:key]; // expected-warning {{Value argument to 'dictionaryWithObject:forKey:' cannot be nil}}
|
||||
}
|
||||
NSDictionary *testNilArgNSDictionary2(NSObject *obj) {
|
||||
return [NSDictionary dictionaryWithObject:obj forKey:0]; // expected-warning {{Argument to 'NSDictionary' method 'dictionaryWithObject:forKey:' cannot be nil}}
|
||||
return [NSDictionary dictionaryWithObject:obj forKey:0]; // expected-warning {{Key argument to 'dictionaryWithObject:forKey:' cannot be nil}}
|
||||
}
|
||||
|
||||
// Test inline defensive checks suppression.
|
||||
|
|
Loading…
Reference in New Issue