diff options
author | Mike Stump <mrs@apple.com> | 2009-05-07 23:06:50 +0000 |
---|---|---|
committer | Mike Stump <mrs@apple.com> | 2009-05-07 23:06:50 +0000 |
commit | 5580bdcaa2d4fd8e12ef3c46b47fad4b85e32e53 (patch) | |
tree | 5fb6faa211699091f0147eb0bd59169c88c68395 | |
parent | 81ded6951180caf4bccaef638f31fabcfab0627d (diff) | |
download | bcm5719-llvm-5580bdcaa2d4fd8e12ef3c46b47fad4b85e32e53.tar.gz bcm5719-llvm-5580bdcaa2d4fd8e12ef3c46b47fad4b85e32e53.zip |
Add a warning for a missing copy attribute on a property that is a
block pointer. Radar 6441502
llvm-svn: 71190
-rw-r--r-- | clang/include/clang/Basic/DiagnosticSemaKinds.td | 3 | ||||
-rw-r--r-- | clang/lib/Sema/SemaDeclObjC.cpp | 5 | ||||
-rw-r--r-- | clang/test/SemaObjC/block-attr.m | 9 |
3 files changed, 17 insertions, 0 deletions
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index 7ac13d83fc0..3b8f24bc65c 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -194,6 +194,9 @@ def warn_objc_property_default_assign_on_object : Warning< "default property attribute 'assign' not appropriate for non-gc object">; def warn_property_attr_mismatch : Warning< "property attribute in continuation class does not match the primary class">; +def warn_objc_property_copy_missing_on_block : Warning< + "'copy' attribute must be specified for the block property " + "when -fobjc-gc-only is specified">; def err_use_continuation_class : Error< "attribute of property in continuation class of %0 can only be 'readwrite'">; def err_continuation_class : Error<"continuation class has no primary class">; diff --git a/clang/lib/Sema/SemaDeclObjC.cpp b/clang/lib/Sema/SemaDeclObjC.cpp index 27f127716e5..e35b7a919b4 100644 --- a/clang/lib/Sema/SemaDeclObjC.cpp +++ b/clang/lib/Sema/SemaDeclObjC.cpp @@ -1750,6 +1750,11 @@ void Sema::CheckObjCPropertyAttributes(QualType PropertyTy, // <rdar://5168496&4855821&5607453&5096644&4947311&5698469&4947014&5168496> // (please trim this list while you are at it). } + + if (!(Attributes & ObjCDeclSpec::DQ_PR_copy) + && getLangOptions().getGCMode() == LangOptions::GCOnly + && PropertyTy->isBlockPointerType()) + Diag(Loc, diag::warn_objc_property_copy_missing_on_block); } Sema::DeclPtrTy Sema::ActOnProperty(Scope *S, SourceLocation AtLoc, diff --git a/clang/test/SemaObjC/block-attr.m b/clang/test/SemaObjC/block-attr.m new file mode 100644 index 00000000000..d67fd354354 --- /dev/null +++ b/clang/test/SemaObjC/block-attr.m @@ -0,0 +1,9 @@ +// RUN: clang-cc -triple x86_64-apple-darwin10 -fsyntax-only -verify -fblocks -fobjc-gc-only %s + +@interface Thing {} + +@property void(^someBlock)(void); // expected-warning {{'copy' attribute must be specified for the block property}} +@property(copy) void(^OK)(void); + + +@end |