commit 79e7b719a362959fd172bbe7f7d9abe3e2f6f0cc (tree)
parent 57114044db85717bea7204f2693d6c8a62111635
Author: Matthew Lugg <mlugg@mlugg.co.uk>
Date: Mon, 9 Mar 2026 12:02:58 +0000
bootstrap: disable strict aliasing
The C backend has always gleefully violated C's strict aliasing rules,
and I just got bitten by it for the first time when bootstrapping on
macOS. This probably hasn't been helping with some of the weird
bootstrap-related CI failures we've seen. So, update `bootstrap.c` and
`CMakeLists.txt` to tell GCC/Clang to disable type-based alias analysis.
No change is needed to the MSVC flags because MSVC does not, and never
has, implemented TBAA.
Diffstat:
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
@@ -608,8 +608,8 @@ if(MSVC)
set(ZIG2_LINK_FLAGS "/STACK:16777216 /FORCE:MULTIPLE")
else()
set(ZIG_WASM2C_COMPILE_FLAGS "-std=c99 -O2")
- set(ZIG1_COMPILE_FLAGS "-std=c99 -Os")
- set(ZIG2_COMPILE_FLAGS "-std=c99 -O0 -fno-sanitize=undefined -fno-stack-protector")
+ set(ZIG1_COMPILE_FLAGS "-std=c99 -Os -fno-strict-aliasing")
+ set(ZIG2_COMPILE_FLAGS "-std=c99 -O0 -fno-sanitize=undefined -fno-stack-protector -fno-strict-aliasing")
# Must match the condition in build.zig.
if(ZIG_HOST_TARGET_ARCH MATCHES "^(arm|thumb)(eb)?$" OR ZIG_HOST_TARGET_ARCH MATCHES "^powerpc(64)?(le)?$")
set(ZIG1_COMPILE_FLAGS "${ZIG1_COMPILE_FLAGS} -ffunction-sections -fdata-sections")
diff --git a/bootstrap.c b/bootstrap.c
@@ -136,7 +136,7 @@ int main(int argc, char **argv) {
}
{
const char *child_argv[] = {
- cc, "-o", "zig1", "zig1.c", "stage1/wasi.c", "-std=c99", "-Os", "-lm", NULL,
+ cc, "-o", "zig1", "zig1.c", "stage1/wasi.c", "-std=c99", "-Os", "-fno-strict-aliasing", "-lm", NULL,
};
print_and_run(child_argv);
}
@@ -213,6 +213,7 @@ int main(int argc, char **argv) {
#if defined(__GNUC__)
"-pthread",
#endif
+ "-fno-strict-aliasing",
workaround_gcc_sra_miscomp ? "-fno-tree-sra" : NULL,
NULL,
};