Author: akirtzidis
Date: Tue Feb 5 10:37:00 2013
New Revision: 174386
URL: http://llvm.org/viewvc/llvm-project?rev=174386&view=rev
Log:
[arcmt] Make sure the objc migrators work fine when used with a PCH.
rdar://13140508
Added:
cfe/trunk/test/ARCMT/check-with-pch.m
cfe/trunk/test/ARCMT/migrate-with-pch.m
cfe/trunk/test/ARCMT/objcmt-with-pch.m
cfe/trunk/test/ARCMT/objcmt-with-pch.m.result
Modified:
cfe/trunk/lib/ARCMigrate/ARCMT.cpp
Modified: cfe/trunk/lib/ARCMigrate/ARCMT.cpp
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ARCMigrate/ARCMT.cpp?rev=174386&r1=174385&r2=174386&view=diff
==============================================================================
--- cfe/trunk/lib/ARCMigrate/ARCMT.cpp (original)
+++ cfe/trunk/lib/ARCMigrate/ARCMT.cpp Tue Feb 5 10:37:00 2013
@@ -18,6 +18,7 @@
#include "clang/Lex/Preprocessor.h"
#include "clang/Rewrite/Core/Rewriter.h"
#include "clang/Sema/SemaDiagnostic.h"
+#include "clang/Serialization/ASTReader.h"
#include "llvm/ADT/Triple.h"
#include "llvm/Support/MemoryBuffer.h"
using namespace clang;
@@ -174,8 +175,24 @@ static CompilerInvocation *
createInvocationForMigration(CompilerInvocation &origCI) {
OwningPtr<CompilerInvocation> CInvok;
CInvok.reset(new CompilerInvocation(origCI));
- CInvok->getPreprocessorOpts().ImplicitPCHInclude = std::string();
- CInvok->getPreprocessorOpts().ImplicitPTHInclude = std::string();
+ PreprocessorOptions &PPOpts = CInvok->getPreprocessorOpts();
+ if (!PPOpts.ImplicitPCHInclude.empty()) {
+ // We can't use a PCH because it was likely built in non-ARC mode and we
+ // want to parse in ARC. Include the original header.
+ FileManager FileMgr(origCI.getFileSystemOpts());
+ IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs());
+ IntrusiveRefCntPtr<DiagnosticsEngine> Diags(
+ new DiagnosticsEngine(DiagID, &origCI.getDiagnosticOpts(),
+ new IgnoringDiagConsumer()));
+ std::string OriginalFile =
+ ASTReader::getOriginalSourceFile(PPOpts.ImplicitPCHInclude,
+ FileMgr, *Diags);
+ if (!OriginalFile.empty())
+ PPOpts.Includes.insert(PPOpts.Includes.begin(), OriginalFile);
+ PPOpts.ImplicitPCHInclude.clear();
+ }
+ // FIXME: Get the original header of a PTH as well.
+ CInvok->getPreprocessorOpts().ImplicitPTHInclude.clear();
std::string define = getARCMTMacroName();
define += '=';
CInvok->getPreprocessorOpts().addMacroDef(define);
Added: cfe/trunk/test/ARCMT/check-with-pch.m
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/check-with-pch.m?rev=174386&view=auto
==============================================================================
--- cfe/trunk/test/ARCMT/check-with-pch.m (added)
+++ cfe/trunk/test/ARCMT/check-with-pch.m Tue Feb 5 10:37:00 2013
@@ -0,0 +1,16 @@
+// RUN: %clang_cc1 -x objective-c -triple x86_64-apple-darwin10 %S/Common.h
-emit-pch -o %t.pch
+// RUN: %clang_cc1 -include-pch %t.pch -arcmt-check -verify -triple
x86_64-apple-darwin10 -fblocks -Werror %s
+// DISABLE: mingw32
+
+// rdar://9601437
+@interface I9601437 {
+ __unsafe_unretained id x;
+}
+-(void)Meth;
+@end
+
+@implementation I9601437
+-(void)Meth {
+ self->x = [NSObject new]; // expected-error {{assigning retained object}}
+}
+@end
Added: cfe/trunk/test/ARCMT/migrate-with-pch.m
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/migrate-with-pch.m?rev=174386&view=auto
==============================================================================
--- cfe/trunk/test/ARCMT/migrate-with-pch.m (added)
+++ cfe/trunk/test/ARCMT/migrate-with-pch.m Tue Feb 5 10:37:00 2013
@@ -0,0 +1,7 @@
+// RUN: rm -rf %t
+// RUN: %clang_cc1 -x objective-c %S/Common.h -emit-pch -o %t.pch
+// RUN: %clang_cc1 -arcmt-migrate -mt-migrate-directory %t
%S/Inputs/test1.m.in -x objective-c -include-pch %t.pch
+// RUN: %clang_cc1 -arcmt-migrate -mt-migrate-directory %t
%S/Inputs/test2.m.in -x objective-c -include-pch %t.pch
+// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test
-verify-transformed-files %S/Inputs/test1.m.in.result
%S/Inputs/test2.m.in.result %S/Inputs/test.h.result
+// RUN: rm -rf %t
+// DISABLE: mingw32
Added: cfe/trunk/test/ARCMT/objcmt-with-pch.m
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/objcmt-with-pch.m?rev=174386&view=auto
==============================================================================
--- cfe/trunk/test/ARCMT/objcmt-with-pch.m (added)
+++ cfe/trunk/test/ARCMT/objcmt-with-pch.m Tue Feb 5 10:37:00 2013
@@ -0,0 +1,16 @@
+// RUN: rm -rf %t
+// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -x objective-c %S/Common.h
-emit-pch -o %t.pch
+// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -objcmt-migrate-literals
-objcmt-migrate-subscripting -mt-migrate-directory %t %s -x objective-c
-include-pch %t.pch
+// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test
-verify-transformed-files %s.result
+// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c
%s.result -include-pch %t.pch
+
+@interface NSNumber : NSObject
+@end
+
+@interface NSNumber (NSNumberCreation)
++ (NSNumber *)numberWithInt:(int)value;
+@end
+
+void foo() {
+ NSNumber *n = [NSNumber numberWithInt:1];
+}
Added: cfe/trunk/test/ARCMT/objcmt-with-pch.m.result
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/objcmt-with-pch.m.result?rev=174386&view=auto
==============================================================================
--- cfe/trunk/test/ARCMT/objcmt-with-pch.m.result (added)
+++ cfe/trunk/test/ARCMT/objcmt-with-pch.m.result Tue Feb 5 10:37:00 2013
@@ -0,0 +1,16 @@
+// RUN: rm -rf %t
+// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -x objective-c %S/Common.h
-emit-pch -o %t.pch
+// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -objcmt-migrate-literals
-objcmt-migrate-subscripting -mt-migrate-directory %t %s -x objective-c
-include-pch %t.pch
+// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test
-verify-transformed-files %s.result
+// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c
%s.result -include-pch %t.pch
+
+@interface NSNumber : NSObject
+@end
+
+@interface NSNumber (NSNumberCreation)
++ (NSNumber *)numberWithInt:(int)value;
+@end
+
+void foo() {
+ NSNumber *n = @1;
+}
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits