From abaf75b9c52b5a7f15ede526acbbc6739e2cada0 Mon Sep 17 00:00:00 2001 From: Hans Wennborg Date: Thu, 21 Aug 2025 10:07:03 +0200 Subject: [PATCH 1/2] [asan] Pass -falign-functions=16 when building on Windows Win/ASan relies on the runtime's functions being 16-byte aligned so it can intercept them with hotpatching. This used to be true (but not guaranteed) until #149444. Pass the flag to explicitly request enough alignment. --- compiler-rt/lib/asan/CMakeLists.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/compiler-rt/lib/asan/CMakeLists.txt b/compiler-rt/lib/asan/CMakeLists.txt index d1d229e3e6d40..3850d3ce8a9d7 100644 --- a/compiler-rt/lib/asan/CMakeLists.txt +++ b/compiler-rt/lib/asan/CMakeLists.txt @@ -106,6 +106,14 @@ if(MSVC) endif() set(ASAN_CFLAGS ${SANITIZER_COMMON_CFLAGS}) +# Win/ASan relies on the runtime having 16-byte aligned functions for +# hotpatching. See https://github.com/llvm/llvm-project/pull/149444 +if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + if(CMAKE_CXX_SIMULATE_ID MATCHES "MSVC") + list(APPEND ASAN_CFLAGS /clang:-falign-functions=16) + endif() +endif() + append_list_if(MSVC /Zl ASAN_CFLAGS) set(ASAN_COMMON_DEFINITIONS "") From 0b10da1b6eed6c39120dead66a39b401648fd33f Mon Sep 17 00:00:00 2001 From: Hans Wennborg Date: Fri, 22 Aug 2025 10:24:17 +0200 Subject: [PATCH 2/2] use /hotpatch instead --- compiler-rt/lib/asan/CMakeLists.txt | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/compiler-rt/lib/asan/CMakeLists.txt b/compiler-rt/lib/asan/CMakeLists.txt index 3850d3ce8a9d7..7d07ec765c005 100644 --- a/compiler-rt/lib/asan/CMakeLists.txt +++ b/compiler-rt/lib/asan/CMakeLists.txt @@ -106,12 +106,10 @@ if(MSVC) endif() set(ASAN_CFLAGS ${SANITIZER_COMMON_CFLAGS}) -# Win/ASan relies on the runtime having 16-byte aligned functions for -# hotpatching. See https://github.com/llvm/llvm-project/pull/149444 -if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - if(CMAKE_CXX_SIMULATE_ID MATCHES "MSVC") - list(APPEND ASAN_CFLAGS /clang:-falign-functions=16) - endif() +# Win/ASan relies on the runtime functions being hotpatchable. See +# https://github.com/llvm/llvm-project/pull/149444 +if(MSVC) + list(APPEND ASAN_CFLAGS /hotpatch) endif() append_list_if(MSVC /Zl ASAN_CFLAGS)