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>
24 lines
485 B
C
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;
|
|
}
|
|
}
|