<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>