From 78bea23be0271f47b9ad1fd212babca544e23e4a Mon Sep 17 00:00:00 2001 From: Hans Wennborg Date: Thu, 30 Jul 2015 01:45:17 +0000 Subject: [PATCH] [CMake] Pass -march=i686 when targeting i686 (PR24222) Clang will not define __i686__, even when the target triple is i686, without -march=i686. With this patch, the compiler-rt build will successfully detect that Clang can target i686. The open_memstream.cc test is a little funny. Before my patch, it was invoked with "-m32 -m64". To make it work after my -march change, I had to add '-march=x86-64'. Differential Revision: http://reviews.llvm.org/D11618 llvm-svn: 243604 --- compiler-rt/cmake/config-ix.cmake | 3 ++- .../test/sanitizer_common/TestCases/Linux/open_memstream.cc | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/compiler-rt/cmake/config-ix.cmake b/compiler-rt/cmake/config-ix.cmake index b5f8f596b9f5a..9f7227245d234 100644 --- a/compiler-rt/cmake/config-ix.cmake +++ b/compiler-rt/cmake/config-ix.cmake @@ -180,7 +180,8 @@ else() # FIXME: We build runtimes for both i686 and i386, as "clang -m32" may # target different variant than "$CMAKE_C_COMPILER -m32". This part should # be gone after we resolve PR14109. - test_target_arch(i686 __i686__ "-m32") + # Use -march to make sure Clang defines __i686__; see PR24222. + test_target_arch(i686 __i686__ "-m32" "-march=i686") test_target_arch(i386 __i386__ "-m32") else() if (CMAKE_SIZEOF_VOID_P EQUAL 4) diff --git a/compiler-rt/test/sanitizer_common/TestCases/Linux/open_memstream.cc b/compiler-rt/test/sanitizer_common/TestCases/Linux/open_memstream.cc index 3bce030ddb23b..8ebb6de84c90b 100644 --- a/compiler-rt/test/sanitizer_common/TestCases/Linux/open_memstream.cc +++ b/compiler-rt/test/sanitizer_common/TestCases/Linux/open_memstream.cc @@ -1,5 +1,5 @@ -// RUN: %clangxx -m64 -O0 -g -xc++ %s -o %t && %run %t -// RUN: %clangxx -m64 -O3 -g -xc++ %s -o %t && %run %t +// RUN: %clangxx -m64 -march=x86-64 -O0 -g -xc++ %s -o %t && %run %t +// RUN: %clangxx -m64 -march=x86-64 -O3 -g -xc++ %s -o %t && %run %t // REQUIRES: x86_64-supported-target #include