From 7b9c26519e6aa07a0709c5c6fcc2b9a6ba050e7a Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Wed, 9 Sep 2020 18:43:13 +0200 Subject: [PATCH] [nvptx, libgcc] Fix Wbuiltin-declaration-mismatch in atomic.c MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit When building for target nvptx, we get this and similar warnings for libgcc: ... src/libgcc/config/nvptx/atomic.c:39:1: warning: conflicting types for \ built-in function ‘__sync_val_compare_and_swap_1’; expected \ ‘unsigned char(volatile void *, unsigned char, unsigned char)’ \ [-Wbuiltin-declaration-mismatch] ... Fix this by making sure in atomic.c that the pointers used are of type 'volatile void *'. Tested by rebuilding atomic.c. libgcc/ChangeLog: * config/nvptx/atomic.c (__SYNC_SUBWORD_COMPARE_AND_SWAP): Fix Wbuiltin-declaration-mismatch. --- libgcc/config/nvptx/atomic.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/libgcc/config/nvptx/atomic.c b/libgcc/config/nvptx/atomic.c index e1ea078692a..60f21f3ff7f 100644 --- a/libgcc/config/nvptx/atomic.c +++ b/libgcc/config/nvptx/atomic.c @@ -36,10 +36,13 @@ #define __SYNC_SUBWORD_COMPARE_AND_SWAP(TYPE, SIZE) \ \ TYPE \ -__sync_val_compare_and_swap_##SIZE (TYPE *ptr, TYPE oldval, TYPE newval) \ +__sync_val_compare_and_swap_##SIZE (volatile void *vptr, TYPE oldval, \ + TYPE newval) \ { \ - unsigned int *wordptr = (unsigned int *)((__UINTPTR_TYPE__ ) ptr & ~3UL); \ - int shift = ((__UINTPTR_TYPE__ ) ptr & 3UL) * 8; \ + volatile TYPE *ptr = vptr; \ + volatile unsigned int *wordptr \ + = (volatile unsigned int *)((__UINTPTR_TYPE__) ptr & ~3UL); \ + int shift = ((__UINTPTR_TYPE__) ptr & 3UL) * 8; \ unsigned int valmask = (1 << (SIZE * 8)) - 1; \ unsigned int wordmask = ~(valmask << shift); \ unsigned int oldword = *wordptr; \ @@ -64,7 +67,8 @@ __sync_val_compare_and_swap_##SIZE (TYPE *ptr, TYPE oldval, TYPE newval) \ } \ \ bool \ -__sync_bool_compare_and_swap_##SIZE (TYPE *ptr, TYPE oldval, TYPE newval) \ +__sync_bool_compare_and_swap_##SIZE (volatile void *ptr, TYPE oldval, \ + TYPE newval) \ { \ return __sync_val_compare_and_swap_##SIZE (ptr, oldval, newval) == oldval; \ } -- 2.30.2