The patch for sub-word atomics support added an include of stdint.h for the definition of uintptr_h, but this can result in GCC compilation failing if the stdint.h header has not been installed (from newlib in the case of AMD GCN).

I have fixed this by removing the stdint.h include and replacing uintptr_t with __UINTPTR_TYPE__, which is a predefined macro in the C preprocessor.

Okay for trunk?

Kwok

2020-01-10  Kwok Cheung Yeung  <k...@codesourcery.com>

        libgcc/
        * config/gcn/atomic.c: Remove include of stdint.h.
        (__sync_val_compare_and_swap_##SIZE): Replace uintptr_t with
        __UINTPTR_TYPE__.
---
 libgcc/config/gcn/atomic.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/libgcc/config/gcn/atomic.c b/libgcc/config/gcn/atomic.c
index 214c9a5..adceb02 100644
--- a/libgcc/config/gcn/atomic.c
+++ b/libgcc/config/gcn/atomic.c
@@ -22,15 +22,14 @@
    <http://www.gnu.org/licenses/>.  */

 #include <stdbool.h>
-#include <stdint.h>

 #define __SYNC_SUBWORD_COMPARE_AND_SWAP(TYPE, SIZE)                         \
                                                                             \
 TYPE                                                                        \
 __sync_val_compare_and_swap_##SIZE (TYPE *ptr, TYPE oldval, TYPE newval)     \
 {                                                                           \
-  unsigned int *wordptr = (unsigned int *)((uintptr_t) ptr & ~3UL);            
 \
-  int shift = ((uintptr_t) ptr & 3UL) * 8;                              \
+  unsigned int *wordptr = (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;                                          \
--
2.8.1

Reply via email to