[RISCV] Set __GCC_HAVE_SYNC_COMPARE_AND_SWAP_x defines
authorLuís Marques <luismarques@lowrisc.org>
Tue, 24 Nov 2020 22:46:38 +0000 (22:46 +0000)
committerLuís Marques <luismarques@lowrisc.org>
Tue, 24 Nov 2020 22:50:28 +0000 (22:50 +0000)
The RISCV target did not set the GCC atomic compare and swap defines,
unlike other targets. This broke builds for things like glib on RISCV.

Patch by Kristof Provost (kprovost)

Differential Revision: https://reviews.llvm.org/D91784

clang/lib/Basic/Targets/RISCV.cpp

index 5e17b7d..37e688d 100644 (file)
@@ -115,8 +115,14 @@ void RISCVTargetInfo::getTargetDefines(const LangOptions &Opts,
     Builder.defineMacro("__riscv_muldiv");
   }
 
-  if (HasA)
+  if (HasA) {
     Builder.defineMacro("__riscv_atomic");
+    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");
+    if (Is64Bit)
+      Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8");
+  }
 
   if (HasF || HasD) {
     Builder.defineMacro("__riscv_flen", HasD ? "64" : "32");