<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Thanks Justin.<div class=""><br class=""></div><div class="">Addressed the review and committed in r242565.</div><div class=""><br class=""></div><div class="">Steven</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Jul 16, 2015, at 9:04 PM, Justin Bogner <<a href="mailto:mail@justinbogner.com" class="">mail@justinbogner.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Steven Wu <</span><a href="mailto:stevenwu@apple.com" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">stevenwu@apple.com</a><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">> writes:</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">Hi all<br class=""><br class="">Currently, -save-temp option doesn’t work well with ObjCARC, sanitizer<br class="">and profiling instrumentation. It will drop all ObjCARC optimizations,<br class="">runs sanitizer pass very early in the pipeline and profiling<br class="">instrumentation will happen twice (which is a no-op second time). They<br class="">are because of a combination of two issues:<br class="">1. Language options are not parsed and get dropped when the input is<br class="">LLVM IR. Thus no ObjcARC pass and Sanitizer pass are run from bitcode<br class="">input.<br class="">2. We use -disable-llvm-optzns to get pristine LLVM IR generated from<br class="">front-end but the flag is not as strong as expected. It will run the<br class="">instrumentation passes like sanitizer and profiling.<br class=""><br class="">In this patch, I added a new flag -disable-llvm-passes to disable<br class="">every pass from optimization pipeline including instrumentations and<br class="">use it in -save-temp. It should be useful for debugging clang CodeGen<br class="">as well. I also change the clang front-end to parse ObjcARC and<br class="">sanitizer flag in all conditions. I didn’t touch -disable-llvm-optzns<br class="">because I am not sure if the flag is supposed to disable<br class="">instrumentation passes and if someone is relying on something like:<br class="">clang -sanitizer=address -disable-llvm-optzns<br class="">Tightening up -disable-llvm-optzns might break them.<br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">This seems pretty reasonable. LGTM with a couple of minor comments.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">Thanks<br class=""><br class="">Steven<br class=""><br class="">From 57369fb85529c943c394cfe3bf5bc35dcdbd2c59 Mon Sep 17 00:00:00 2001<br class="">From: Steven Wu <<a href="mailto:stevenwu@apple.com" class="">stevenwu@apple.com</a>><br class="">Date: Mon, 13 Jul 2015 11:12:28 -0700<br class="">Subject: [PATCH] Fix -save-temp when using objc-arc, sanitizer and profiling<br class=""><br class="">Currently, -save-temp will cause ObjCARC optimization to be dropped,<br class="">sanitizer pass to run early in the pipeline, and profiling<br class="">instrumentation to run twice.<br class="">Fix the issue by properly disable all passes in the optimization<br class="">pipeline when generating bitcode output and parse some of the Language<br class="">Options even when the input is bitcode so the passes can be setup<br class="">correctly.<br class="">---<br class="">include/clang/Driver/CC1Options.td | 3 +++<br class="">include/clang/Frontend/CodeGenOptions.def | 3 +++<br class="">lib/CodeGen/BackendUtil.cpp | 3 +++<br class="">lib/Driver/Tools.cpp | 11 ++++------<br class="">lib/Frontend/CompilerInvocation.cpp | 6 ++++++<br class="">test/CodeGen/sanitize-address-field-padding.cpp | 1 +<br class="">test/CodeGenObjC/arc.ll | 27 +++++++++++++++++++++++++<br class="">test/Driver/save-temps.c | 8 ++++----<br class="">8 files changed, 51 insertions(+), 11 deletions(-)<br class="">create mode 100644 test/CodeGenObjC/arc.ll<br class=""><br class="">diff --git a/include/clang/Driver/CC1Options.td b/include/clang/Driver/CC1Options.td<br class="">index 60cc6ec..f7bb6f3 100644<br class="">--- a/include/clang/Driver/CC1Options.td<br class="">+++ b/include/clang/Driver/CC1Options.td<br class="">@@ -153,6 +153,9 @@ def disable_llvm_optzns : Flag<["-"], "disable-llvm-optzns">,<br class=""> HelpText<"Don't run LLVM optimization passes">;<br class="">def disable_llvm_verifier : Flag<["-"], "disable-llvm-verifier">,<br class=""> HelpText<"Don't run the LLVM IR verifier pass">;<br class="">+def disable_llvm_passes : Flag<["-"], "disable-llvm-passes">,<br class="">+ HelpText<"Don't run any LLVM passes including instrumentation "<br class="">+ "in order to get the IR generated by frontend as it is">;<br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">This wording's kind of confusing. I'd say something like "Emit pristine</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">IR from the frontend by not running any LLVM passes at all". Similarly</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">for the CODEGENOPT below.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">def disable_red_zone : Flag<["-"], "disable-red-zone">,<br class=""> HelpText<"Do not emit code that uses the red zone.">;<br class="">def dwarf_column_info : Flag<["-"], "dwarf-column-info">,<br class="">diff --git a/include/clang/Frontend/CodeGenOptions.def b/include/clang/Frontend/CodeGenOptions.def<br class="">index 803d023..74378b4 100644<br class="">--- a/include/clang/Frontend/CodeGenOptions.def<br class="">+++ b/include/clang/Frontend/CodeGenOptions.def<br class="">@@ -48,6 +48,9 @@ CODEGENOPT(DisableLLVMOpts , 1, 0) ///< Don't run any optimizations, for use i<br class=""> ///< getting .bc files that correspond to the<br class=""> ///< internal state before optimizations are<br class=""> ///< done.<br class="">+CODEGENOPT(DisableLLVMPasses , 1, 0) ///< Don't run any optimizations<br class="">+ ///< inclduing instrumetation to get the<br class="">+ ///< IR generated by frontend as it it.<br class="">CODEGENOPT(DisableRedZone , 1, 0) ///< Set when -mno-red-zone is enabled.<br class="">CODEGENOPT(DisableTailCalls , 1, 0) ///< Do not emit tail calls.<br class="">CODEGENOPT(EmitDeclMetadata , 1, 0) ///< Emit special metadata indicating what<br class="">diff --git a/lib/CodeGen/BackendUtil.cpp b/lib/CodeGen/BackendUtil.cpp<br class="">index 5ff760c..0c870ee 100644<br class="">--- a/lib/CodeGen/BackendUtil.cpp<br class="">+++ b/lib/CodeGen/BackendUtil.cpp<br class="">@@ -272,6 +272,9 @@ static void addSymbolRewriterPass(const CodeGenOptions &Opts,<br class="">}<br class=""><br class="">void EmitAssemblyHelper::CreatePasses() {<br class="">+ if (CodeGenOpts.DisableLLVMPasses)<br class="">+ return;<br class="">+<br class=""> unsigned OptLevel = CodeGenOpts.OptimizationLevel;<br class=""> CodeGenOptions::InliningMethod Inlining = CodeGenOpts.getInlining();<br class=""><br class="">diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp<br class="">index 0757355..698a842 100644<br class="">--- a/lib/Driver/Tools.cpp<br class="">+++ b/lib/Driver/Tools.cpp<br class="">@@ -4785,7 +4785,6 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,<br class=""> // Forward -Xclang arguments to -cc1, and -mllvm arguments to the LLVM option<br class=""> // parser.<br class=""> Args.AddAllArgValues(CmdArgs, options::OPT_Xclang);<br class="">- bool OptDisabled = false;<br class=""> for (const Arg *A : Args.filtered(options::OPT_mllvm)) {<br class=""> A->claim();<br class=""><br class="">@@ -4793,17 +4792,15 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,<br class=""> // it and developers have been trained to spell it with -mllvm.<br class=""> if (StringRef(A->getValue(0)) == "-disable-llvm-optzns") {<br class=""> CmdArgs.push_back("-disable-llvm-optzns");<br class="">- OptDisabled = true;<br class=""> } else<br class=""> A->render(Args, CmdArgs);<br class=""> }<br class=""><br class=""> // With -save-temps, we want to save the unoptimized bitcode output from the<br class="">- // CompileJobAction, so disable optimizations if they are not already<br class="">- // disabled.<br class="">- if (C.getDriver().isSaveTempsEnabled() && !OptDisabled &&<br class="">- isa<CompileJobAction>(JA))<br class="">- CmdArgs.push_back("-disable-llvm-optzns");<br class="">+ // CompileJobAction, use -disable-llvm-passes to get pristine IR generated<br class="">+ // by the frontend.<br class="">+ if (C.getDriver().isSaveTempsEnabled() && isa<CompileJobAction>(JA))<br class="">+ CmdArgs.push_back("-disable-llvm-passes");<br class=""><br class=""> if (Output.getType() == types::TY_Dependencies) {<br class=""> // Handled with other dependency code.<br class="">diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp<br class="">index baee119..fed2717 100644<br class="">--- a/lib/Frontend/CompilerInvocation.cpp<br class="">+++ b/lib/Frontend/CompilerInvocation.cpp<br class="">@@ -426,6 +426,7 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,<br class=""> Opts.EmitLLVMUseLists = A->getOption().getID() == OPT_emit_llvm_uselists;<br class=""><br class=""> Opts.DisableLLVMOpts = Args.hasArg(OPT_disable_llvm_optzns);<br class="">+ Opts.DisableLLVMPasses = Args.hasArg(OPT_disable_llvm_passes);<br class=""> Opts.DisableRedZone = Args.hasArg(OPT_disable_red_zone);<br class=""> Opts.ForbidGuardVariables = Args.hasArg(OPT_fforbid_guard_variables);<br class=""> Opts.UseRegisterSizedBitfieldAccess = Args.hasArg(<br class="">@@ -1887,6 +1888,11 @@ bool CompilerInvocation::CreateFromArgs(CompilerInvocation &Res,<br class=""> ParseLangArgs(*Res.getLangOpts(), Args, DashX, Diags);<br class=""> if (Res.getFrontendOpts().ProgramAction == frontend::RewriteObjC)<br class=""> Res.getLangOpts()->ObjCExceptions = 1;<br class="">+ } else {<br class="">+ if (Args.hasArg(OPT_fobjc_arc))<br class="">+ Res.getLangOpts()->ObjCAutoRefCount = 1;<br class="">+ parseSanitizerKinds("-fsanitize=", Args.getAllArgValues(OPT_fsanitize_EQ),<br class="">+ Diags, Res.getLangOpts()->Sanitize);<br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">This deserves a comment. I'd probably also reverse the order of the</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">if/else conditions to avoid the double negative in the else case.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""> }<br class=""> // FIXME: ParsePreprocessorArgs uses the FileManager to read the contents of<br class=""> // PCH file and find the original header name. Remove the need to do that in<br class="">diff --git a/test/CodeGen/sanitize-address-field-padding.cpp b/test/CodeGen/sanitize-address-field-padding.cpp<br class="">index d4eea1b..7bd368f 100644<br class="">--- a/test/CodeGen/sanitize-address-field-padding.cpp<br class="">+++ b/test/CodeGen/sanitize-address-field-padding.cpp<br class="">@@ -5,6 +5,7 @@<br class="">// RUN: %clang_cc1 -triple x86_64-unknown-unknown -fsanitize=address -fsanitize-address-field-padding=1 -fsanitize-blacklist=%t.type.blacklist -Rsanitize-address -emit-llvm -o - %s -O1 -mconstructor-aliases 2>&1 | FileCheck %s --check-prefix=WITH_CTOR_ALIASES<br class="">// RUN: %clang_cc1 -triple x86_64-unknown-unknown -fsanitize=address -fsanitize-address-field-padding=1 -fsanitize-blacklist=%t.file.blacklist -Rsanitize-address -emit-llvm -o - %s 2>&1 | FileCheck %s --check-prefix=FILE_BLACKLIST<br class="">// RUN: %clang_cc1 -fsanitize=address -emit-llvm -o - %s 2>&1 | FileCheck %s --check-prefix=NO_PADDING<br class="">+// RUN: %clang -save-temps -fsanitize=address -emit-llvm -S -o - %s 2>&1 | FileCheck %s --check-prefix=NO_PADDING<br class="">//<br class=""><br class="">// The reasons to ignore a particular class are not set in stone and will change.<br class="">diff --git a/test/CodeGenObjC/arc.ll b/test/CodeGenObjC/arc.ll<br class="">new file mode 100644<br class="">index 0000000..caafcff<br class="">--- /dev/null<br class="">+++ b/test/CodeGenObjC/arc.ll<br class="">@@ -0,0 +1,27 @@<br class="">+; RUN: %clang_cc1 -Os -emit-llvm -fobjc-arc -o - %s | FileCheck %s<br class="">+<br class="">+target triple = "x86_64-apple-darwin10"<br class="">+<br class="">+declare i8* @objc_retain(i8*)<br class="">+declare void @objc_release(i8*)<br class="">+<br class="">+; CHECK-LABEL: define void @test(<br class="">+; CHECK-NOT: @objc_<br class="">+; CHECK: }<br class="">+define void @test(i8* %x, i1* %p) nounwind {<br class="">+entry:<br class="">+ br label %loop<br class="">+<br class="">+loop:<br class="">+ call i8* @objc_retain(i8* %x)<br class="">+ %q = load i1, i1* %p<br class="">+ br i1 %q, label %loop.more, label %exit<br class="">+<br class="">+loop.more:<br class="">+ call void @objc_release(i8* %x)<br class="">+ br label %loop<br class="">+<br class="">+exit:<br class="">+ call void @objc_release(i8* %x)<br class="">+ ret void<br class="">+}<br class="">diff --git a/test/Driver/save-temps.c b/test/Driver/save-temps.c<br class="">index 277a901..c974d15 100644<br class="">--- a/test/Driver/save-temps.c<br class="">+++ b/test/Driver/save-temps.c<br class="">@@ -2,7 +2,7 @@<br class="">// RUN: | FileCheck %s<br class="">// CHECK: "-o" "save-temps.i"<br class="">// CHECK: "-emit-llvm-uselists"<br class="">-// CHECK: "-disable-llvm-optzns"<br class="">+// CHECK: "-disable-llvm-passes"<br class="">// CHECK: "-o" "save-temps.bc"<br class="">// CHECK: "-o" "save-temps.s"<br class="">// CHECK: "-o" "save-temps.o"<br class="">@@ -14,7 +14,7 @@<br class="">// RUN: | FileCheck %s -check-prefix=CWD<br class="">// CWD: "-o" "save-temps.i"<br class="">// CWD: "-emit-llvm-uselists"<br class="">-// CWD: "-disable-llvm-optzns"<br class="">+// CWD: "-disable-llvm-passes"<br class="">// CWD: "-o" "save-temps.bc"<br class="">// CWD: "-o" "save-temps.s"<br class="">// CWD: "-o" "save-temps.o"<br class="">@@ -63,7 +63,7 @@<br class="">// RUN: %clang -target x86_64-apple-darwin -save-temps=obj -o obj/dir/a.out -arch x86_64 %s -### 2>&1 \<br class="">// RUN: | FileCheck %s -check-prefix=CHECK-OBJ<br class="">// CHECK-OBJ: "-o" "obj/dir{{/|\\\\}}save-temps.i"<br class="">-// CHECK-OBJ: "-disable-llvm-optzns"<br class="">+// CHECK-OBJ: "-disable-llvm-passes"<br class="">// CHECK-OBJ: "-o" "obj/dir{{/|\\\\}}save-temps.bc"<br class="">// CHECK-OBJ: "-o" "obj/dir{{/|\\\\}}save-temps.s"<br class="">// CHECK-OBJ: "-o" "obj/dir{{/|\\\\}}save-temps.o"<br class="">@@ -72,7 +72,7 @@<br class="">// RUN: %clang -target x86_64-apple-darwin -save-temps=obj -arch x86_64 %s -### 2>&1 \<br class="">// RUN: | FileCheck %s -check-prefix=CHECK-OBJ-NOO<br class="">// CHECK-OBJ-NOO: "-o" "save-temps.i"<br class="">-// CHECK-OBJ-NOO: "-disable-llvm-optzns"<br class="">+// CHECK-OBJ-NOO: "-disable-llvm-passes"<br class="">// CHECK-OBJ-NOO: "-o" "save-temps.bc"<br class="">// CHECK-OBJ-NOO: "-o" "save-temps.s"<br class="">// CHECK-OBJ-NOO: "-o" "save-temps.o"</blockquote></div></blockquote></div><br class=""></div></body></html>