Topotuna created this revision. Topotuna added a reviewer: Anastasia. Herald added subscribers: ldrumm, yaxunl. Topotuna requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
Definition of __cpp_threadsafe_static_init macro is controlled by language option Opts.ThreadsafeStatics. This patch sets language option to false by default in OpenCL mode, resulting in macro __cpp_threadsafe_static_init being undefined. Default value can be overriden using command line option -fthreadsafe-statics. Change is supposed to address portability because not all OpenCL vendors support thread safe implementation of static initialization. Fixes llvm.org/PR48012 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D107163 Files: clang/lib/Driver/ToolChains/Clang.cpp clang/test/Driver/threadsafe-statics.clcpp Index: clang/test/Driver/threadsafe-statics.clcpp =================================================================== --- /dev/null +++ clang/test/Driver/threadsafe-statics.clcpp @@ -0,0 +1,11 @@ +// RUN: %clang -### -c -DNO_THREADSAFE_STATICS %s 2>&1 | FileCheck --check-prefix=CHECK-NO-THREADSAFE-STATICS %s +// RUN: %clang -### -fno-threadsafe-statics -DNO_THREADSAFE_STATICS -c %s 2>&1 | FileCheck --check-prefix=CHECK-NO-THREADSAFE-STATICS %s + +// CHECK-NO-THREADSAFE-STATICS: "-cc1" +// CHECK-NO-THREADSAFE-STATICS: "-fno-threadsafe-statics" +// CHECK-NO-THREADSAFE-STATICS-NOT: "-fthreadsafe-statics" + +// RUN: %clang -### -fthreadsafe-statics -DTHREADSAFE_STATICS -c %s 2>&1 | FileCheck --check-prefix=CHECK-THREADSAFE-STATICS %s + +// CHECK-THREADSAFE-STATICS: "-cc1" +// CHECK-THREADSAFE-STATICS-NOT: "-fno-threadsafe-statics" Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -6147,7 +6147,8 @@ // than 19. if (!Args.hasFlag(options::OPT_fthreadsafe_statics, options::OPT_fno_threadsafe_statics, - !IsWindowsMSVC || IsMSVC2015Compatible)) + !types::isOpenCL(InputType) && + (!IsWindowsMSVC || IsMSVC2015Compatible))) CmdArgs.push_back("-fno-threadsafe-statics"); // -fno-delayed-template-parsing is default, except when targeting MSVC.
Index: clang/test/Driver/threadsafe-statics.clcpp =================================================================== --- /dev/null +++ clang/test/Driver/threadsafe-statics.clcpp @@ -0,0 +1,11 @@ +// RUN: %clang -### -c -DNO_THREADSAFE_STATICS %s 2>&1 | FileCheck --check-prefix=CHECK-NO-THREADSAFE-STATICS %s +// RUN: %clang -### -fno-threadsafe-statics -DNO_THREADSAFE_STATICS -c %s 2>&1 | FileCheck --check-prefix=CHECK-NO-THREADSAFE-STATICS %s + +// CHECK-NO-THREADSAFE-STATICS: "-cc1" +// CHECK-NO-THREADSAFE-STATICS: "-fno-threadsafe-statics" +// CHECK-NO-THREADSAFE-STATICS-NOT: "-fthreadsafe-statics" + +// RUN: %clang -### -fthreadsafe-statics -DTHREADSAFE_STATICS -c %s 2>&1 | FileCheck --check-prefix=CHECK-THREADSAFE-STATICS %s + +// CHECK-THREADSAFE-STATICS: "-cc1" +// CHECK-THREADSAFE-STATICS-NOT: "-fno-threadsafe-statics" Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -6147,7 +6147,8 @@ // than 19. if (!Args.hasFlag(options::OPT_fthreadsafe_statics, options::OPT_fno_threadsafe_statics, - !IsWindowsMSVC || IsMSVC2015Compatible)) + !types::isOpenCL(InputType) && + (!IsWindowsMSVC || IsMSVC2015Compatible))) CmdArgs.push_back("-fno-threadsafe-statics"); // -fno-delayed-template-parsing is default, except when targeting MSVC.
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits