Hi. Some builtin functions, like __atomic_fetch_add, have a generic return type which libgccjit consider to be void. That makes it impossible to use this value. Thanks to fix this issue.
I think the builtin __atomic_fetch_add should not be used directly from the JIT front-end, rather __atomic_fetch_add_N should be used instead.
An attempt to use, let's say, __atomic_fetch_add_4, will result in a error like: libgccjit.so: error: unimplemented primitive type for builtin (type: BT_I4)
Created attachment 50832 [details] Patch to fix the issues with using atomic builtins I implemented the missing types and fixed the type checking.
*** Bug 96067 has been marked as a duplicate of this bug. ***
The master branch has been updated by Antoni Boucher <antoyo@gcc.gnu.org>: https://gcc.gnu.org/g:611fdb0fc5b95ee15215e2e3679834f311919096 commit r12-5912-g611fdb0fc5b95ee15215e2e3679834f311919096 Author: Antoni Boucher <bouanto@zoho.com> Date: Sat Dec 11 16:42:54 2021 -0500 libgccjit: Add support for types used by atomic builtins [PR96066] [PR96067] 2021-12-11 Antoni Boucher <bouanto@zoho.com> gcc/jit/ PR target/96066 PR target/96067 * jit-builtins.c: Implement missing types for builtins. * jit-recording.c:: Allow sending a volatile const void * as argument. * jit-recording.h: New functions (is_volatile, is_const) and allow comparing qualified types. gcc/testsuite/ PR target/96066 PR target/96067 * jit.dg/all-non-failing-tests.h: Add test-builtin-types.c. * jit.dg/test-builtin-types.c * jit.dg/test-error-bad-assignment.c * jit.dg/test-fuzzer.c: Add fuzzing for type qualifiers. Signed-off-by: Antoni Boucher <bouanto@zoho.com>
Fixed in master.