r311443 - [ObjC] Check written attributes only when synthesizing ambiguous property
Alex L via cfe-commits
cfe-commits at lists.llvm.org
Tue Aug 22 03:42:49 PDT 2017
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 at 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
> +
> + at protocol AutoStrongProp
> +
> + at property (nonatomic, readonly) NSObject *prop;
> +
> + at end
> +
> + at protocol AutoStrongProp_Internal <AutoStrongProp>
> +
> +// This property gets the 'strong' attribute automatically.
> + at property (nonatomic, readwrite) NSObject *prop;
> +
> + at end
> +
> + at interface SynthesizeWithImplicitStrongNoError : NSObject
> <AutoStrongProp>
> + at end
> +
> + at interface SynthesizeWithImplicitStrongNoError ()
> <AutoStrongProp_Internal>
> +
> + at end
> +
> + at implementation SynthesizeWithImplicitStrongNoError
> +
> +// no error, 'strong' is implicit in the 'readwrite' property.
> + at synthesize prop = _prop;
> +
> + at end
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170822/429e32a2/attachment.html>
More information about the cfe-commits
mailing list