From: Mark Stapp Date: Tue, 30 Oct 2018 18:05:47 +0000 (-0400) Subject: zebra: temporary workaround for a clang issue with atomics X-Git-Tag: frr-7.1-dev~230^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=e07e9549665cfb7ae9e7fe68e028a9affe74df63;p=matthieu%2Ffrr.git 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 --- 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,