guile-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: GNU Guile 2.1.6 released (beta)


From: Matt Wette
Subject: Re: GNU Guile 2.1.6 released (beta)
Date: Thu, 9 Mar 2017 18:52:21 -0800


On Mar 9, 2017, at 6:01 PM, Matt Wette <address@hidden> wrote:


On Mar 9, 2017, at 1:33 PM, Andy Wingo <address@hidden> wrote:
On Wed 25 Jan 2017 04:35, Matt Wette <address@hidden> writes:
So I am trying to compile using clang. This has detected issues with atomics-internal.h. I can fix most issues with casts:
static inline uint32_t
scm_atomic_subtract_uint32 (uint32_t *loc, uint32_t arg)
{
- return atomic_fetch_sub (loc, arg);
+ return atomic_fetch_sub ((_Atomic uint32_t *)loc, arg);
}

But problems remain with scm_atomic_set_pointer and scm_atomic_ref_pointer which use void** and is apparently not defined for use with atomics.

Apparently gcc does not have a problem with this use but I’m guessing the C11 standard may have an issue with it.

WDYT about this?

Andy

Have not tried to chase this down but ...

In file included from async.c:27:
../libguile/atomics-internal.h:75:20: error: address argument to atomic operation must be a pointer to _Atomic type ('SCM *' (aka 'struct scm_unused_struct **') invalid)
  return SCM_PACK (atomic_exchange (loc, val));
                   ^                ~~~
/opt/local/libexec/llvm-3.9/bin/../lib/clang/3.9.1/include/stdatomic.h:137:42: note: expanded from macro 'atomic_exchange'
#define atomic_exchange(object, desired) __c11_atomic_exchange(object, desired, __ATOMIC_SEQ_CST)
                                         ^                     ~~~~~~
../libguile/tags.h:105:32: note: expanded from macro 'SCM_PACK'
#   define SCM_PACK(x) ((SCM) (x))
                               ^
1 error generated.


With this change it compiles under clang-3.9, though generates warning, and gets through make check (with required other unrelated patches) OK:

static inline SCM
scm_atomic_swap_scm (SCM *loc, SCM val)
{
  volatile atomic_uintptr_t *a_loc = (volatile atomic_uintptr_t *)loc;
  return SCM_PACK (atomic_exchange (a_loc, val));
}



reply via email to

[Prev in Thread] Current Thread [Next in Thread]