From 2ceea767ad2286b907525c50feb77ec70e71bef3 Mon Sep 17 00:00:00 2001 From: bptato Date: Tue, 22 Jul 2025 20:22:18 +0200 Subject: [PATCH 1/2] Disable strict aliasing on clang Workaround for #24596. I also took the liberty to disable it on all targets with GCC, since their documentation claims that it is also enabled on -Os. --- config/nim.cfg | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/config/nim.cfg b/config/nim.cfg index 7c99581396df9..d67eedaeb5860 100644 --- a/config/nim.cfg +++ b/config/nim.cfg @@ -257,10 +257,12 @@ clang.objc.options.linker = "-lobjc -lgnustep-base" gcc.options.linker %= "-L $WIND_BASE/target/lib/usr/lib/ppc/PPC32/common -mrtp -fno-strict-aliasing -D_C99 -D_HAS_C9X -std=c99 -fasm -Wall -Wno-write-strings" @end +# seqs_v2 violates strict aliasing. +gcc.options.always %= "-fno-strict-aliasing" # -fno-math-errno is default in OSX, iOS, BSD, Musl, Libm, LLVM, Clang, ICC. # See https://itnext.io/why-standard-c-math-functions-are-slow-d10d02554e33 # and https://gcc.gnu.org/onlinedocs/gcc-12.2.0/gcc/Optimize-Options.html#Optimize-Options -gcc.options.speed = "-O3 -fno-strict-aliasing -fno-ident -fno-math-errno" +gcc.options.speed = "-O3 -fno-ident -fno-math-errno" gcc.options.size = "-Os -fno-ident" @if windows: gcc.options.debug = "-g3 -Og -gdwarf-3" @@ -281,7 +283,7 @@ llvm_gcc.options.size = "-Os" # Configuration for the LLVM CLang compiler: clang.options.debug = "-g" clang.cpp.options.debug = "-g" -clang.options.always = "-w -ferror-limit=3" +clang.options.always = "-w -ferror-limit=3 -fno-strict-aliasing" clang.options.speed = "-O3" clang.options.size = "-Os" From 95baddb9c46908aba8277274de22fcfe8417065f Mon Sep 17 00:00:00 2001 From: bptato Date: Thu, 18 Sep 2025 16:50:23 +0200 Subject: [PATCH 2/2] Fix gcc option being overridden --- config/nim.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/nim.cfg b/config/nim.cfg index d67eedaeb5860..038c3c9bec96f 100644 --- a/config/nim.cfg +++ b/config/nim.cfg @@ -258,7 +258,7 @@ clang.objc.options.linker = "-lobjc -lgnustep-base" @end # seqs_v2 violates strict aliasing. -gcc.options.always %= "-fno-strict-aliasing" +gcc.options.always %= "${gcc.options.always} -fno-strict-aliasing" # -fno-math-errno is default in OSX, iOS, BSD, Musl, Libm, LLVM, Clang, ICC. # See https://itnext.io/why-standard-c-math-functions-are-slow-d10d02554e33 # and https://gcc.gnu.org/onlinedocs/gcc-12.2.0/gcc/Optimize-Options.html#Optimize-Options