зеркало из 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);
|
||||
if (ObjCMethodDecl *getterMethod = property->getGetterMethodDecl()) {
|
||||
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
|
||||
// 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.
|
||||
|
@ -488,7 +489,8 @@ Decl *Sema::ActOnPropertyImplDecl(Scope *S,
|
|||
}
|
||||
if (ObjCMethodDecl *setterMethod = property->getSetterMethodDecl()) {
|
||||
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.
|
||||
ImplicitParamDecl *SelfDecl = setterMethod->getSelfDecl();
|
||||
DeclRefExpr *SelfExpr =
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
@implementation MyClass
|
||||
|
||||
@synthesize array=_array; // expected-error {{assigning to 'NSMutableArray *' from incompatible type 'NSArray *'}}
|
||||
@synthesize array=_array;
|
||||
|
||||
@end
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче