From 3ea479818dc312902a4dd0823bcf764ed19ac025 Mon Sep 17 00:00:00 2001 From: Aaron Ballman Date: Sun, 24 Nov 2013 20:36:50 +0000 Subject: [PATCH] Making some attribute diagnostics more consistent. Removes a newly-unused diagnostic. Reviewed by Fariborz Jahanian git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@195578 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/DiagnosticSemaKinds.td | 3 --- lib/Sema/SemaDeclAttr.cpp | 8 +++++++- test/SemaObjC/arc-unavailable-for-weakref.m | 2 ++ test/SemaObjC/default-synthesize-3.m | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index 8f2903aaef..bf81169b7f 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -1796,9 +1796,6 @@ def err_attribute_wrong_number_arguments : Error< ":requires exactly %1 arguments}1">; def err_attribute_too_many_arguments : Error< "attribute takes no more than %0 argument%s0">; -def err_suppress_autosynthesis : Error< - "objc_requires_property_definitions attribute may only be specified on a class" - "to a class declaration">; def err_attribute_too_few_arguments : Error< "attribute takes at least %0 argument%s0">; def err_attribute_invalid_vector_type : Error<"invalid vector element type %0">; diff --git a/lib/Sema/SemaDeclAttr.cpp b/lib/Sema/SemaDeclAttr.cpp index 5a0b72fcb5..76cbaa297f 100644 --- a/lib/Sema/SemaDeclAttr.cpp +++ b/lib/Sema/SemaDeclAttr.cpp @@ -2116,6 +2116,11 @@ static void handleAttrWithMessage(Sema &S, Decl *D, static void handleArcWeakrefUnavailableAttr(Sema &S, Decl *D, const AttributeList &Attr) { + if (!isa(D)) { + S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type) + << Attr.getName() << ExpectedObjectiveCInterface; + return; + } D->addAttr(::new (S.Context) ArcWeakrefUnavailableAttr(Attr.getRange(), S.Context, Attr.getAttributeSpellingListIndex())); @@ -2158,7 +2163,8 @@ static void handleObjCSuppresProtocolAttr(Sema &S, Decl *D, static void handleObjCRequiresPropertyDefsAttr(Sema &S, Decl *D, const AttributeList &Attr) { if (!isa(D)) { - S.Diag(Attr.getLoc(), diag::err_suppress_autosynthesis); + S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type) + << Attr.getName() << ExpectedObjectiveCInterface; return; } diff --git a/test/SemaObjC/arc-unavailable-for-weakref.m b/test/SemaObjC/arc-unavailable-for-weakref.m index eab5f2ca74..8274802743 100644 --- a/test/SemaObjC/arc-unavailable-for-weakref.m +++ b/test/SemaObjC/arc-unavailable-for-weakref.m @@ -90,3 +90,5 @@ __attribute__((objc_arc_weak_reference_unavailable)) __attribute__((objc_arc_weak_reference_unavailable(1))) // expected-error {{'objc_arc_weak_reference_unavailable' attribute takes no arguments}} @interface I3 @end + +int I4 __attribute__((objc_arc_weak_reference_unavailable)); // expected-error {{'objc_arc_weak_reference_unavailable' attribute only applies to Objective-C interfaces}} diff --git a/test/SemaObjC/default-synthesize-3.m b/test/SemaObjC/default-synthesize-3.m index 1c32665a2d..0275806dd0 100644 --- a/test/SemaObjC/default-synthesize-3.m +++ b/test/SemaObjC/default-synthesize-3.m @@ -37,7 +37,7 @@ __attribute ((objc_requires_property_definitions)) @interface Deep(CAT) // expected-error {{attributes may not be specified on a category}} @end -__attribute ((objc_requires_property_definitions)) // expected-error {{objc_requires_property_definitions attribute may only be specified on a class}} +__attribute ((objc_requires_property_definitions)) // expected-error {{'objc_requires_property_definitions' attribute only applies to Objective-C interfaces}} @protocol P @end // rdar://13388503 -- 2.40.0