aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2022-11-09 16:05:08 -0800
committerIan Lance Taylor <iant@golang.org>2022-11-09 16:06:10 -0800
commit219f82070903625d6bd8865b5ecb5f944bcee871 (patch)
tree31a72eaee329ef95b25e879fe9fa2405cf481fcf
parent965ce1ba392ca03c746cabb9ba73e66258557dcb (diff)
downloadgcc-219f82070903625d6bd8865b5ecb5f944bcee871.zip
gcc-219f82070903625d6bd8865b5ecb5f944bcee871.tar.gz
gcc-219f82070903625d6bd8865b5ecb5f944bcee871.tar.bz2
go: don't crash if __atomic_fetch_add functions are used
The Go frontend only generates __atomic_add_fetch, but in some cases thost calls become __atomic_fetch_add. Patch originally by Marc Poulhiès. PR target/107581 * go-gcc.cc (Gcc_backend::Gcc_backend): Define __atomic_fetch_add_{4,8}.
-rw-r--r--gcc/go/go-gcc.cc12
1 files changed, 8 insertions, 4 deletions
diff --git a/gcc/go/go-gcc.cc b/gcc/go/go-gcc.cc
index 1ba7206..6e5887a 100644
--- a/gcc/go/go-gcc.cc
+++ b/gcc/go/go-gcc.cc
@@ -886,16 +886,20 @@ Gcc_backend::Gcc_backend()
uint32_type_node,
integer_type_node,
NULL_TREE);
- this->define_builtin(BUILT_IN_ATOMIC_ADD_FETCH_4, "__atomic_add_fetch_4", NULL,
- t, 0);
+ this->define_builtin(BUILT_IN_ATOMIC_ADD_FETCH_4, "__atomic_add_fetch_4",
+ NULL, t, 0);
+ this->define_builtin(BUILT_IN_ATOMIC_FETCH_ADD_4, "__atomic_fetch_add_4",
+ NULL, t, 0);
t = build_function_type_list(uint64_type_node,
ptr_type_node,
uint64_type_node,
integer_type_node,
NULL_TREE);
- this->define_builtin(BUILT_IN_ATOMIC_ADD_FETCH_8, "__atomic_add_fetch_8", NULL,
- t, 0);
+ this->define_builtin(BUILT_IN_ATOMIC_ADD_FETCH_8, "__atomic_add_fetch_8",
+ NULL, t, 0);
+ this->define_builtin(BUILT_IN_ATOMIC_FETCH_ADD_8, "__atomic_fetch_add_8",
+ NULL, t, 0);
t = build_function_type_list(unsigned_char_type_node,
ptr_type_node,