Author: hans Date: Tue Aug 22 09:23:19 2017 New Revision: 311464 URL: http://llvm.org/viewvc/llvm-project?rev=311464&view=rev Log: Merging r311443: ------------------------------------------------------------------------ r311443 | arphaman | 2017-08-22 03:38:07 -0700 (Tue, 22 Aug 2017) | 15 lines
[ObjC] Check written attributes only when synthesizing ambiguous property This commit fixes a bug introduced in r307903. The attribute ambiguity checker that was introduced in r307903 checked all property attributes, which caused errors for source-compatible properties, like: @property (nonatomic, readonly) NSObject *prop; @property (nonatomic, readwrite) NSObject *prop; because the readwrite property would get implicit 'strong' attribute. The ambiguity checker should be concerned about explicitly specified attributes only. rdar://33748089 ------------------------------------------------------------------------ Modified: cfe/branches/release_50/ (props changed) cfe/branches/release_50/lib/Sema/SemaObjCProperty.cpp cfe/branches/release_50/test/SemaObjC/arc-property-decl-attrs.m Propchange: cfe/branches/release_50/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Aug 22 09:23:19 2017 @@ -1,4 +1,4 @@ /cfe/branches/type-system-rewrite:134693-134817 -/cfe/trunk:308455,308722,308824,308897,308996,309054,309058,309112-309113,309226,309263,309327,309382-309383,309488,309503,309523,309569,309607,309633,309636,309640,309722,309752,309975,310006,310158,310191,310359,310516,310672,310691-310692,310694,310700,310704,310706,310776,310804,310829,310983,311115,311182 +/cfe/trunk:308455,308722,308824,308897,308996,309054,309058,309112-309113,309226,309263,309327,309382-309383,309488,309503,309523,309569,309607,309633,309636,309640,309722,309752,309975,310006,310158,310191,310359,310516,310672,310691-310692,310694,310700,310704,310706,310776,310804,310829,310983,311115,311182,311443 /cfe/trunk/test:170344 /cfe/trunk/test/SemaTemplate:126920 Modified: cfe/branches/release_50/lib/Sema/SemaObjCProperty.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_50/lib/Sema/SemaObjCProperty.cpp?rev=311464&r1=311463&r2=311464&view=diff ============================================================================== --- cfe/branches/release_50/lib/Sema/SemaObjCProperty.cpp (original) +++ cfe/branches/release_50/lib/Sema/SemaObjCProperty.cpp Tue Aug 22 09:23:19 2017 @@ -872,7 +872,7 @@ SelectPropertyForSynthesisFromProtocols( } QualType RHSType = S.Context.getCanonicalType(Property->getType()); - unsigned OriginalAttributes = Property->getPropertyAttributes(); + unsigned OriginalAttributes = Property->getPropertyAttributesAsWritten(); enum MismatchKind { IncompatibleType = 0, HasNoExpectedAttribute, @@ -890,7 +890,7 @@ SelectPropertyForSynthesisFromProtocols( SmallVector<MismatchingProperty, 4> Mismatches; for (ObjCPropertyDecl *Prop : Properties) { // Verify the property attributes. - unsigned Attr = Prop->getPropertyAttributes(); + unsigned Attr = Prop->getPropertyAttributesAsWritten(); if (Attr != OriginalAttributes) { auto Diag = [&](bool OriginalHasAttribute, StringRef AttributeName) { MismatchKind Kind = OriginalHasAttribute ? HasNoExpectedAttribute Modified: cfe/branches/release_50/test/SemaObjC/arc-property-decl-attrs.m URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_50/test/SemaObjC/arc-property-decl-attrs.m?rev=311464&r1=311463&r2=311464&view=diff ============================================================================== --- cfe/branches/release_50/test/SemaObjC/arc-property-decl-attrs.m (original) +++ cfe/branches/release_50/test/SemaObjC/arc-property-decl-attrs.m Tue Aug 22 09:23:19 2017 @@ -225,3 +225,30 @@ __attribute__((objc_root_class)) @implementation TypeVsSetter @synthesize prop; // expected-note {{property synthesized here}} @end + +@protocol AutoStrongProp + +@property (nonatomic, readonly) NSObject *prop; + +@end + +@protocol AutoStrongProp_Internal <AutoStrongProp> + +// This property gets the 'strong' attribute automatically. +@property (nonatomic, readwrite) NSObject *prop; + +@end + +@interface SynthesizeWithImplicitStrongNoError : NSObject <AutoStrongProp> +@end + +@interface SynthesizeWithImplicitStrongNoError () <AutoStrongProp_Internal> + +@end + +@implementation SynthesizeWithImplicitStrongNoError + +// no error, 'strong' is implicit in the 'readwrite' property. +@synthesize prop = _prop; + +@end _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits