Skip to content

Conversation

zacklj89
Copy link
Contributor

@zacklj89 zacklj89 commented Sep 4, 2025

After #154694, MSVC cl started emitting build warnings for 64 bit architectures

cl : Command line warning D9002 : ignoring unknown option '/hotpatch'

This documentation is being updated for clarity, but the /hotpatch compiler option only affects x86 compilation.

@zacklj89 zacklj89 marked this pull request as ready for review September 4, 2025 14:03
@zacklj89 zacklj89 requested a review from zmodem September 4, 2025 14:03
@llvmbot
Copy link
Member

llvmbot commented Sep 4, 2025

@llvm/pr-subscribers-compiler-rt-sanitizer

Author: Zack Johnson (zacklj89)

Changes

After #154694, MSVC cl started emitting build warnings for 64 bit architectures

cl : Command line warning D9002 : ignoring unknown option '/hotpatch'

This documentation is being updated for clarity, but the /hotpatch compiler option only affects x86 compilation.


Full diff: https://github.com/llvm/llvm-project/pull/156887.diff

1 Files Affected:

  • (modified) compiler-rt/lib/asan/CMakeLists.txt (+2-1)
diff --git a/compiler-rt/lib/asan/CMakeLists.txt b/compiler-rt/lib/asan/CMakeLists.txt
index 7d07ec765c005..459581fd0cff3 100644
--- a/compiler-rt/lib/asan/CMakeLists.txt
+++ b/compiler-rt/lib/asan/CMakeLists.txt
@@ -108,7 +108,8 @@ set(ASAN_CFLAGS ${SANITIZER_COMMON_CFLAGS})
 
 # Win/ASan relies on the runtime functions being hotpatchable. See
 # https://github.com/llvm/llvm-project/pull/149444
-if(MSVC)
+# MSVC cl 64 bit architectures treat /hotpatch as an unknown option
+if(CLANG_CL OR (MSVC AND "i386" IN_LIST ASAN_SUPPORTED_ARCH))
   list(APPEND ASAN_CFLAGS /hotpatch)
 endif()
 

@@ -108,7 +108,8 @@ set(ASAN_CFLAGS ${SANITIZER_COMMON_CFLAGS})

# Win/ASan relies on the runtime functions being hotpatchable. See
# https://github.com/llvm/llvm-project/pull/149444
if(MSVC)
# MSVC cl 64 bit architectures treat /hotpatch as an unknown option
if(CLANG_CL OR (MSVC AND "i386" IN_LIST ASAN_SUPPORTED_ARCH))
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately, it doesn't seem like the CLANG_CL check actually works; at least not in the "runtimes build" (-DLLVM_ENABLE_RUNTIMES=compiler-rt). For example, I'm getting warnings about the /experimental: flags (line 124) when building with clang-cl.

It would be great if someone fixed that of course :-)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh no 😃 thanks for pointing that out!

I'll look into what it would take to get that online. In the meantime, I'll mark this back as a draft.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CLANG_CL is also used a few lines down to silence some other warnings related to MSVC. I'm wondering if I have something locally that is precluding me from seeing the same issues you are.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Those are the ones I meant:

# Silence warnings in system headers with MSVC.
if(NOT CLANG_CL)
append_list_if(COMPILER_RT_HAS_EXTERNAL_FLAG "/experimental:external;/external:W0;/external:anglebrackets" ASAN_CFLAGS)
endif()

I don't think they work, i.e. the /experimental:external flags get passed also when using clang-cl, and cause warnings, e.g. from https://logs.chromium.org/logs/chromium/buildbucket/cr-buildbucket/8704672462688910449/+/u/package_clang/stdout

 [112/349] Building CXX object compiler-rt\lib\asan\CMakeFiles\RTAsan_dynamic.x86_64.dir\asan_debugging.cpp.obj
 clang-cl: warning: argument unused during compilation: '/experimental:external' [-Wunused-command-line-argument]
 clang-cl: warning: argument unused during compilation: '/external:anglebrackets' [-Wunused-command-line-argument]

I think maybe the CLANG_CL check used to work when building with -DLLVM_ENABLE_PROJECTS=compiler-rt but not in the new "runtimes build" using -DLLVM_ENABLE_RUNTIMES=compiler-rt but that's just me speculating.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would help if I could read 🤣
Ok, thanks for the clue into where to check!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Related to this, I left a comment on this thread about "runtime build" issues: #58568

@zacklj89 zacklj89 marked this pull request as draft September 4, 2025 15:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants