зеркало из https://github.com/microsoft/clang-1.git
Check for ivar being a C++ object before attempting to
find a copy constructor/assignment operator used in getter/setter synthesis. This removes an unintended diagnostics and makes objc++ consistant with objective-c. // rdar: //8550657. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@116631 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
06205ca78c
Коммит
0313f441b7
|
@ -460,7 +460,8 @@ Decl *Sema::ActOnPropertyImplDecl(Scope *S,
|
||||||
Ivar);
|
Ivar);
|
||||||
if (ObjCMethodDecl *getterMethod = property->getGetterMethodDecl()) {
|
if (ObjCMethodDecl *getterMethod = property->getGetterMethodDecl()) {
|
||||||
getterMethod->createImplicitParams(Context, IDecl);
|
getterMethod->createImplicitParams(Context, IDecl);
|
||||||
if (getLangOptions().CPlusPlus && Synthesize) {
|
if (getLangOptions().CPlusPlus && Synthesize &&
|
||||||
|
Ivar->getType()->isRecordType()) {
|
||||||
// For Objective-C++, need to synthesize the AST for the IVAR object to be
|
// For Objective-C++, need to synthesize the AST for the IVAR object to be
|
||||||
// returned by the getter as it must conform to C++'s copy-return rules.
|
// returned by the getter as it must conform to C++'s copy-return rules.
|
||||||
// FIXME. Eventually we want to do this for Objective-C as well.
|
// FIXME. Eventually we want to do this for Objective-C as well.
|
||||||
|
@ -488,7 +489,8 @@ Decl *Sema::ActOnPropertyImplDecl(Scope *S,
|
||||||
}
|
}
|
||||||
if (ObjCMethodDecl *setterMethod = property->getSetterMethodDecl()) {
|
if (ObjCMethodDecl *setterMethod = property->getSetterMethodDecl()) {
|
||||||
setterMethod->createImplicitParams(Context, IDecl);
|
setterMethod->createImplicitParams(Context, IDecl);
|
||||||
if (getLangOptions().CPlusPlus && Synthesize) {
|
if (getLangOptions().CPlusPlus && Synthesize
|
||||||
|
&& Ivar->getType()->isRecordType()) {
|
||||||
// FIXME. Eventually we want to do this for Objective-C as well.
|
// FIXME. Eventually we want to do this for Objective-C as well.
|
||||||
ImplicitParamDecl *SelfDecl = setterMethod->getSelfDecl();
|
ImplicitParamDecl *SelfDecl = setterMethod->getSelfDecl();
|
||||||
DeclRefExpr *SelfExpr =
|
DeclRefExpr *SelfExpr =
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
@implementation MyClass
|
@implementation MyClass
|
||||||
|
|
||||||
@synthesize array=_array; // expected-error {{assigning to 'NSMutableArray *' from incompatible type 'NSArray *'}}
|
@synthesize array=_array;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче