]> granicus.if.org Git - clang/commitdiff
ivars craeted for explicit @synthesize and those
authorFariborz Jahanian <fjahanian@apple.com>
Wed, 15 Dec 2010 23:29:04 +0000 (23:29 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Wed, 15 Dec 2010 23:29:04 +0000 (23:29 +0000)
created for auto-synthesis are @private.
Fixes: // rdar://8769582
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@121913 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaExpr.cpp
lib/Sema/SemaObjCProperty.cpp
test/CodeGenObjC/interface-layout-64.m
test/SemaObjC/synthesized-ivar.m

index dff9b458ba306a0988ac8002c38aa46c507e9c01..e4896afa323db6c943b456399d2a9b4b0a23a7c5 100644 (file)
@@ -1374,7 +1374,7 @@ static ObjCIvarDecl *SynthesizeProvisionalIvar(Sema &SemaRef,
     ObjCIvarDecl *Ivar = ObjCIvarDecl::Create(SemaRef.Context, ClassImpDecl, 
                                               NameLoc,
                                               II, PropType, /*Dinfo=*/0,
-                                              ObjCIvarDecl::Protected,
+                                              ObjCIvarDecl::Private,
                                               (Expr *)0, true);
     ClassImpDecl->addDecl(Ivar);
     IDecl->makeDeclVisibleInContext(Ivar, false);
index aa934d8e9c5882f645740769799539f0fd0122f1..a1664d558e7ed3682b0baed84daffc080c473a4a 100644 (file)
@@ -398,7 +398,7 @@ Decl *Sema::ActOnPropertyImplDecl(Scope *S,
     if (!Ivar) {
       Ivar = ObjCIvarDecl::Create(Context, ClassImpDecl, PropertyLoc,
                                   PropertyIvar, PropType, /*Dinfo=*/0,
-                                  ObjCIvarDecl::Protected,
+                                  ObjCIvarDecl::Private,
                                   (Expr *)0, true);
       ClassImpDecl->addDecl(Ivar);
       IDecl->makeDeclVisibleInContext(Ivar, false);
index 2800b41c5246967bd565c47105b0dc3fe8cfa4cc..af898bbedd81123fbb49cac2a601fc5b4c96231e 100644 (file)
@@ -5,8 +5,8 @@
 // RUN: grep '@"OBJC_IVAR_$_I3._iv3" = global i64 12, section "__DATA, __objc_const", align 8' %t
 // RUN: grep '@"OBJC_IVAR_$_I4._iv4" = global i64 13, section "__DATA, __objc_const", align 8' %t
 // RUN: grep '@"OBJC_IVAR_$_I5._iv5" = global i64 14, section "__DATA, __objc_const", align 8' %t
-// RUN: grep '@"OBJC_IVAR_$_I5._iv6_synth" = global i64 16, section "__DATA, __objc_const", align 8' %t
-// RUN: grep '@"OBJC_IVAR_$_I5._iv7_synth" = global i64 20, section "__DATA, __objc_const", align 8' %t
+// RUN: grep '@"OBJC_IVAR_$_I5._iv6_synth" = hidden global i64 16, section "__DATA, __objc_const", align 8' %t
+// RUN: grep '@"OBJC_IVAR_$_I5._iv7_synth" = hidden global i64 20, section "__DATA, __objc_const", align 8' %t
 // RUN: grep '@"OBJC_IVAR_$_I6.iv0" = global i64 0, section "__DATA, __objc_const", align 8' %t
 // RUN: grep '@"OBJC_IVAR_$_I8.b" = global i64 8, section "__DATA, __objc_const", align 8' %t
 // RUN: grep '@"OBJC_IVAR_$_I9.iv0" = global i64 0, section "__DATA, __objc_const", align 8' %t
index 01e51efed73e51bad3d075b1231df2f8d8b82f57..6d7e4e7ff209c288d2bc408be323497a40953bf3 100644 (file)
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -fsyntax-only -fobjc-nonfragile-abi -verify %s
+// RUN: %clang_cc1 -fsyntax-only -fobjc-nonfragile-abi2 -verify %s
 @interface I
 {
 }
 @end
 
 // rdar://7823675
-int f0(I *a) { return a->IP; } // expected-error {{instance variable 'IP' is protected}}
+int f0(I *a) { return a->IP; } // expected-error {{instance variable 'IP' is private}}
+
+// rdar://8769582
+
+@interface I1 {
+ int protected_ivar;
+}
+@property int PROP_INMAIN;
+@end
+
+@interface I1() {
+ int private_ivar;
+}
+@property int PROP_INCLASSEXT;
+@end
+
+@implementation I1
+- (int) Meth {
+   PROP_INMAIN = 1;
+   PROP_INCLASSEXT = 2;
+   protected_ivar = 1; // OK
+   return private_ivar; // OK
+}
+@end
+
+
+@interface DER : I1
+@end
+
+@implementation DER
+- (int) Meth {
+   protected_ivar = 1; // OK
+   PROP_INMAIN = 1; // expected-error {{instance variable 'PROP_INMAIN' is private}}
+   PROP_INCLASSEXT = 2; // expected-error {{instance variable 'PROP_INCLASSEXT' is private}}
+   return private_ivar; // expected-error {{instance variable 'private_ivar' is private}}
+}
+@end
+