]> granicus.if.org Git - clang/commitdiff
Add a warning for a missing copy attribute on a property that is a
authorMike Stump <mrs@apple.com>
Thu, 7 May 2009 23:06:50 +0000 (23:06 +0000)
committerMike Stump <mrs@apple.com>
Thu, 7 May 2009 23:06:50 +0000 (23:06 +0000)
block pointer.  Radar 6441502

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71190 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaDeclObjC.cpp
test/SemaObjC/block-attr.m [new file with mode: 0644]

index 7ac13d83fc02cf7875cd8f7610da93d1ab48f40c..3b8f24bc65c29cef7809f57699175d9f9f32693d 100644 (file)
@@ -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">;
index 27f127716e5d1401784d9042b814c0d563932293..e35b7a919b49f1e24d1b71c5ed3d78d407b66f39 100644 (file)
@@ -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/test/SemaObjC/block-attr.m b/test/SemaObjC/block-attr.m
new file mode 100644 (file)
index 0000000..d67fd35
--- /dev/null
@@ -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