зеркало из https://github.com/microsoft/clang-1.git
Fix <rdar://problem/6253149> property declaration doesn't declare getter and setter.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56785 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
48002c8957
Коммит
5e0a74fbf4
|
@ -874,6 +874,9 @@ void Sema::ActOnAtEnd(SourceLocation AtEndLoc, DeclTy *classDecl,
|
|||
}
|
||||
}
|
||||
}
|
||||
// Save the size so we can detect if we've added any property methods.
|
||||
unsigned int insMethodsSizePriorToPropAdds = insMethods.size();
|
||||
unsigned int clsMethodsSizePriorToPropAdds = clsMethods.size();
|
||||
|
||||
if (ObjCInterfaceDecl *I = dyn_cast<ObjCInterfaceDecl>(ClassDecl)) {
|
||||
// Compares properties declared in this class to those of its
|
||||
|
@ -925,6 +928,24 @@ void Sema::ActOnAtEnd(SourceLocation AtEndLoc, DeclTy *classDecl,
|
|||
}
|
||||
}
|
||||
}
|
||||
// Add any synthesized methods to the global pool. This allows us to
|
||||
// handle the following, which is supported by GCC (and part of the design).
|
||||
//
|
||||
// @interface Foo
|
||||
// @property double bar;
|
||||
// @end
|
||||
//
|
||||
// void thisIsUnfortunate() {
|
||||
// id foo;
|
||||
// double bar = [foo bar];
|
||||
// }
|
||||
//
|
||||
if (insMethodsSizePriorToPropAdds < insMethods.size())
|
||||
for (unsigned i = insMethodsSizePriorToPropAdds; i < insMethods.size(); i++)
|
||||
AddInstanceMethodToGlobalPool(insMethods[i]);
|
||||
if (clsMethodsSizePriorToPropAdds < clsMethods.size())
|
||||
for (unsigned i = clsMethodsSizePriorToPropAdds; i < clsMethods.size(); i++)
|
||||
AddFactoryMethodToGlobalPool(clsMethods[i]);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -35,5 +35,13 @@
|
|||
@dynamic d; // expected-error {{property implementation in a category with no category declaration}}
|
||||
@end
|
||||
|
||||
@interface Foo
|
||||
@property double bar;
|
||||
@end
|
||||
|
||||
int main() {
|
||||
id foo;
|
||||
double bar = [foo bar];
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче