Hi Hans, Can you please merge this into LLVM 5? It fixes a rather serious Objective-C bug that I introduced just a couple of weeks before the branch.
Cheers, Alex On 22 August 2017 at 11:38, Alex Lorenz via cfe-commits < cfe-commits@lists.llvm.org> wrote: > Author: arphaman > Date: Tue Aug 22 03:38:07 2017 > New Revision: 311443 > > URL: http://llvm.org/viewvc/llvm-project?rev=311443&view=rev > Log: > [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/trunk/lib/Sema/SemaObjCProperty.cpp > cfe/trunk/test/SemaObjC/arc-property-decl-attrs.m > > Modified: cfe/trunk/lib/Sema/SemaObjCProperty.cpp > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaO > bjCProperty.cpp?rev=311443&r1=311442&r2=311443&view=diff > ============================================================ > ================== > --- cfe/trunk/lib/Sema/SemaObjCProperty.cpp (original) > +++ cfe/trunk/lib/Sema/SemaObjCProperty.cpp Tue Aug 22 03:38:07 2017 > @@ -872,7 +872,7 @@ SelectPropertyForSynthesisFromProtocols( > } > > QualType RHSType = S.Context.getCanonicalType(Property->getType()); > - unsigned OriginalAttributes = Property->getPropertyAttributes(); > + unsigned OriginalAttributes = Property->getPropertyAttribute > sAsWritten(); > 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/trunk/test/SemaObjC/arc-property-decl-attrs.m > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/ > arc-property-decl-attrs.m?rev=311443&r1=311442&r2=311443&view=diff > ============================================================ > ================== > --- cfe/trunk/test/SemaObjC/arc-property-decl-attrs.m (original) > +++ cfe/trunk/test/SemaObjC/arc-property-decl-attrs.m Tue Aug 22 03:38:07 > 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 > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits