From: Argyrios Kyrtzidis Date: Wed, 20 Jun 2012 01:10:40 +0000 (+0000) Subject: [arcmt] When migrating to ARC disable -Werror so as to only block migration X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ffe76ddfe23002434a30e3e02475c870ed2d6e40;p=clang [arcmt] When migrating to ARC disable -Werror so as to only block migration 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 --- diff --git a/lib/ARCMigrate/ARCMT.cpp b/lib/ARCMigrate/ARCMT.cpp index 83b06db50a..fcbcb2194a 100644 --- a/lib/ARCMigrate/ARCMT.cpp +++ b/lib/ARCMigrate/ARCMT.cpp @@ -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 WarnOpts; + for (std::vector::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(); diff --git a/test/ARCMT/checking.m b/test/ARCMT/checking.m index e8ce681293..215a2c9215 100644 --- a/test/ARCMT/checking.m +++ b/test/ARCMT/checking.m @@ -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}} +}