Building with CLANG, you'll see a couple of warnings while building
under CodeSamples/ as follows:
cc -g -O3 -Wall -o q -DTEST q.c -lpthread
q.c:39:12: warning: incompatible pointer types passing 'struct el *'
to parameter of type 'struct el **'; take the address with &
[-Wincompatible-pointer-types]
oldtail = xchg(&q->tail, p);
^~~~~~~~~~~~~~~~~
./../api.h:778:49: note: expanded from macro 'xchg'
^~~
1 warning generated.
and:
cc -g -O3 -Wall -o wfenqueue -DTEST wfenqueue.c -lpthread
wfenqueue.c:38:9: warning: incompatible pointer types passing
'struct el *' to parameter of type 'struct el **'; take the
address with & [-Wincompatible-pointer-types]
tail = xchg(&qp->tail, ep);
^~~~~~~~~~~~~~~~~~~
./../api.h:778:49: note: expanded from macro 'xchg'
^~~
1 warning generated.
This is due to indirection-level mismatch in the argument of xchg().
Add explicit cast and silence those warnings.
Signed-off-by: Akira Yokosawa <[email protected]>
---
CodeSamples/advsync/q.c | 2 +-
CodeSamples/advsync/wfenqueue.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/CodeSamples/advsync/q.c b/CodeSamples/advsync/q.c
index 4198b3c8..8997a460 100644
--- a/CodeSamples/advsync/q.c
+++ b/CodeSamples/advsync/q.c
@@ -36,7 +36,7 @@ int q_push(struct el *p, struct queue *q)
struct el **oldtail;
p->next = NULL;
- oldtail = xchg(&q->tail, p);
+ oldtail = xchg(&q->tail, (struct el **)p);
*oldtail = p;
return 1;
}
diff --git a/CodeSamples/advsync/wfenqueue.c b/CodeSamples/advsync/wfenqueue.c
index fed8d87b..9970b075 100644
--- a/CodeSamples/advsync/wfenqueue.c
+++ b/CodeSamples/advsync/wfenqueue.c
@@ -35,7 +35,7 @@ int q_push(struct el *ep, struct queue *qp)
struct el **tail;
ep->next = NULL;
- tail = xchg(&qp->tail, ep);
+ tail = xchg(&qp->tail, (struct el **)ep);
*tail = ep;
return 1;
}
--
2.34.1