r259931 - [SystemZ] Define __GCC_HAVE_SYNC_COMPARE_AND_SWAP macros

Hans Wennborg via cfe-commits cfe-commits at lists.llvm.org
Fri Feb 5 14:19:38 PST 2016


Merged in r259939.

Cheers,
Hans

On Fri, Feb 5, 2016 at 2:06 PM, Ulrich Weigand
<Ulrich.Weigand at de.ibm.com> wrote:
> Hans,
>
> this is one more patch that should go into 3.8 -- it fixes miscompiles of
> code using GCC-provided C++11 system headers like <thread>.
>
> With this patch, the test suite is now clean also with a bootstrapped clang.
>
>
>
>>Author: uweigand
>>Date: Fri Feb  5 15:34:28 2016
>>New Revision: 259931
>>
>>URL: http://llvm.org/viewvc/llvm-project?rev=259931&view=rev
>>Log: [SystemZ] Define __GCC_HAVE_SYNC_COMPARE_AND_SWAP macros
>>
>>Define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_[1248] macros on SystemZ.
>>
>>This fixes a miscompile of GCC C++11 standard library headers
>>due to use of those macros in an ABI-changing manner.
>>
>>See e.g. /usr/include/c++/4.8.5/ext/concurrence.h:
>>
>>  // Compile time constant that indicates prefered locking policy in
>>  // the current configuration.
>>  static const _Lock_policy __default_lock_policy =
>>#ifdef __GTHREADS
>>#if (defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2) \
>>     && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4))
>>  _S_atomic;
>>#else
>>  _S_mutex;
>>#endif
>>#else
>>  _S_single;
>>#endif
>>
>>A different choice of __default_lock_policy causes different
>>sizes of several of the C++11 data structures, which are then
>>incompatible when inlined in clang-compiled code with what the
>>(GCC-compiled) external library expects.
>>
>>This in turn leads to various crashes when using std::thread
>>in code compiled with clang, as see e.g. via the ThreadPool
>>unit tests.  See PR 26473 for an example.
>>
>>
>>Modified:
>>    cfe/trunk/lib/Basic/Targets.cpp
>>    cfe/trunk/test/Preprocessor/predefined-arch-macros.c
>
>
> Mit freundlichen Gruessen / Best Regards
>
> Ulrich Weigand
>
> --
> Dr. Ulrich Weigand | Phone: +49-7031/16-3727
> STSM, GNU/Linux compilers and toolchain
> IBM Deutschland Research & Development GmbH
> Vorsitzende des Aufsichtsrats: Martina Koederitz | Geschäftsführung: Dirk
> Wittkopp
> Sitz der Gesellschaft: Böblingen | Registergericht: Amtsgericht Stuttgart,
> HRB 243294


More information about the cfe-commits mailing list