]> granicus.if.org Git - clang/commitdiff
[arcmt] When migrating to ARC disable -Werror so as to only block migration
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Wed, 20 Jun 2012 01:10:40 +0000 (01:10 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Wed, 20 Jun 2012 01:10:40 +0000 (01:10 +0000)
for "hard" ARC errors, not warnings.

rdar://11691437

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

lib/ARCMigrate/ARCMT.cpp
test/ARCMT/checking.m

index 83b06db50adc30ba0201083cb7bbc1fa9d130abb..fcbcb2194a3271a0ca9b307313e5583e7411dc86 100644 (file)
@@ -195,8 +195,18 @@ createInvocationForMigration(CompilerInvocation &origCI) {
   CInvok->getLangOpts()->ObjCAutoRefCount = true;
   CInvok->getLangOpts()->setGC(LangOptions::NonGC);
   CInvok->getDiagnosticOpts().ErrorLimit = 0;
-  CInvok->getDiagnosticOpts().Warnings.push_back(
-                                            "error=arc-unsafe-retained-assign");
+
+  // Ignore -Werror flags when migrating.
+  std::vector<std::string> WarnOpts;
+  for (std::vector<std::string>::iterator
+         I = CInvok->getDiagnosticOpts().Warnings.begin(),
+         E = CInvok->getDiagnosticOpts().Warnings.end(); I != E; ++I) {
+    if (!StringRef(*I).startswith("error"))
+      WarnOpts.push_back(*I);
+  }
+  WarnOpts.push_back("error=arc-unsafe-retained-assign");
+  CInvok->getDiagnosticOpts().Warnings = WarnOpts;
+
   CInvok->getLangOpts()->ObjCRuntimeHasWeak = HasARCRuntime(origCI);
 
   return CInvok.take();
index e8ce681293abfcb98b91bbf6867aa5fa202166bd..215a2c9215317f7f4e4f1d3489bcd65e9d229605 100644 (file)
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -arcmt-check -verify -triple x86_64-apple-darwin10 %s
+// RUN: %clang_cc1 -arcmt-check -verify -triple x86_64-apple-darwin10 -fblocks -Werror %s
 // DISABLE: mingw32
 
 #if __has_feature(objc_arc)
@@ -332,3 +332,13 @@ void rdar9504750(id p) {
   self->x = [NSObject new]; // expected-error {{assigning retained object}}
 }
 @end
+
+@interface Test10 : NSObject
+@property (retain) id prop;
+-(void)foo;
+@end
+
+void test(Test10 *x) {
+  x.prop = ^{ [x foo]; }; // expected-warning {{likely to lead to a retain cycle}} \
+                          // expected-note {{retained by the captured object}}
+}