forked from OSchip/llvm-project
fix a crash on unnamed properties like:
@property (readonly) int : 4; llvm-svn: 57805
This commit is contained in:
parent
e0d3fe9b97
commit
93429b047b
|
@ -418,6 +418,8 @@ DIAG(err_objc_illegal_interface_qual, ERROR,
|
|||
"illegal interface qualifier")
|
||||
DIAG(err_objc_expected_equal, ERROR,
|
||||
"setter/getter expects '=' followed by name")
|
||||
DIAG(err_objc_property_requires_field_name, ERROR,
|
||||
"@property requires fields to be named")
|
||||
DIAG(err_objc_expected_property_attr, ERROR,
|
||||
"unknown property attribute detected")
|
||||
DIAG(err_objc_unexpected_attr, ERROR,
|
||||
|
|
|
@ -316,21 +316,27 @@ void Parser::ParseObjCInterfaceDeclList(DeclTy *interfaceDecl,
|
|||
// Convert them all to property declarations.
|
||||
for (unsigned i = 0, e = FieldDeclarators.size(); i != e; ++i) {
|
||||
FieldDeclarator &FD = FieldDeclarators[i];
|
||||
if (FD.D.getIdentifier() == 0) {
|
||||
Diag(AtLoc, diag::err_objc_property_requires_field_name,
|
||||
FD.D.getSourceRange());
|
||||
continue;
|
||||
}
|
||||
|
||||
// Install the property declarator into interfaceDecl.
|
||||
IdentifierInfo *SelName =
|
||||
OCDS.getGetterName() ? OCDS.getGetterName() : FD.D.getIdentifier();
|
||||
|
||||
Selector GetterSel =
|
||||
PP.getSelectorTable().getNullarySelector(OCDS.getGetterName()
|
||||
? OCDS.getGetterName()
|
||||
: FD.D.getIdentifier());
|
||||
PP.getSelectorTable().getNullarySelector(SelName);
|
||||
IdentifierInfo *SetterName = OCDS.getSetterName();
|
||||
if (!SetterName)
|
||||
SetterName = constructSetterName(PP.getIdentifierTable(),
|
||||
FD.D.getIdentifier());
|
||||
Selector SetterSel =
|
||||
PP.getSelectorTable().getUnarySelector(SetterName);
|
||||
DeclTy *Property = Actions.ActOnProperty(CurScope,
|
||||
AtLoc, FD, OCDS,
|
||||
GetterSel, SetterSel,
|
||||
MethodImplKind);
|
||||
DeclTy *Property = Actions.ActOnProperty(CurScope, AtLoc, FD, OCDS,
|
||||
GetterSel, SetterSel,
|
||||
MethodImplKind);
|
||||
allProperties.push_back(Property);
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -36,3 +36,15 @@ typedef signed char BOOL;
|
|||
@implementation MyClass
|
||||
@synthesize myIvar = _myIvar;
|
||||
@end
|
||||
|
||||
|
||||
@interface BadPropClass
|
||||
{
|
||||
}
|
||||
|
||||
@property (readonly) int; // expected-warning {{declaration does not declare anything}}
|
||||
@property (readonly) ; // expected-error {{type name requires a specifier or qualifier}} \
|
||||
expected-warning {{declaration does not declare anything}}
|
||||
@property (readonly) int : 4; // expected-error {{property requires fields to be named}}
|
||||
|
||||
@end
|
||||
|
|
Loading…
Reference in New Issue