diff --git a/CHANGELOG.md b/CHANGELOG.md index cf32b1f3..ad328a0b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ This project partially comply with [Semantic Versioning][]. ## Unreleased - Fixed warnings for code using vatomic C++ +- Fixed warnings for C99. Except for dispatch.h, vatomic is now C99 compliant. ## [2.4.0] diff --git a/include/vsync/atomic/internal/macros.h b/include/vsync/atomic/internal/macros.h index 8360219d..8d1a7c22 100644 --- a/include/vsync/atomic/internal/macros.h +++ b/include/vsync/atomic/internal/macros.h @@ -1,5 +1,5 @@ /* - * Copyright (C) Huawei Technologies Co., Ltd. 2023-2024. All rights reserved. + * Copyright (C) Huawei Technologies Co., Ltd. 2023-2025. All rights reserved. * SPDX-License-Identifier: MIT */ @@ -84,7 +84,7 @@ * @param T target type vatomic32_t, vuint32_t, vuint64_t, void*, ... * @param v value to cast ******************************************************************************/ -#define V_CAST(T, v) ((V_CAST_UNION(T, __typeof__(v))){.in = v}.out) +#define V_CAST(T, v) ((V_CAST_UNION(T, __typeof__((v)))){.in = (v)}.out) /******************************************************************************* * @def V_CAST_UNION @@ -98,30 +98,11 @@ ******************************************************************************/ #define V_CAST_UNION(out_type, in_type) \ union { \ - vuint64_t clear; \ - \ V_ASSERT(sizeof(out_type) <= sizeof(vuint64_t), out_larger_than64); \ V_ASSERT(sizeof(in_type) <= sizeof(vuint64_t), in_larger_than64); \ - \ + vuint64_t clear; \ out_type out; \ - struct { \ - char pad[V_CAST_PAD_SIZE(out_type, in_type)]; \ - in_type in; \ - }; \ + in_type in; \ } -/* size greater or equal */ -#define V_CAST_SZGE(out_type, in_type) (sizeof(out_type) >= sizeof(in_type)) - -/* size difference */ -#define V_CAST_SZDIFF(out_type, in_type) (sizeof(out_type) - sizeof(in_type)) - -/* padding for big endian */ -#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ - #define V_CAST_PAD_SIZE(out_type, in_type) 0 -#else - #define V_CAST_PAD_SIZE(out_type, in_type) \ - (V_CAST_SZGE(out_type, in_type) ? V_CAST_SZDIFF(out_type, in_type) : 0) -#endif - #endif /* VATOMIC_INTERNAL_MACROS_H */ diff --git a/include/vsync/common/macros.h b/include/vsync/common/macros.h index e5641726..0b78ae4a 100644 --- a/include/vsync/common/macros.h +++ b/include/vsync/common/macros.h @@ -1,5 +1,5 @@ /* - * Copyright (C) Huawei Technologies Co., Ltd. 2023-2024. All rights reserved. + * Copyright (C) Huawei Technologies Co., Ltd. 2023-2025. All rights reserved. * SPDX-License-Identifier: MIT */ @@ -38,7 +38,7 @@ #define V_NR_VARS_(m, a, b, c, d, e, f, g, h, i, j, k, n, ...) m##n #define V_NR_VARS(m, ...) \ - V_NR_VARS_(m, ##__VA_ARGS__, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + V_NR_VARS_(m, __VA_ARGS__, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) /******************************************************************************* * unused args @@ -125,7 +125,7 @@ */ #define V_UNUSED(...) \ do { \ - V_NR_VARS(V_UNUSED_, ##__VA_ARGS__)(__VA_ARGS__); \ + V_NR_VARS(V_UNUSED_, __VA_ARGS__)(__VA_ARGS__); \ } while (0) /** diff --git a/template/test-atomic/mt_test_await_TY.c.in b/template/test-atomic/mt_test_await_TY.c.in index 3cb3c2ae..3cf1430b 100644 --- a/template/test-atomic/mt_test_await_TY.c.in +++ b/template/test-atomic/mt_test_await_TY.c.in @@ -11,7 +11,7 @@ _tmpl_end; #include /* keep number of threads even */ _tmpl_begin(TY = [[u8; u16; u32; u64]]); -#define IT 10 +#define IT 10 #define V_DOUBLE(_v_) ((_v_) * 2) _tmpl_end; #define MAX_THREADS 10 @@ -39,6 +39,11 @@ _tmpl_map(MAP_CAST_u8, ); _tmpl_map(MAP_CAST_u16, ); _tmpl_map(MAP_CAST_u32, ); _tmpl_map(MAP_CAST_u64, ); +_tmpl_map(MAP_TP_ptr, vuintptr_t); +_tmpl_map(MAP_TP_u8, TT); +_tmpl_map(MAP_TP_u16, TT); +_tmpl_map(MAP_TP_u32, TT); +_tmpl_map(MAP_TP_u64, TT); _tmpl_dl; // ------------------------------------------------------------------- _tmpl_dl; // Mid vals _tmpl_dl; // ------------------------------------------------------------------- @@ -76,8 +81,9 @@ static inline void * mt_atomic_TY_await_OP_MS_run(void *args) { vsize_t tid = (vsize_t)(vuintptr_t)args; - (void)__vatomic_await_OP_MS(&g_shared, MAP_CAST_TY(MAP_MID_TY + (TT)tid)); - __vatomic_write(&g_shared, MAP_CAST_TY(MAP_MID_TY + (TT)tid + 1U)); + (void)__vatomic_await_OP_MS(&g_shared, + MAP_CAST_TY(MAP_MID_TY + (MAP_TP_TY)tid)); + __vatomic_write(&g_shared, MAP_CAST_TY(MAP_MID_TY + (MAP_TP_TY)tid + 1U)); return NULL; } static inline void @@ -86,7 +92,7 @@ mt_atomic_TY_await_OP_MS(void) __vatomic_init(&g_shared, MAP_CAST_TY MAP_MID_TY); pthread_t t[MAX_THREADS]; for (vsize_t i = 0; i < MAX_THREADS; i++) - pthread_create(&t[i], 0, mt_atomic_TY_await_OP_MS_run, (void*)i); + pthread_create(&t[i], 0, mt_atomic_TY_await_OP_MS_run, (void *)i); for (vsize_t i = 0; i < MAX_THREADS; i++) pthread_join(t[i], 0); TT cur = __vatomic_read(&g_shared); @@ -98,7 +104,7 @@ _tmpl_dl; // ------------------------------------------------------------------- _tmpl_dl; // await eq_add, eq_set _tmpl_dl; // ------------------------------------------------------------------- _tmpl_map(MAP_NEW_VAl_add, 1); -_tmpl_map(MAP_NEW_VAl_set, (MAP_MID_TY + (TT)tid + 1)); +_tmpl_map(MAP_NEW_VAl_set, (MAP_MID_TY + (MAP_TP_TY)tid + 1)); _tmpl_begin(TY = [[u8; u16; u32; u64; ptr]], MO = [[seq]], OP = [[add; set]], $F_ptr_set = BLK_KEEP, $F_ptr = BLK_SKIP); $F_TY_OP; @@ -108,8 +114,8 @@ $F_TY_OP; static inline void * mt_atomic_TY_await_eq_OP_MS_run(void *args) { - vsize_t tid = (vsize_t)(vuintptr_t)args; - TT await_val = MAP_CAST_TY(MAP_MID_TY + (TT)tid); + vsize_t tid = (vsize_t)(vuintptr_t)args; + TT await_val = MAP_CAST_TY(MAP_MID_TY + (MAP_TP_TY)tid); TT new_val = MAP_CAST_TY(MAP_NEW_VAl_OP); (void)__vatomic_await_eq_OP_MS(&g_shared, await_val, new_val); return NULL; @@ -120,7 +126,7 @@ mt_atomic_TY_await_eq_OP_MS(void) __vatomic_init(&g_shared, MAP_CAST_TY MAP_MID_TY); pthread_t t[MAX_THREADS]; for (vsize_t i = 0; i < MAX_THREADS; i++) - pthread_create(&t[i], 0, mt_atomic_TY_await_eq_OP_MS_run, (void*)i); + pthread_create(&t[i], 0, mt_atomic_TY_await_eq_OP_MS_run, (void *)i); for (vsize_t i = 0; i < MAX_THREADS; i++) pthread_join(t[i], 0); TT cur = __vatomic_read(&g_shared); @@ -138,8 +144,8 @@ _tmpl_begin(TY = [[u8; u16; u32; u64]], MO = [[seq]], OP = [[sub]]); static inline void * mt_atomic_TY_await_eq_OP_MS_run(void *args) { - vsize_t tid = (vsize_t)(vuintptr_t)args; - TT wait_val = (MAP_MID_TY + MAX_THREADS) - (TT)tid; + vsize_t tid = (vsize_t)(vuintptr_t)args; + TT wait_val = (MAP_MID_TY + MAX_THREADS) - (MAP_TP_TY)tid; (void)__vatomic_await_eq_OP_MS(&g_shared, wait_val, 1); return NULL; } @@ -149,7 +155,7 @@ mt_atomic_TY_await_eq_OP_MS(void) __vatomic_init(&g_shared, MAP_MID_TY + MAX_THREADS); pthread_t t[MAX_THREADS]; for (vsize_t i = 0; i < MAX_THREADS; i++) - pthread_create(&t[i], 0, mt_atomic_TY_await_eq_OP_MS_run, (void*)i); + pthread_create(&t[i], 0, mt_atomic_TY_await_eq_OP_MS_run, (void *)i); for (vsize_t i = 0; i < MAX_THREADS; i++) pthread_join(t[i], 0); TT cur = __vatomic_read(&g_shared); @@ -206,7 +212,7 @@ mt_atomic_TY_await_COND_MS(void) __vatomic_init(&g_shared, MAP_CAST_TY MAP_MID_TY); pthread_t t[MAX_THREADS]; for (vsize_t i = 0; i < MAX_THREADS; i++) - pthread_create(&t[i], 0, mt_atomic_TY_await_COND_MS_run, (void*)i); + pthread_create(&t[i], 0, mt_atomic_TY_await_COND_MS_run, (void *)i); for (vsize_t i = 0; i < MAX_THREADS; i++) pthread_join(t[i], 0); TT cur = __vatomic_read(&g_shared); @@ -239,7 +245,7 @@ mt_atomic_TY_await_COND_MS(void) __vatomic_init(&g_shared, NULL); pthread_t t[MAX_THREADS]; for (vsize_t i = 0; i < MAX_THREADS; i++) - pthread_create(&t[i], 0, mt_atomic_TY_await_COND_MS_run, (void*)i); + pthread_create(&t[i], 0, mt_atomic_TY_await_COND_MS_run, (void *)i); for (vsize_t i = 0; i < MAX_THREADS; i++) pthread_join(t[i], 0); TT cur = __vatomic_read(&g_shared); @@ -261,7 +267,7 @@ mt_atomic_TY_await_COND_add_MS_waiter(void) { TT await_val = 0; for (TT i = 0; i < IT; i++) { - await_val = (MAP_MID_TY MAP_AWAIT_OP_COND i) MAP_AWAIT_OP_COND 1; + await_val = (MAP_MID_TY MAP_AWAIT_OP_COND i)MAP_AWAIT_OP_COND 1; (void)__vatomic_await_COND_add_MS(&g_shared, await_val, 1); } } @@ -290,12 +296,12 @@ mt_atomic_TY_await_COND_add_MS(void) __vatomic_init(&g_shared, MAP_MID_TY); pthread_t t[MAX_THREADS]; for (vsize_t i = 0; i < MAX_THREADS; i++) - pthread_create(&t[i], 0, mt_atomic_TY_await_COND_add_MS_run, (void*)i); + pthread_create(&t[i], 0, mt_atomic_TY_await_COND_add_MS_run, (void *)i); for (vsize_t i = 0; i < MAX_THREADS; i++) pthread_join(t[i], 0); - TT cur = __vatomic_read(&g_shared); - TT expected = - (MAP_MID_TY MAP_AWAIT_OP_COND(MAX_THREADS * IT)) + ((MAX_THREADS / 2) * IT); + TT cur = __vatomic_read(&g_shared); + TT expected = (MAP_MID_TY MAP_AWAIT_OP_COND(MAX_THREADS * IT)) + + ((MAX_THREADS / 2) * IT); assert(cur == expected); V_UNUSED(cur, expected); } @@ -338,7 +344,7 @@ mt_atomic_TY_await_COND_sub_MS(void) __vatomic_init(&g_shared, MAP_MID_TY); pthread_t t[MAX_THREADS]; for (vsize_t i = 0; i < MAX_THREADS; i++) - pthread_create(&t[i], 0, mt_atomic_TY_await_COND_sub_MS_run, (void*)i); + pthread_create(&t[i], 0, mt_atomic_TY_await_COND_sub_MS_run, (void *)i); for (vsize_t i = 0; i < MAX_THREADS; i++) pthread_join(t[i], 0); TT cur = __vatomic_read(&g_shared); @@ -385,7 +391,7 @@ mt_atomic_TY_await_COND_sub_MS(void) __vatomic_init(&g_shared, MAP_MID_TY); pthread_t t[MAX_THREADS]; for (vsize_t i = 0; i < MAX_THREADS; i++) - pthread_create(&t[i], 0, mt_atomic_TY_await_COND_sub_MS_run, (void*)i); + pthread_create(&t[i], 0, mt_atomic_TY_await_COND_sub_MS_run, (void *)i); for (vsize_t i = 0; i < MAX_THREADS; i++) pthread_join(t[i], 0); TT cur = __vatomic_read(&g_shared); @@ -404,8 +410,8 @@ _tmpl_begin(TY = [[u8; u16; u32; u64]], MO = [[seq]], COND = [[gt]]); static inline void * mt_atomic_TY_await_COND_set_MS_run(void *args) { - vsize_t tid = (vsize_t)(vuintptr_t)args; - TT wait_val = MAP_MID_TY + (TT)tid; + vsize_t tid = (vsize_t)(vuintptr_t)args; + TT wait_val = MAP_MID_TY + (MAP_TP_TY)tid; TT set_val = wait_val + 2; (void)__vatomic_await_COND_set_MS(&g_shared, wait_val, set_val); return NULL; @@ -417,11 +423,11 @@ mt_atomic_TY_await_COND_set_MS(void) __vatomic_init(&g_shared, init_val); pthread_t t[MAX_THREADS]; for (vsize_t i = 0; i < MAX_THREADS; i++) - pthread_create(&t[i], 0, mt_atomic_TY_await_COND_set_MS_run, (void*)i); + pthread_create(&t[i], 0, mt_atomic_TY_await_COND_set_MS_run, (void *)i); for (vsize_t i = 0; i < MAX_THREADS; i++) pthread_join(t[i], 0); TT cur = __vatomic_read(&g_shared); - TT expected = init_val + (TT)MAX_THREADS; + TT expected = init_val + (MAP_TP_TY)MAX_THREADS; assert(cur == expected); V_UNUSED(cur, expected); } @@ -436,8 +442,8 @@ _tmpl_begin(TY = [[u8; u16; u32; u64]], MO = [[seq]], COND = [[ge]]); static inline void * mt_atomic_TY_await_COND_set_MS_run(void *args) { - vsize_t tid = (vsize_t)(vuintptr_t)args; - TT wait_val = MAP_MID_TY + (TT)tid; + vsize_t tid = (vsize_t)(vuintptr_t)args; + TT wait_val = MAP_MID_TY + (MAP_TP_TY)tid; TT set_val = wait_val + 1; (void)__vatomic_await_COND_set_MS(&g_shared, wait_val, set_val); return NULL; @@ -449,11 +455,11 @@ mt_atomic_TY_await_COND_set_MS(void) __vatomic_init(&g_shared, init_val); pthread_t t[MAX_THREADS]; for (vsize_t i = 0; i < MAX_THREADS; i++) - pthread_create(&t[i], 0, mt_atomic_TY_await_COND_set_MS_run, (void*)i); + pthread_create(&t[i], 0, mt_atomic_TY_await_COND_set_MS_run, (void *)i); for (vsize_t i = 0; i < MAX_THREADS; i++) pthread_join(t[i], 0); TT cur = __vatomic_read(&g_shared); - TT expected = init_val + (TT)MAX_THREADS; + TT expected = init_val + (MAP_TP_TY)MAX_THREADS; assert(cur == expected); V_UNUSED(cur, expected); } @@ -468,8 +474,8 @@ _tmpl_begin(TY = [[u8; u16; u32; u64]], MO = [[seq]], COND = [[lt]]); static inline void * mt_atomic_TY_await_COND_set_MS_run(void *args) { - vsize_t tid = (vsize_t)(vuintptr_t)args; - TT wait_val = MAP_MID_TY - (TT)tid; + vsize_t tid = (vsize_t)(vuintptr_t)args; + TT wait_val = MAP_MID_TY - (MAP_TP_TY)tid; TT set_val = wait_val - 2; (void)__vatomic_await_COND_set_MS(&g_shared, wait_val, set_val); return NULL; @@ -480,11 +486,11 @@ mt_atomic_TY_await_COND_set_MS(void) __vatomic_init(&g_shared, MAP_MID_TY - 1); pthread_t t[MAX_THREADS]; for (vsize_t i = 0; i < MAX_THREADS; i++) - pthread_create(&t[i], 0, mt_atomic_TY_await_COND_set_MS_run, (void*)i); + pthread_create(&t[i], 0, mt_atomic_TY_await_COND_set_MS_run, (void *)i); for (vsize_t i = 0; i < MAX_THREADS; i++) pthread_join(t[i], 0); TT cur = __vatomic_read(&g_shared); - TT expected = (MAP_MID_TY - 1) - (TT)MAX_THREADS; + TT expected = (MAP_MID_TY - 1) - (MAP_TP_TY)MAX_THREADS; assert(cur == expected); V_UNUSED(cur, expected); } @@ -502,10 +508,10 @@ mt_atomic_TY_await_COND_set_MS_run(void *args) vsize_t tid = (vsize_t)(vuintptr_t)args; if (IS_EVEN(tid)) { (void)__vatomic_await_COND_set_MS(&g_shared, MAP_CAST_TY MAP_MID_TY, - MAP_CAST_TY MAP_MID_TY); + MAP_CAST_TY MAP_MID_TY); } else { (void)__vatomic_await_COND_set_MS(&g_shared, MAP_CAST_TY ~MAP_MID_TY, - MAP_CAST_TY ~MAP_MID_TY); + MAP_CAST_TY ~MAP_MID_TY); } return NULL; } @@ -515,7 +521,7 @@ mt_atomic_TY_await_COND_set_MS(void) __vatomic_init(&g_shared, MAP_CAST_TY MAP_MID_TY); pthread_t t[MAX_THREADS]; for (vsize_t i = 0; i < MAX_THREADS; i++) - pthread_create(&t[i], 0, mt_atomic_TY_await_COND_set_MS_run, (void*)i); + pthread_create(&t[i], 0, mt_atomic_TY_await_COND_set_MS_run, (void *)i); for (vsize_t i = 0; i < MAX_THREADS; i++) pthread_join(t[i], 0); TT cur = __vatomic_read(&g_shared); diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index fc76a9e5..3a48e000 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -2,6 +2,13 @@ # SPDX-License-Identifier: MIT target_compile_definitions(vatomic INTERFACE _GNU_SOURCE) +# All C code is C99 compliant expect for the dispatch macro. +set(TEST_C_WARN_OPTS -Wall -Wextra -Werror -Wpedantic) + +# When a test uses dispatch macro with c99, we require C_EXTENSIONS and then we +# do not use -Wpedantic. +set(TEST_C_EXTENSIONS_WARN_OPTS -Wall -Wextra -Werror) + if(CMAKE_SYSTEM_PROCESSOR MATCHES riscv) # 8- and 16-bit atomics are taken from the platform's libatomic library. link_libraries(atomic) diff --git a/test/atomics/CMakeLists.txt b/test/atomics/CMakeLists.txt index 02402284..f3e233b4 100644 --- a/test/atomics/CMakeLists.txt +++ b/test/atomics/CMakeLists.txt @@ -15,6 +15,7 @@ set(VATOMIC_INC "$<$:-I$>") add_executable(vatomic_pause pause_test.c) target_link_libraries(vatomic_pause vatomic) +target_compile_options(vatomic_pause PRIVATE ${TEST_C_WARN_OPTS}) v_add_bin_test(NAME vatomic-pause COMMAND vatomic_pause) # ############################################################################## @@ -54,6 +55,7 @@ endforeach(CONFIG) add_executable(vatomic_compile_c vatomic_empty.c) target_link_libraries(vatomic_compile_c vatomic) +target_compile_options(vatomic_compile_c PRIVATE ${TEST_C_WARN_OPTS}) v_add_bin_test(NAME vatomic-compile-c COMMAND vatomic_compile_c) # ############################################################################## @@ -171,14 +173,14 @@ add_custom_target(expand ALL # test vatomic dispatcher # ############################################################################## add_executable(dispatcher_test dispatcher_test.c) -target_compile_options(dispatcher_test PUBLIC ${TEST_OPTS}) +target_compile_options(dispatcher_test PRIVATE ${TEST_C_EXTENSIONS_WARN_OPTS}) target_link_libraries(dispatcher_test vatomic) v_add_bin_test(NAME dispatcher_test COMMAND dispatcher_test) # ############################################################################## # test freestanding # ############################################################################## add_executable(freestanding_test freestanding_test.c) -target_compile_options(freestanding_test PUBLIC ${TEST_OPTS} -nostdinc) +target_compile_options(freestanding_test PUBLIC ${TEST_C_WARN_OPTS} -nostdinc) configure_file(include/vfreestanding.h.tpl include/vfreestanding.h) target_include_directories(freestanding_test PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/include) diff --git a/test/atomics_basic/CMakeLists.txt b/test/atomics_basic/CMakeLists.txt index a8486d41..0ccf1326 100644 --- a/test/atomics_basic/CMakeLists.txt +++ b/test/atomics_basic/CMakeLists.txt @@ -122,6 +122,12 @@ foreach(TC_VARIANT ${TC_VARIANTS}) configure_file(vatomic_basic.c.in ${TC}.c) add_executable(${TC} ${TC}.c) target_link_libraries(${TC} vatomic pthread) + if(${TC_VARIANT} STREQUAL dispatch) + target_compile_options( + ${TC} PRIVATE ${TEST_C_EXTENSIONS_WARN_OPTS}) + else() + target_compile_options(${TC} PRIVATE ${TEST_C_WARN_OPTS}) + endif() v_add_bin_test(NAME ${TC} COMMAND ${TC}) endforeach() diff --git a/test/atomics_basic/vatomic_basic.c.in b/test/atomics_basic/vatomic_basic.c.in index d558ed68..bd766c63 100644 --- a/test/atomics_basic/vatomic_basic.c.in +++ b/test/atomics_basic/vatomic_basic.c.in @@ -47,18 +47,18 @@ typedef struct { * operation expected behavior ******************************************************************************/ #define OP_cmpxchg(a, b, c) (a == b) ? TC(c, a) : TC(a, a) -#define OP_or(a, b, _) ({(void) _; TC(a | b, a);}) -#define OP_xor(a, b, _) ({(void) _; TC(a ^ b, a);}) -#define OP_and(a, b, _) ({(void) _; TC(a & b, a);}) -#define OP_add(a, b, _) ({(void) _; TC(a + b, a);}) -#define OP_sub(a, b, _) ({(void) _; TC(a - b, a);}) -#define OP_max(a, b, _) ({(void) _; (a > b) ? TC(a, a) : TC(b, a);}) -#define OP_xchg(a, b, _) ({(void) _; TC(b, a);}) -#define OP_init(a, b, _) ({(void) _; (void) b, TC(b, a);}) -#define OP_write(a, b, _) ({(void) _; (void) b, TC(b, a);}) -#define OP_inc(a, _1, _2) ({(void)_1; (void)_2; TC(a + 1, a);}) -#define OP_dec(a, _1, _2) ({(void)_1; (void)_2; TC(a - 1, a);}) -#define OP_read(a, _1, _2) ({(void)_1; (void)_2; TC(a, a);}) +#define OP_or(a, b, _) ((void) _, TC(a | b, a)) +#define OP_xor(a, b, _) ((void) _, TC(a ^ b, a)) +#define OP_and(a, b, _) ((void) _, TC(a & b, a)) +#define OP_add(a, b, _) ((void) _, TC(a + b, a)) +#define OP_sub(a, b, _) ((void) _, TC(a - b, a)) +#define OP_max(a, b, _) ((void) _, (a > b) ? TC(a, a) : TC(b, a)) +#define OP_xchg(a, b, _) ((void) _, TC(b, a)) +#define OP_init(a, b, _) ((void) _, (void) b, TC(b, a)) +#define OP_write(a, b, _) ((void) _, (void) b, TC(b, a)) +#define OP_inc(a, _1, _2) ((void)_1, (void)_2, TC(a + 1, a)) +#define OP_dec(a, _1, _2) ((void)_1, (void)_2, TC(a - 1, a)) +#define OP_read(a, _1, _2) ((void)_1, (void)_2, TC(a, a)) /******************************************************************************* * basic test @@ -107,7 +107,7 @@ test(T init, T arg1, T arg2) T values[N]; void -values_init() +values_init(void) { vuint64_t last = 1; vuint64_t next; diff --git a/test/atomics_gen/CMakeLists.txt b/test/atomics_gen/CMakeLists.txt index 2ce74b45..2d3f337c 100644 --- a/test/atomics_gen/CMakeLists.txt +++ b/test/atomics_gen/CMakeLists.txt @@ -5,10 +5,8 @@ set(V_TEST_LABELS "CROSS") file(GLOB TESTS *test*.c) foreach(test IN ITEMS ${TESTS}) get_filename_component(TEST ${test} NAME_WE) - # add the executable add_executable(${TEST} ${test}) - # link libs target_link_libraries(${TEST} vatomic pthread) - # add test + target_compile_options(${TEST} PRIVATE ${TEST_C_WARN_OPTS}) v_add_bin_test(NAME ${TEST} COMMAND ${TEST}) endforeach() diff --git a/test/atomics_gen/mt_test_await_ptr.c b/test/atomics_gen/mt_test_await_ptr.c index ece12e2c..cd760d01 100644 --- a/test/atomics_gen/mt_test_await_ptr.c +++ b/test/atomics_gen/mt_test_await_ptr.c @@ -20,10 +20,10 @@ static inline void * mt_atomic_ptr_await_eq_run(void *args) { vsize_t tid = (vsize_t)(vuintptr_t)args; - (void)vatomicptr_await_eq(&g_shared, - (void *)(vuintptr_t)(VUINTPTR_MAX + (void *)tid)); + (void)vatomicptr_await_eq( + &g_shared, (void *)(vuintptr_t)(VUINTPTR_MAX + (vuintptr_t)tid)); vatomicptr_write(&g_shared, - (void *)(vuintptr_t)(VUINTPTR_MAX + (void *)tid + 1U)); + (void *)(vuintptr_t)(VUINTPTR_MAX + (vuintptr_t)tid + 1U)); return NULL; } static inline void @@ -46,8 +46,8 @@ static inline void * mt_atomic_ptr_await_eq_set_run(void *args) { vsize_t tid = (vsize_t)(vuintptr_t)args; - void *await_val = (void *)(vuintptr_t)(VUINTPTR_MAX + (void *)tid); - void *new_val = (void *)(vuintptr_t)((VUINTPTR_MAX + (void *)tid + 1)); + void *await_val = (void *)(vuintptr_t)(VUINTPTR_MAX + (vuintptr_t)tid); + void *new_val = (void *)(vuintptr_t)((VUINTPTR_MAX + (vuintptr_t)tid + 1)); (void)vatomicptr_await_eq_set(&g_shared, await_val, new_val); return NULL; } diff --git a/test/sanity/CMakeLists.txt b/test/sanity/CMakeLists.txt index 84ed3b96..2aeb9c7f 100644 --- a/test/sanity/CMakeLists.txt +++ b/test/sanity/CMakeLists.txt @@ -4,10 +4,8 @@ file(GLOB TESTS *.c) foreach(TST_FILE IN ITEMS ${TESTS}) get_filename_component(TEST ${TST_FILE} NAME_WE) - add_executable(${TEST} ${TST_FILE}) - + target_compile_options(${TEST} PRIVATE ${TEST_C_WARN_OPTS}) target_link_libraries(${TEST} vatomic pthread) - v_add_bin_test(NAME ${TEST} COMMAND ${TEST}) endforeach()