Hi,

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.

Committed to trunk.

Thanks,
- Tom

[nvptx, libgcc] Fix Wbuiltin-declaration-mismatch in 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; \
 }

Reply via email to