From: Fariborz Jahanian Date: Mon, 2 Apr 2012 15:59:19 +0000 (+0000) Subject: Use -rewrite-legacy-objc as clang argument for translating X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=582b395ea4d5dfe353e2132a470d39efe2f84a54;p=clang Use -rewrite-legacy-objc as clang argument for translating objective-c's fragile abi, Use -rewrite-objc for translating objective-c's modern abi. // rdar://11143173 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153877 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td index 97872f7af5..24e481c8db 100644 --- a/include/clang/Driver/Options.td +++ b/include/clang/Driver/Options.td @@ -737,6 +737,8 @@ def read__only__relocs : Separate<"-read_only_relocs">; def remap : Flag<"-remap">; def rewrite_objc : Flag<"-rewrite-objc">, Flags<[DriverOption]>, HelpText<"Rewrite Objective-C source to C++">; +def rewrite_legacy_objc : Flag<"-rewrite-legacy-objc">, Flags<[DriverOption]>, + HelpText<"Rewrite Legacy Objective-C source to C++">; def rdynamic : Flag<"-rdynamic">; def rpath : Separate<"-rpath">, Flags<[LinkerInput]>; def rtlib_EQ : Joined<"-rtlib=">; diff --git a/include/clang/Driver/Types.def b/include/clang/Driver/Types.def index bba888ca4a..b107dfb247 100644 --- a/include/clang/Driver/Types.def +++ b/include/clang/Driver/Types.def @@ -82,6 +82,7 @@ TYPE("lto-bc", LTO_BC, INVALID, "o", "") TYPE("ast", AST, INVALID, "ast", "u") TYPE("plist", Plist, INVALID, "plist", "") TYPE("rewritten-objc", RewrittenObjC,INVALID, "cpp", "") +TYPE("rewritten-legacy-objc", RewrittenLegacyObjC,INVALID, "cpp", "") TYPE("remap", Remap, INVALID, "remap", "") TYPE("precompiled-header", PCH, INVALID, "gch", "A") TYPE("object", Object, INVALID, "o", "") diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index 7fd365fbe9..35e63989a3 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -141,6 +141,7 @@ const { // -{fsyntax-only,-analyze,emit-ast,S} only run up to the compiler. } else if ((PhaseArg = DAL.getLastArg(options::OPT_fsyntax_only)) || (PhaseArg = DAL.getLastArg(options::OPT_rewrite_objc)) || + (PhaseArg = DAL.getLastArg(options::OPT_rewrite_legacy_objc)) || (PhaseArg = DAL.getLastArg(options::OPT__migrate)) || (PhaseArg = DAL.getLastArg(options::OPT__analyze, options::OPT__analyze_auto)) || @@ -1143,6 +1144,8 @@ Action *Driver::ConstructPhaseAction(const ArgList &Args, phases::ID Phase, return new CompileJobAction(Input, types::TY_Nothing); } else if (Args.hasArg(options::OPT_rewrite_objc)) { return new CompileJobAction(Input, types::TY_RewrittenObjC); + } else if (Args.hasArg(options::OPT_rewrite_legacy_objc)) { + return new CompileJobAction(Input, types::TY_RewrittenLegacyObjC); } else if (Args.hasArg(options::OPT__analyze, options::OPT__analyze_auto)) { return new AnalyzeJobAction(Input, types::TY_Plist); } else if (Args.hasArg(options::OPT__migrate)) { diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index aaa73c1436..94ff5b1f1b 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -1349,6 +1349,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-emit-pch"); } else if (JA.getType() == types::TY_RewrittenObjC) { CmdArgs.push_back("-rewrite-objc"); + } else if (JA.getType() == types::TY_RewrittenLegacyObjC) { + CmdArgs.push_back("-rewrite-objc"); IsRewriter = true; } else { assert(JA.getType() == types::TY_PP_Asm && diff --git a/lib/Driver/Types.cpp b/lib/Driver/Types.cpp index d61ab68c90..50742fe25e 100644 --- a/lib/Driver/Types.cpp +++ b/lib/Driver/Types.cpp @@ -102,6 +102,7 @@ bool types::isOnlyAcceptedByClang(ID Id) { case TY_LLVM_IR: case TY_LLVM_BC: case TY_RewrittenObjC: + case TY_RewrittenLegacyObjC: return true; } } diff --git a/test/Driver/rewrite-legacy-objc.m b/test/Driver/rewrite-legacy-objc.m new file mode 100644 index 0000000000..af59ff6727 --- /dev/null +++ b/test/Driver/rewrite-legacy-objc.m @@ -0,0 +1,15 @@ +// RUN: %clang -no-canonical-prefixes -target x86_64-apple-macosx10.7.0 -rewrite-legacy-objc %s -o - -### 2>&1 | \ +// RUN: FileCheck -check-prefix=TEST0 %s +// TEST0: clang{{.*}}" "-cc1" +// TEST0: "-rewrite-objc" +// FIXME: CHECK-NOT is broken somehow, it doesn't work here. Check adjacency instead. +// TEST0: "-fmessage-length" "0" "-stack-protector" "1" "-mstackrealign" "-fblocks" "-fobjc-runtime-has-arc" "-fobjc-runtime-has-weak" "-fobjc-fragile-abi" "-fobjc-default-synthesize-properties" "-fno-objc-infer-related-result-type" "-fobjc-exceptions" "-fexceptions" "-fdiagnostics-show-option" +// TEST0: rewrite-legacy-objc.m" + +// RUN: not %clang -ccc-no-clang -target unknown -rewrite-legacy-objc %s -o - -### 2>&1 | \ +// RUN: FileCheck -check-prefix=TEST1 %s +// TEST1: invalid output type 'rewritten-legacy-objc' for use with gcc + +// RUN: not %clang -ccc-no-clang -target i386-apple-darwin10 -rewrite-legacy-objc %s -o - -### 2>&1 | \ +// RUN: FileCheck -check-prefix=TEST2 %s +// TEST2: invalid output type 'rewritten-legacy-objc' for use with gcc diff --git a/test/Driver/rewrite-objc.m b/test/Driver/rewrite-objc.m index 30883f3bf5..c5712609d7 100644 --- a/test/Driver/rewrite-objc.m +++ b/test/Driver/rewrite-objc.m @@ -3,7 +3,7 @@ // TEST0: clang{{.*}}" "-cc1" // TEST0: "-rewrite-objc" // FIXME: CHECK-NOT is broken somehow, it doesn't work here. Check adjacency instead. -// TEST0: "-fmessage-length" "0" "-stack-protector" "1" "-mstackrealign" "-fblocks" "-fobjc-runtime-has-arc" "-fobjc-runtime-has-weak" "-fobjc-fragile-abi" "-fobjc-default-synthesize-properties" "-fno-objc-infer-related-result-type" "-fobjc-exceptions" "-fexceptions" "-fdiagnostics-show-option" +// TEST0: "-fmessage-length" "0" "-stack-protector" "1" "-mstackrealign" "-fblocks" "-fobjc-runtime-has-arc" "-fobjc-runtime-has-weak" "-fobjc-dispatch-method=mixed" "-fobjc-default-synthesize-properties" "-fobjc-exceptions" "-fexceptions" "-fdiagnostics-show-option" // TEST0: rewrite-objc.m" // RUN: not %clang -ccc-no-clang -target unknown -rewrite-objc %s -o - -### 2>&1 | \