Just a general comment: I believe we've now fixed this bug for at least four different architectures (each time as a separate effort). Is there some kind of auditing we could do to make sure we don't run into this again?
-Hal ----- Original Message ----- > From: "Ulrich Weigand via cfe-commits" <cfe-commits@lists.llvm.org> > To: cfe-commits@lists.llvm.org > Sent: Friday, February 5, 2016 3:34:29 PM > Subject: r259931 - [SystemZ] Define __GCC_HAVE_SYNC_COMPARE_AND_SWAP macros > > 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 > > Modified: cfe/trunk/lib/Basic/Targets.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=259931&r1=259930&r2=259931&view=diff > ============================================================================== > --- cfe/trunk/lib/Basic/Targets.cpp (original) > +++ cfe/trunk/lib/Basic/Targets.cpp Fri Feb 5 15:34:28 2016 > @@ -6166,6 +6166,12 @@ public: > Builder.defineMacro("__s390x__"); > Builder.defineMacro("__zarch__"); > Builder.defineMacro("__LONG_DOUBLE_128__"); > + > + Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1"); > + Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2"); > + Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4"); > + Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8"); > + > if (HasTransactionalExecution) > Builder.defineMacro("__HTM__"); > if (Opts.ZVector) > > Modified: cfe/trunk/test/Preprocessor/predefined-arch-macros.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/predefined-arch-macros.c?rev=259931&r1=259930&r2=259931&view=diff > ============================================================================== > --- cfe/trunk/test/Preprocessor/predefined-arch-macros.c (original) > +++ cfe/trunk/test/Preprocessor/predefined-arch-macros.c Fri Feb 5 > 15:34:28 2016 > @@ -1787,6 +1787,10 @@ > // RUN: -target s390x-unknown-linux \ > // RUN: | FileCheck %s -check-prefix=CHECK_SYSTEMZ_Z10 > // > +// CHECK_SYSTEMZ_Z10: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 > +// CHECK_SYSTEMZ_Z10: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 > +// CHECK_SYSTEMZ_Z10: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 > +// CHECK_SYSTEMZ_Z10: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 > // CHECK_SYSTEMZ_Z10: #define __LONG_DOUBLE_128__ 1 > // CHECK_SYSTEMZ_Z10: #define __s390__ 1 > // CHECK_SYSTEMZ_Z10: #define __s390x__ 1 > @@ -1796,6 +1800,10 @@ > // RUN: -target s390x-unknown-linux \ > // RUN: | FileCheck %s -check-prefix=CHECK_SYSTEMZ_ZEC12 > // > +// CHECK_SYSTEMZ_ZEC12: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 > +// CHECK_SYSTEMZ_ZEC12: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 > +// CHECK_SYSTEMZ_ZEC12: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 > +// CHECK_SYSTEMZ_ZEC12: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 > // CHECK_SYSTEMZ_ZEC12: #define __HTM__ 1 > // CHECK_SYSTEMZ_ZEC12: #define __LONG_DOUBLE_128__ 1 > // CHECK_SYSTEMZ_ZEC12: #define __s390__ 1 > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > -- Hal Finkel Assistant Computational Scientist Leadership Computing Facility Argonne National Laboratory _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits