Re: [PATCH] D15920: [CMake] Add option to switch default C++ stdlib

2016-02-11 Thread Jonas Hahnfeld via cfe-commits
Hahnfeld added a comment.

In http://reviews.llvm.org/D15920#350401, @beanz wrote:

> Can you commit the test changes in a separate commit before committing the 
> other changes? That way if something goes wrong the diff for the meat of the 
> patch is a small diff.


Committed seperately in http://reviews.llvm.org/rL260661, thanks.


Repository:
  rL LLVM

http://reviews.llvm.org/D15920



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D15920: [CMake] Add option to switch default C++ stdlib

2016-02-11 Thread Jonas Hahnfeld via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL260662: [CMake] Add option to switch default C++ stdlib 
(authored by Hahnfeld).

Changed prior to commit:
  http://reviews.llvm.org/D15920?vs=47441&id=47770#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D15920

Files:
  cfe/trunk/CMakeLists.txt
  cfe/trunk/include/clang/Config/config.h.cmake
  cfe/trunk/include/clang/Config/config.h.in
  cfe/trunk/include/clang/Driver/ToolChain.h
  cfe/trunk/lib/Driver/ToolChain.cpp
  cfe/trunk/lib/Driver/ToolChains.cpp
  cfe/trunk/lib/Driver/ToolChains.h

Index: cfe/trunk/include/clang/Config/config.h.in
===
--- cfe/trunk/include/clang/Config/config.h.in
+++ cfe/trunk/include/clang/Config/config.h.in
@@ -8,6 +8,9 @@
 /* Bug report URL. */
 #undef BUG_REPORT_URL
 
+/* Default C++ stdlib to use. */
+#undef CLANG_DEFAULT_CXX_STDLIB
+
 /* Default OpenMP runtime used by -fopenmp. */
 #undef CLANG_DEFAULT_OPENMP_RUNTIME
 
Index: cfe/trunk/include/clang/Config/config.h.cmake
===
--- cfe/trunk/include/clang/Config/config.h.cmake
+++ cfe/trunk/include/clang/Config/config.h.cmake
@@ -8,6 +8,9 @@
 /* Bug report URL. */
 #define BUG_REPORT_URL "${BUG_REPORT_URL}"
 
+/* Default C++ stdlib to use. */
+#define CLANG_DEFAULT_CXX_STDLIB "${CLANG_DEFAULT_CXX_STDLIB}"
+
 /* Default OpenMP runtime used by -fopenmp. */
 #define CLANG_DEFAULT_OPENMP_RUNTIME "${CLANG_DEFAULT_OPENMP_RUNTIME}"
 
Index: cfe/trunk/include/clang/Driver/ToolChain.h
===
--- cfe/trunk/include/clang/Driver/ToolChain.h
+++ cfe/trunk/include/clang/Driver/ToolChain.h
@@ -256,6 +256,10 @@
 return ToolChain::RLT_Libgcc;
   }
 
+  virtual CXXStdlibType GetDefaultCXXStdlibType() const {
+return ToolChain::CST_Libstdcxx;
+  }
+
   virtual std::string getCompilerRT(const llvm::opt::ArgList &Args,
 StringRef Component,
 bool Shared = false) const;
Index: cfe/trunk/CMakeLists.txt
===
--- cfe/trunk/CMakeLists.txt
+++ cfe/trunk/CMakeLists.txt
@@ -197,6 +197,15 @@
 set(DEFAULT_SYSROOT "" CACHE PATH
   "Default  to all compiler invocations for --sysroot=." )
 
+set(CLANG_DEFAULT_CXX_STDLIB "" CACHE STRING
+  "Default C++ stdlib to use (empty for architecture default, \"libstdc++\" or \"libc++\"")
+if (NOT(CLANG_DEFAULT_CXX_STDLIB STREQUAL "" OR
+CLANG_DEFAULT_CXX_STDLIB STREQUAL "libstdc++" OR
+CLANG_DEFAULT_CXX_STDLIB STREQUAL "libc++"))
+  message(WARNING "Resetting default C++ stdlib to use architecture default")
+  set(CLANG_DEFAULT_CXX_STDLIB "")
+endif()
+
 set(CLANG_DEFAULT_OPENMP_RUNTIME "libomp" CACHE STRING
   "Default OpenMP runtime used by -fopenmp.")
 
Index: cfe/trunk/lib/Driver/ToolChains.cpp
===
--- cfe/trunk/lib/Driver/ToolChains.cpp
+++ cfe/trunk/lib/Driver/ToolChains.cpp
@@ -65,6 +65,16 @@
 
 bool MachO::HasNativeLLVMSupport() const { return true; }
 
+ToolChain::CXXStdlibType Darwin::GetDefaultCXXStdlibType() const {
+  // Default to use libc++ on OS X 10.9+ and iOS 7+.
+  if ((isTargetMacOS() && !isMacosxVersionLT(10, 9)) ||
+   (isTargetIOSBased() && !isIPhoneOSVersionLT(7, 0)) ||
+   isTargetWatchOSBased())
+return ToolChain::CST_Libcxx;
+
+  return ToolChain::CST_Libstdcxx;
+}
+
 /// Darwin provides an ARC runtime starting in MacOS X 10.7 and iOS 5.0.
 ObjCRuntime Darwin::getDefaultObjCRuntime(bool isNonFragile) const {
   if (isTargetWatchOSBased())
@@ -1020,7 +1030,6 @@
   const char *BoundArch) const {
   // First get the generic Apple args, before moving onto Darwin-specific ones.
   DerivedArgList *DAL = MachO::TranslateArgs(Args, BoundArch);
-  const OptTable &Opts = getDriver().getOpts();
 
   // If no architecture is bound, none of the translations here are relevant.
   if (!BoundArch)
@@ -1051,14 +1060,6 @@
 }
   }
 
-  // Default to use libc++ on OS X 10.9+ and iOS 7+.
-  if (((isTargetMacOS() && !isMacosxVersionLT(10, 9)) ||
-   (isTargetIOSBased() && !isIPhoneOSVersionLT(7, 0)) ||
-   isTargetWatchOSBased()) &&
-  !Args.getLastArg(options::OPT_stdlib_EQ))
-DAL->AddJoinedArg(nullptr, Opts.getOption(options::OPT_stdlib_EQ),
-  "libc++");
-
   // Validate the C++ standard library choice.
   CXXStdlibType Type = GetCXXStdlibType(*DAL);
   if (Type == ToolChain::CST_Libcxx) {
@@ -3027,16 +3028,7 @@
 
 Tool *Bitrig::buildLinker() const { return new tools::bitrig::Linker(*this); }
 
-ToolChain::CXXStdlibType Bitrig::GetCXXStdlibType(const ArgList &Args) const {
-  if (Arg *A = Args.getLastArg(options::OPT_stdlib_EQ)) {
-StringRef Value = A->getValue();
-if (Value == "libstdc++")
-  return ToolChain::CS

Re: [PATCH] D15920: [CMake] Add option to switch default C++ stdlib

2016-02-11 Thread Chris Bieneman via cfe-commits
beanz added a comment.

Everything about this looks reasonable to me.

Can you commit the test changes in a separate commit before committing the 
other changes? That way if something goes wrong the diff for the meat of the 
patch is a small diff.


http://reviews.llvm.org/D15920



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D15920: [CMake] Add option to switch default C++ stdlib

2016-02-10 Thread Jonas Hahnfeld via cfe-commits
Hahnfeld marked an inline comment as done.
Hahnfeld added a comment.

In http://reviews.llvm.org/D15920#347352, @beanz wrote:

> Is it correct to assume that all the test case changes are needed just to 
> make the tests pass if you set CLANG_DEFAULT_CXX_STDLIB=libc++?
>
> [...]


Yes, most of the tests check for the correct `libstdc++` include paths which 
are not met with `libc++`.



Comment at: lib/Driver/ToolChain.cpp:549-550
@@ -536,9 +548,4 @@
+
 ToolChain::CXXStdlibType ToolChain::GetCXXStdlibType(const ArgList &Args) 
const{
-  if (Arg *A = Args.getLastArg(options::OPT_stdlib_EQ)) {
-StringRef Value = A->getValue();
-if (Value == "libc++")
-  return ToolChain::CST_Libcxx;
-if (Value == "libstdc++")
-  return ToolChain::CST_Libstdcxx;
-getDriver().Diag(diag::err_drv_invalid_stdlib_name)
-  << A->getAsString(Args);
+  ToolChain::CXXStdlibType Type;
+  bool HasValidType = false;

I have moved the behaviour from `Darwin::TranslateArgs` to 
`Darwin::GetDefaultCXXStdlibType` and added this method for `Bitrig` as well 
(which was straightforward). `MIPS` only allows `libc++` so there is nothing 
the user can choose from...

I would have also liked to implement this for `FreeBSD` and `NetBSD` but their 
default library is dependent on the system version. While this wouldn't be a 
problem and could be implemented in `GetDefaultCXXStdlibType`, this would still 
be overriden by `CLANG_DEFAULT_CXX_STDLIB` which unfortunately fails the tests 
in `test/Driver/{freebsd.c,netbsd.c}`. Is it ok to leave this for now?


http://reviews.llvm.org/D15920



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D15920: [CMake] Add option to switch default C++ stdlib

2016-02-10 Thread Jonas Hahnfeld via cfe-commits
Hahnfeld updated this revision to Diff 47441.
Hahnfeld added a comment.

Address reviewers' comments:

- check for valid `CLANG_DEFAULT_CXX_STDLIB`
- generalize for `Darwin` and `Bitrig` by introducing `GetDefaultCXXStdlibType`
- fallback to `CLANG_DEFAULT_CXX_STDLIB` if user choice is incorrect


http://reviews.llvm.org/D15920

Files:
  CMakeLists.txt
  include/clang/Config/config.h.cmake
  include/clang/Config/config.h.in
  include/clang/Driver/ToolChain.h
  lib/Driver/ToolChain.cpp
  lib/Driver/ToolChains.cpp
  lib/Driver/ToolChains.h
  test/Driver/android-standalone.cpp
  test/Driver/darwin-iphone-defaults.m
  test/Driver/darwin-objc-gc.m
  test/Driver/darwin-sanitizer-ld.c
  test/Driver/gcc-toolchain.cpp
  test/Driver/linux-header-search.cpp
  test/Driver/mips-cs.cpp
  test/Driver/mips-fsf.cpp
  test/Driver/mips-img.cpp
  test/Driver/sanitizer-ld.c
  test/Driver/windows-cross.c
  unittests/libclang/LibclangTest.cpp

Index: unittests/libclang/LibclangTest.cpp
===
--- unittests/libclang/LibclangTest.cpp
+++ unittests/libclang/LibclangTest.cpp
@@ -485,7 +485,7 @@
   WriteFile(Clang, "");
 
   const char *Argv[] = {Clang.c_str(), "-target", "arm-linux-gnueabi",
-"--gcc-toolchain="};
+"-stdlib=libstdc++", "--gcc-toolchain="};
 
   EXPECT_EQ(CXError_Success,
 clang_parseTranslationUnit2FullArgv(Index, Filename.c_str(), Argv,
Index: test/Driver/windows-cross.c
===
--- test/Driver/windows-cross.c
+++ test/Driver/windows-cross.c
@@ -1,9 +1,9 @@
-// RUN: %clang -### -target armv7-windows-itanium --sysroot %S/Inputs/Windows/ARM/8.1 -B %S/Inputs/Windows/ARM/8.1/usr/bin -o /dev/null %s 2>&1 \
+// RUN: %clang -### -target armv7-windows-itanium --sysroot %S/Inputs/Windows/ARM/8.1 -B %S/Inputs/Windows/ARM/8.1/usr/bin -stdlib=libstdc++ -o /dev/null %s 2>&1 \
 // RUN:   | FileCheck %s --check-prefix CHECK-BASIC
 
 // CHECK-BASIC: armv7-windows-itanium-ld" "--sysroot={{.*}}/Inputs/Windows/ARM/8.1" "-m" "thumb2pe" "-Bdynamic" "--entry" "mainCRTStartup" "--allow-multiple-definition" "-o" "{{[^"]*}}" "{{.*}}/Inputs/Windows/ARM/8.1/usr/lib/crtbegin.obj" "-L{{.*}}/Inputs/Windows/ARM/8.1/usr/lib" "-L{{.*}}/Inputs/Windows/ARM/8.1/usr/lib/gcc" "{{.*}}.o" "-lmsvcrt" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed"
 
-// RUN: %clang -### -target armv7-windows-itanium --sysroot %s/Inputs/Windows/ARM/8.1 -B %S/Inputs/Windows/ARM/8.1/usr/bin -rtlib=compiler-rt -o /dev/null %s 2>&1 \
+// RUN: %clang -### -target armv7-windows-itanium --sysroot %s/Inputs/Windows/ARM/8.1 -B %S/Inputs/Windows/ARM/8.1/usr/bin -rtlib=compiler-rt -stdlib=libstdc++ -o /dev/null %s 2>&1 \
 // RUN:   | FileCheck %s --check-prefix CHECK-RTLIB
 
 // CHECK-RTLIB: armv7-windows-itanium-ld" "--sysroot={{.*}}/Inputs/Windows/ARM/8.1" "-m" "thumb2pe" "-Bdynamic" "--entry" "mainCRTStartup" "--allow-multiple-definition" "-o" "{{[^"]*}}" "{{.*}}/Inputs/Windows/ARM/8.1/usr/lib/crtbegin.obj" "-L{{.*}}/Inputs/Windows/ARM/8.1/usr/lib" "-L{{.*}}/Inputs/Windows/ARM/8.1/usr/lib/gcc" "{{.*}}.o" "-lmsvcrt" "{{.*[\\/]}}clang_rt.builtins-arm.lib"
@@ -33,7 +33,7 @@
 
 // CHECK-STANDALONE: armv7-windows-itanium-ld" "--sysroot={{.*}}/Inputs/Windows/ARM/8.1" "-m" "thumb2pe" "-shared" "-Bdynamic" "--enable-auto-image-base" "--entry" "_DllMainCRTStartup" "--allow-multiple-definition" "-o" "shared.dll" "--out-implib" "shared.lib" "{{.*}}.o"
 
-// RUN: %clang -### -target armv7-windows-itanium --sysroot %S/Inputs/Windows/ARM/8.1 -B %/Inputs/Windows/ARM/8.1/usr/bin -shared -o shared.dll -x c++ %s 2>&1 \
+// RUN: %clang -### -target armv7-windows-itanium --sysroot %S/Inputs/Windows/ARM/8.1 -B %/Inputs/Windows/ARM/8.1/usr/bin -stdlib=libstdc++ -shared -o shared.dll -x c++ %s 2>&1 \
 // RUN:| FileCheck %s --check-prefix CHECK-LIBSTDCXX
 
 // CHECK-LIBSTDCXX:  "-internal-isystem" "{{.*}}/usr/include/c++" "-internal-isystem" "{{.*}}/usr/include/c++/armv7--windows-itanium" "-internal-isystem" "{{.*}}/usr/include/c++/backwards"
Index: test/Driver/sanitizer-ld.c
===
--- test/Driver/sanitizer-ld.c
+++ test/Driver/sanitizer-ld.c
@@ -76,7 +76,7 @@
 // CHECK-ASAN-FREEBSD-LDL-NOT: "-ldl"
 
 // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
-// RUN: -target i386-unknown-linux -fsanitize=address \
+// RUN: -target i386-unknown-linux -stdlib=libstdc++ -fsanitize=address \
 // RUN: -resource-dir=%S/Inputs/empty_resource_dir \
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-LINUX-CXX %s
@@ -93,8 +93,8 @@
 // CHECK-ASAN-LINUX-CXX: "-ldl"
 
 // RUN: %clang -no-canonical-prefixes %s -### -o /dev/null -fsanitize=address \
-// RUN: -target i386-unknown-linux --sysroot=%S/Inputs/basic_linux_tree \
-// RUN: -lstdc++ -static 2>&1 \
+// RUN: -target i386-unknown-linux -stdlib=

Re: [PATCH] D15920: [CMake] Add option to switch default C++ stdlib

2016-02-09 Thread Richard Smith via cfe-commits
rsmith added a subscriber: rsmith.
rsmith added a comment.

The direction here generally seems fine to me.



Comment at: lib/Driver/ToolChain.cpp:538
@@ -536,7 +537,3 @@
 ToolChain::CXXStdlibType ToolChain::GetCXXStdlibType(const ArgList &Args) 
const{
-  if (Arg *A = Args.getLastArg(options::OPT_stdlib_EQ)) {
-StringRef Value = A->getValue();
-if (Value == "libc++")
-  return ToolChain::CST_Libcxx;
-if (Value == "libstdc++")
-  return ToolChain::CST_Libstdcxx;
+  StringRef CXXStdlibName(CLANG_DEFAULT_CXX_STDLIB);
+

On Darwin, this default will be clobbered by the code in 
`Darwin::TranslateArgs` in ToolChains.cpp. On MIPS, this override will take no 
effect because `GetCXXStdlibType` is overridden.

Perhaps we could instead default `CLANG_DEFAULT_CXX_STDLIB` to `""`, and let 
the tool chain pick the default if it's neither specified at configure time nor 
on the command line.


http://reviews.llvm.org/D15920



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D15920: [CMake] Add option to switch default C++ stdlib

2016-02-09 Thread Chris Bieneman via cfe-commits
beanz added a comment.

Is it correct to assume that all the test case changes are needed just to make 
the tests pass if you set CLANG_DEFAULT_CXX_STDLIB=libc++?

I'm not really comfortable approving this patch because I've made all of one or 
two changes ever to the driver, but I can try to pester someone else to take a 
gander. It doesn't look particularly invasive to me.

One comment inline.



Comment at: lib/Driver/ToolChain.cpp:552
@@ -546,3 +551,3 @@
 
   return ToolChain::CST_Libstdcxx;
 }

There are two cases where this line would get hit:

(1) If the stdlib arg is an invalid library, it falls through here after 
printing the diagnostic
(2) if CLANG_DEFAULT_CXX_STDLIB is itself an invalid library value

Can you add a configure-time or compile time check to catch case 2?


http://reviews.llvm.org/D15920



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D15920: [CMake] Add option to switch default C++ stdlib

2016-02-09 Thread Jonas Hahnfeld via cfe-commits
Hahnfeld added a comment.

ping


http://reviews.llvm.org/D15920



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D15920: [CMake] Add option to switch default C++ stdlib

2016-01-27 Thread Jonas Hahnfeld via cfe-commits
Hahnfeld added a reviewer: mcrosier.
Hahnfeld added a comment.

Any comments on this change?


http://reviews.llvm.org/D15920



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D15920: [CMake] Add option to switch default C++ stdlib

2016-01-06 Thread Jonas Hahnfeld via cfe-commits
Hahnfeld created this revision.
Hahnfeld added reviewers: chandlerc, mclow.lists, beanz.
Hahnfeld added a subscriber: cfe-commits.
Herald added subscribers: srhines, danalbert, tberghammer.

With this option one can set the default library to use if no `-stdlib=` is 
provided on compiler invocation (currently hard coded `libstdc++` which remains 
default)
Also add explicit option `-stdlib=libstdc++` to tests that require it and would 
fail when you choose `libc++`.

I haven't touched autotools which should be removed soon anyway. I'm fine if 
either someone else looks into it or if the patch only gets accepted afterwards.

http://reviews.llvm.org/D15920

Files:
  CMakeLists.txt
  include/clang/Config/config.h.cmake
  include/clang/Config/config.h.in
  lib/Driver/ToolChain.cpp
  test/Driver/android-standalone.cpp
  test/Driver/darwin-iphone-defaults.m
  test/Driver/darwin-objc-gc.m
  test/Driver/darwin-sanitizer-ld.c
  test/Driver/gcc-toolchain.cpp
  test/Driver/linux-header-search.cpp
  test/Driver/mips-cs.cpp
  test/Driver/mips-fsf.cpp
  test/Driver/mips-img.cpp
  test/Driver/sanitizer-ld.c
  test/Driver/windows-cross.c
  unittests/libclang/LibclangTest.cpp

Index: unittests/libclang/LibclangTest.cpp
===
--- unittests/libclang/LibclangTest.cpp
+++ unittests/libclang/LibclangTest.cpp
@@ -485,7 +485,7 @@
   WriteFile(Clang, "");
 
   const char *Argv[] = {Clang.c_str(), "-target", "arm-linux-gnueabi",
-"--gcc-toolchain="};
+"-stdlib=libstdc++", "--gcc-toolchain="};
 
   EXPECT_EQ(CXError_Success,
 clang_parseTranslationUnit2FullArgv(Index, Filename.c_str(), Argv,
Index: test/Driver/windows-cross.c
===
--- test/Driver/windows-cross.c
+++ test/Driver/windows-cross.c
@@ -1,9 +1,9 @@
-// RUN: %clang -### -target armv7-windows-itanium --sysroot %S/Inputs/Windows/ARM/8.1 -B %S/Inputs/Windows/ARM/8.1/usr/bin -o /dev/null %s 2>&1 \
+// RUN: %clang -### -target armv7-windows-itanium --sysroot %S/Inputs/Windows/ARM/8.1 -B %S/Inputs/Windows/ARM/8.1/usr/bin -stdlib=libstdc++ -o /dev/null %s 2>&1 \
 // RUN:   | FileCheck %s --check-prefix CHECK-BASIC
 
 // CHECK-BASIC: armv7-windows-itanium-ld" "--sysroot={{.*}}/Inputs/Windows/ARM/8.1" "-m" "thumb2pe" "-Bdynamic" "--entry" "mainCRTStartup" "--allow-multiple-definition" "-o" "{{[^"]*}}" "{{.*}}/Inputs/Windows/ARM/8.1/usr/lib/crtbegin.obj" "-L{{.*}}/Inputs/Windows/ARM/8.1/usr/lib" "-L{{.*}}/Inputs/Windows/ARM/8.1/usr/lib/gcc" "{{.*}}.o" "-lmsvcrt" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed"
 
-// RUN: %clang -### -target armv7-windows-itanium --sysroot %s/Inputs/Windows/ARM/8.1 -B %S/Inputs/Windows/ARM/8.1/usr/bin -rtlib=compiler-rt -o /dev/null %s 2>&1 \
+// RUN: %clang -### -target armv7-windows-itanium --sysroot %s/Inputs/Windows/ARM/8.1 -B %S/Inputs/Windows/ARM/8.1/usr/bin -rtlib=compiler-rt -stdlib=libstdc++ -o /dev/null %s 2>&1 \
 // RUN:   | FileCheck %s --check-prefix CHECK-RTLIB
 
 // CHECK-RTLIB: armv7-windows-itanium-ld" "--sysroot={{.*}}/Inputs/Windows/ARM/8.1" "-m" "thumb2pe" "-Bdynamic" "--entry" "mainCRTStartup" "--allow-multiple-definition" "-o" "{{[^"]*}}" "{{.*}}/Inputs/Windows/ARM/8.1/usr/lib/crtbegin.obj" "-L{{.*}}/Inputs/Windows/ARM/8.1/usr/lib" "-L{{.*}}/Inputs/Windows/ARM/8.1/usr/lib/gcc" "{{.*}}.o" "-lmsvcrt" "{{.*[\\/]}}clang_rt.builtins-arm.lib"
@@ -33,7 +33,7 @@
 
 // CHECK-STANDALONE: armv7-windows-itanium-ld" "--sysroot={{.*}}/Inputs/Windows/ARM/8.1" "-m" "thumb2pe" "-shared" "-Bdynamic" "--enable-auto-image-base" "--entry" "_DllMainCRTStartup" "--allow-multiple-definition" "-o" "shared.dll" "--out-implib" "shared.lib" "{{.*}}.o"
 
-// RUN: %clang -### -target armv7-windows-itanium --sysroot %S/Inputs/Windows/ARM/8.1 -B %/Inputs/Windows/ARM/8.1/usr/bin -shared -o shared.dll -x c++ %s 2>&1 \
+// RUN: %clang -### -target armv7-windows-itanium --sysroot %S/Inputs/Windows/ARM/8.1 -B %/Inputs/Windows/ARM/8.1/usr/bin -stdlib=libstdc++ -shared -o shared.dll -x c++ %s 2>&1 \
 // RUN:| FileCheck %s --check-prefix CHECK-LIBSTDCXX
 
 // CHECK-LIBSTDCXX:  "-internal-isystem" "{{.*}}/usr/include/c++" "-internal-isystem" "{{.*}}/usr/include/c++/armv7--windows-itanium" "-internal-isystem" "{{.*}}/usr/include/c++/backwards"
Index: test/Driver/sanitizer-ld.c
===
--- test/Driver/sanitizer-ld.c
+++ test/Driver/sanitizer-ld.c
@@ -76,7 +76,7 @@
 // CHECK-ASAN-FREEBSD-LDL-NOT: "-ldl"
 
 // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
-// RUN: -target i386-unknown-linux -fsanitize=address \
+// RUN: -target i386-unknown-linux -stdlib=libstdc++ -fsanitize=address \
 // RUN: -resource-dir=%S/Inputs/empty_resource_dir \
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-LINUX-CXX %s
@@ -93,8 +93,8 @@
 // CHECK-ASAN-LINUX-CXX: "-ldl"
 
 /