Crafter.Build/tests/WasmExceptions/fixture/jump.c
Jorijn van der Graaf 2a05b8e6fb
test(wasm): the cases the review found
WasmBuildRefusals checks that -flto in compileFlags and in linkFlags,
-fno-exceptions and a shared library are each refused with their
cause, and that none of them leaves bin/ or build/ behind. With the
check disabled, each of them failed on a missing std.cppm instead,
after the build directories had been made.

WasiSysrootWithoutExceptions also takes its sysroot through missing
and without the target's directory, each with a message of its own,
checks that a refused build leaves nothing behind, and that a static
library passes without libunwind.

WasmExceptions catches an exception thrown inside libc++.a (stoi).
vector::at throws from a header compiled into the fixture, so the
fixture also passed against the libc++ built without exceptions. Its C
source uses setjmp, which the old C flags did not compile. An
exception that escapes main has to end the run as wasmtime's uncaught
exception, where any nonzero exit used to pass, a trap or a timeout
included.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 06:10:41 +01:00

24 lines
485 B
C

// SPDX-License-Identifier: LGPL-3.0-only
// SPDX-FileCopyrightText: Copyright (C) 2026 Catcrafts®
#include <setjmp.h>
#include <stdint.h>
static jmp_buf target;
static void JumpBack(int32_t value) {
longjmp(target, value);
}
// setjmp's value may only be compared or switched on, never stored.
int32_t JumpRoundTrip(void) {
switch (setjmp(target)) {
case 0:
JumpBack(7);
return 0;
case 7:
return 7;
default:
return -1;
}
}