forked from OSchip/llvm-project
Improve error reporting of property and setter/getter
type mimatches. llvm-svn: 60630
This commit is contained in:
parent
8707e322cc
commit
ff83998e31
|
@ -571,6 +571,8 @@ DIAG(warn_property_attr_mismatch, WARNING,
|
|||
"property attribute in continuation class does not match the primary class")
|
||||
DIAG(err_accessor_property_type_mismatch, ERROR,
|
||||
"type of property %0 does not match type of accessor %1")
|
||||
DIAG(note_declared_at, NOTE,
|
||||
"declared at")
|
||||
DIAG(err_setter_type_void, ERROR,
|
||||
"type of setter must be void")
|
||||
DIAG(warn_conflicting_types, WARNING,
|
||||
|
|
|
@ -933,21 +933,25 @@ Sema::diagnosePropertySetterGetterMismatch(ObjCPropertyDecl *property,
|
|||
const ObjCMethodDecl *GetterMethod,
|
||||
const ObjCMethodDecl *SetterMethod) {
|
||||
if (GetterMethod &&
|
||||
GetterMethod->getResultType() != property->getType())
|
||||
GetterMethod->getResultType() != property->getType()) {
|
||||
Diag(property->getLocation(),
|
||||
diag::err_accessor_property_type_mismatch)
|
||||
<< property->getDeclName()
|
||||
<< GetterMethod->getSelector().getAsIdentifierInfo();
|
||||
Diag(GetterMethod->getLocation(), diag::note_declared_at);
|
||||
}
|
||||
|
||||
if (SetterMethod) {
|
||||
if (SetterMethod->getResultType() != Context.VoidTy)
|
||||
Diag(SetterMethod->getLocation(), diag::err_setter_type_void);
|
||||
if (SetterMethod->getNumParams() != 1 ||
|
||||
(SetterMethod->getParamDecl(0)->getType() != property->getType()))
|
||||
(SetterMethod->getParamDecl(0)->getType() != property->getType())) {
|
||||
Diag(property->getLocation(),
|
||||
diag::err_accessor_property_type_mismatch)
|
||||
<< property->getDeclName()
|
||||
<< SetterMethod->getSelector().getAsIdentifierInfo();
|
||||
Diag(SetterMethod->getLocation(), diag::note_declared_at);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// RUN: clang -fsyntax-only -verify %s
|
||||
|
||||
@interface A
|
||||
-(float) x;
|
||||
-(float) x; // expected-note {{declared at}}
|
||||
@property int x; // expected-error {{type of property 'x' does not match type of accessor 'x'}}
|
||||
@end
|
||||
|
||||
|
|
Loading…
Reference in New Issue