From e07e9549665cfb7ae9e7fe68e028a9affe74df63 Mon Sep 17 00:00:00 2001 From: Mark Stapp Date: Tue, 30 Oct 2018 14:05:47 -0400 Subject: [PATCH] zebra: temporary workaround for a clang issue with atomics Current clang has an issue with the pointer/target argument to at least one atomic/intrinsic. A variable with '_Atomic' generates a compile-time error. Use a cast as a workaround here to allow use of clang for now. Signed-off-by: Mark Stapp --- zebra/zebra_dplane.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c index 0581edfd6d..61eba92c98 100644 --- a/zebra/zebra_dplane.c +++ b/zebra/zebra_dplane.c @@ -651,8 +651,16 @@ static int dplane_route_enqueue(struct zebra_dplane_ctx *ctx) } DPLANE_UNLOCK(); - curr = atomic_add_fetch_explicit(&zdplane_info.dg_routes_queued, - 1, memory_order_seq_cst); + curr = atomic_add_fetch_explicit( +#ifdef __clang__ + /* TODO -- issue with the clang atomic/intrinsics currently; + * casting away the 'Atomic'-ness of the variable works. + */ + (uint32_t *)&(zdplane_info.dg_routes_queued), +#else + &(zdplane_info.dg_routes_queued), +#endif + 1, memory_order_seq_cst); /* Maybe update high-water counter also */ high = atomic_load_explicit(&zdplane_info.dg_routes_queued_max, -- 2.39.5