mirror of
https://github.com/syoyo/tinygltf.git
synced 2026-06-08 03:03:50 +00:00
Build v3 C tests under clang too; drop GNU VA_ARGS extension
ci.yml now runs the v3 C suites under three Linux toolchains: - v3-c-tests (default cc / GCC, -Wall -Wextra) - v3-c-tests-clang (stock Ubuntu clang) - v3-c-tests-clang21 (clang 21 from apt.llvm.org, matching local dev) The validator helper macros TG3__IDX_BAD / TG3__CHECK_REQ / TG3__CHECK_OPT used the GNU `, ##__VA_ARGS__` extension, which clang flags under -Wpedantic. Every call site already passes at least one variadic argument, so plain __VA_ARGS__ (C11) suffices. Local verification: clang-21 -Wall -Wextra builds tester_v3_c and tester_v3_c_v1port with zero warnings introduced by the v3 changes (only the pre-existing tg3__json_set_value_copy unused-function notice remains, unrelated to this work). All suites pass under gcc 13.3 and clang 21.1 alike, plus the 134-model cross-version verifier. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
77
.github/workflows/ci.yml
vendored
77
.github/workflows/ci.yml
vendored
@@ -332,7 +332,7 @@ jobs:
|
||||
# v3 C runtime: internal security regression tests + ported v1 unit tests.
|
||||
v3-c-tests:
|
||||
runs-on: ubuntu-latest
|
||||
name: v3 C tests (Linux x64)
|
||||
name: v3 C tests (Linux x64, GCC)
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
@@ -340,13 +340,13 @@ jobs:
|
||||
- name: Build tester_v3_c
|
||||
run: |
|
||||
cd tests
|
||||
cc -I../ -std=c11 -g -O0 -DTINYGLTF3_ENABLE_FS \
|
||||
cc -I../ -std=c11 -g -O0 -Wall -Wextra -DTINYGLTF3_ENABLE_FS \
|
||||
-o tester_v3_c tester_v3_c.c ../tiny_gltf_v3.c
|
||||
|
||||
- name: Build tester_v3_c_v1port
|
||||
run: |
|
||||
cd tests
|
||||
cc -I../ -std=c11 -g -O0 -DTINYGLTF3_ENABLE_FS \
|
||||
cc -I../ -std=c11 -g -O0 -Wall -Wextra -DTINYGLTF3_ENABLE_FS \
|
||||
-o tester_v3_c_v1port tester_v3_c_v1port.c ../tiny_gltf_v3.c
|
||||
|
||||
- name: Run tester_v3_c (security regressions)
|
||||
@@ -359,6 +359,77 @@ jobs:
|
||||
cd tests
|
||||
./tester_v3_c_v1port
|
||||
|
||||
# v3 C runtime under stock Ubuntu clang.
|
||||
v3-c-tests-clang:
|
||||
runs-on: ubuntu-latest
|
||||
name: v3 C tests (Linux x64, Clang)
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install clang
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y clang
|
||||
|
||||
- name: Build tester_v3_c
|
||||
run: |
|
||||
cd tests
|
||||
clang -I../ -std=c11 -g -O0 -Wall -Wextra -DTINYGLTF3_ENABLE_FS \
|
||||
-o tester_v3_c tester_v3_c.c ../tiny_gltf_v3.c
|
||||
|
||||
- name: Build tester_v3_c_v1port
|
||||
run: |
|
||||
cd tests
|
||||
clang -I../ -std=c11 -g -O0 -Wall -Wextra -DTINYGLTF3_ENABLE_FS \
|
||||
-o tester_v3_c_v1port tester_v3_c_v1port.c ../tiny_gltf_v3.c
|
||||
|
||||
- name: Run tester_v3_c
|
||||
run: |
|
||||
cd tests
|
||||
./tester_v3_c
|
||||
|
||||
- name: Run tester_v3_c_v1port
|
||||
run: |
|
||||
cd tests
|
||||
./tester_v3_c_v1port
|
||||
|
||||
# v3 C runtime under bleeding-edge clang 21 (matches local dev environment).
|
||||
v3-c-tests-clang21:
|
||||
runs-on: ubuntu-24.04
|
||||
name: v3 C tests (Linux x64, Clang 21)
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install clang 21
|
||||
run: |
|
||||
wget https://apt.llvm.org/llvm.sh
|
||||
chmod +x llvm.sh
|
||||
sudo ./llvm.sh 21
|
||||
|
||||
- name: Build tester_v3_c
|
||||
run: |
|
||||
cd tests
|
||||
clang-21 -I../ -std=c11 -g -O0 -Wall -Wextra -DTINYGLTF3_ENABLE_FS \
|
||||
-o tester_v3_c tester_v3_c.c ../tiny_gltf_v3.c
|
||||
|
||||
- name: Build tester_v3_c_v1port
|
||||
run: |
|
||||
cd tests
|
||||
clang-21 -I../ -std=c11 -g -O0 -Wall -Wextra -DTINYGLTF3_ENABLE_FS \
|
||||
-o tester_v3_c_v1port tester_v3_c_v1port.c ../tiny_gltf_v3.c
|
||||
|
||||
- name: Run tester_v3_c
|
||||
run: |
|
||||
cd tests
|
||||
./tester_v3_c
|
||||
|
||||
- name: Run tester_v3_c_v1port
|
||||
run: |
|
||||
cd tests
|
||||
./tester_v3_c_v1port
|
||||
|
||||
# v3 C runtime under ASan + UBSan for memory-safety + UB checks.
|
||||
v3-c-tests-sanitizers:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
@@ -1617,22 +1617,24 @@ static int tg3__parse_audio_emitter(tg3__parse_ctx *ctx, const tg3json_value *o,
|
||||
static int tg3__validate_indices(tg3__parse_ctx *ctx, const tg3_model *m) {
|
||||
uint32_t i, j;
|
||||
int errs = 0;
|
||||
/* Helper macros — push with format and bump error counter. */
|
||||
/* Helper macros — push with format and bump error counter. Every call
|
||||
* site passes at least one variadic arg, so plain __VA_ARGS__ (C11) is
|
||||
* sufficient and avoids the GNU `, ##__VA_ARGS__` extension. */
|
||||
#define TG3__IDX_BAD(path_str, fmt, ...) do { \
|
||||
if (errs < TG3__IDX_ERR_CAP) { \
|
||||
tg3__error_pushf(ctx->errors, ctx->arena, TG3_SEVERITY_ERROR, \
|
||||
TG3_ERR_INVALID_INDEX, (path_str), fmt, ##__VA_ARGS__); \
|
||||
TG3_ERR_INVALID_INDEX, (path_str), fmt, __VA_ARGS__); \
|
||||
} \
|
||||
++errs; \
|
||||
} while (0)
|
||||
#define TG3__CHECK_REQ(idx, max, path_str, fmt, ...) do { \
|
||||
if ((idx) < 0 || (uint32_t)(idx) >= (max)) { \
|
||||
TG3__IDX_BAD(path_str, fmt, ##__VA_ARGS__); \
|
||||
TG3__IDX_BAD(path_str, fmt, __VA_ARGS__); \
|
||||
} \
|
||||
} while (0)
|
||||
#define TG3__CHECK_OPT(idx, max, path_str, fmt, ...) do { \
|
||||
if ((idx) != -1 && ((idx) < 0 || (uint32_t)(idx) >= (max))) { \
|
||||
TG3__IDX_BAD(path_str, fmt, ##__VA_ARGS__); \
|
||||
TG3__IDX_BAD(path_str, fmt, __VA_ARGS__); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user