<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/63270>63270</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
compiler-rt/lib/tsan/rtl/CMakeFiles/clang_rt.tsan_ios_dynamic.dir/tsan_debugging.cpp.o is incorrectly compiled with x86-specific options
</td>
</tr>
<tr>
<th>Labels</th>
<td>
cmake,
compiler-rt:tsan
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
MaskRay
</td>
</tr>
</table>
<pre>
On an x86_64-apple-* macOS machine, `COMPILER_RT_HAS_MSSE4_2_FLAG` is true (the availability is detected like `clang --target=x86_64-apple-darwinXXX -arch x86_64 -Werror -msse4.2 -c src.cxx`).
In the following build,
```
/opt/homebrew/bin/cmake -GNinja -Sllvm -Bout/runtimes -DCMAKE_BUILD_TYPE=Release -DCLANG_ENABLE_ARCMT=off -DCLANG_ENABLE_STATIC_ANALYZER=off -DLLVM_ENABLE_PROJECTS='clang;lld' -DCOMPILER_RT_ENABLE_IOS=on -DLLVM_ENABLE_RUNTIMES=compiler-rt -DLLVM_TARGETS_TO_BUILD='X86;AArch64' -DLLVM_ENABLE_UNWIND_TABLES=OFF
ninja -C out/runtimes runtimes
ninja -C out/runtimes/runtimes/runtimes-bins tsan
```
`compiler-rt/lib/tsan/rtl/CMakeFiles/clang_rt.tsan_ios_dynamic.dir/tsan_debugging.cpp.o` (and other `clang_rt.tsan_ios_dynamic.dir` files due to -DCOMPILER_RT_ENABLE_IOS=on) will have a warning like the following
```
% clang -c --target=x86_64-apple-darwin -arch arm64 -msse4.2 a.c
clang: warning: argument unused during compilation: '-msse4.2' [-Wunused-command-line-argument]
```
This command compiles a.c using the arm64-apple-darwin triple and -msse4.2 should lead to an error instead of a warning.
The full command line will look like the following if Clang issues an error (https://logs.chromium.org/logs/chromium/buildbucket/cr-buildbucket/8778547096422852257/+/u/package_clang/stdout)
```
FAILED: compiler-rt/lib/tsan/rtl/CMakeFiles/clang_rt.tsan_ios_dynamic.dir/tsan_debugging.cpp.o
/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm-build/Release+Asserts/./bin/clang++ --target=x86_64-apple-darwin -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Dclang_rt_tsan_ios_dynamic_EXPORTS -I/Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm/compiler-rt/lib/tsan/rtl/../.. -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -Wall -Wno-unused-parameter -O3 -DNDEBUG -std=c++17 -arch arm64 -isysroot /Volumes/Work/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.1.sdk -fPIC -stdlib=libc++ -miphoneos-version-min=9.0 -isysroot /Volumes/Work/s/w/ir/cache/osx_sdk/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.2.sdk -fno-lto -fPIC -fno-builtin -fno-exceptions -funwind-tables -fno-stack-protector -fno-sanitize=safe-stack -fvisibility=hidden -Wthread-safety -Wthread-safety-reference -Wthread-safety-beta -O3 -g -Wno-gnu -Wno-variadic-macros -Wno-c99-extensions -nostdinc++ -fPIE -fno-rtti -msse4.2 -Wframe-larger-than=530 -Wglobal-constructors -MD -MT compiler-rt/lib/tsan/rtl/CMakeFiles/clang_rt.tsan_ios_dynamic.dir/tsan_debugging.cpp.o -MF compiler-rt/lib/tsan/rtl/CMakeFiles/clang_rt.tsan_ios_dynamic.dir/tsan_debugging.cpp.o.d -o compiler-rt/lib/tsan/rtl/CMakeFiles/clang_rt.tsan_ios_dynamic.dir/tsan_debugging.cpp.o -c /Volumes/Work/s/w/ir/cache/builder/src/third_party/llvm/compiler-rt/lib/tsan/rtl/tsan_debugging.cpp
clang++: error: unsupported option '-msse4.2' for target 'x86_64-apple-darwin'
```
It seems tsan's CMake should be fixed to recognize x86_64 options and not pass them to clang_rt.tsan_ios_dynamic.dir builds (`clang --target=x86_64-apple-darwinXXX -arch arm64`).
For host files like `./compiler-rt/lib/tsan/rtl/CMakeFiles/clang_rt.tsan_osx_dynamic.dir/tsan_flags.cpp.o`, the Clang command line looks like `-arch arm64 -arch x86_64 -arch x86_64h`.
It is benign to pass `-msse4.2` but ideally `-Xarch_x86_64 -msse4.2` should be used instead.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8WFtv6zby_zTMC0HBpuLbQx5syz5__xvHge3TpPsi0OLIYkORWpLKpZ9-MZKcOGma0wW6BwgMcTgczu03M4zwXh0NwBUZzMgguRB1KKy7Wgv_sBUvFwcrX642hgpDn8fDdHjJRFVpYIRPaSmyzQ5_C2WA8Dklw958s75dXS-26Xaf_t90l653u8VlytPl9fQbGfao8jS4Gijh41AAFY9CaXFQWoUX3JMQIAsgqVYPgPIyLcyRMhaEO0IgcfJOCynckzL39_eUCZcVnYqU3YFz1lFWeg-XEacso95lUfb8TIY9wicR6SWkN21_V4aiKrnV2j4pc6SHWmlJ-LxjGva6v3bJl7YKhC8LW8LBwRPhy4MyhC-zUjwAZd9ulPldULbT-rGkbGZr5Ha1CaoET1kyX09_WaSz76vrJN3_drsgcbIFDcIDbl5Pb76li5vp7HqRTrfz9Z7Eic3zj1u7_XS_mqfTm-n1b_9abF-Zrq9_XZ94breb_1_M9zsSJ4SPGk-SeKbRthHKOwtVd2K1QWZrPgjafr_Zr9YL3MtsWSkNjrlwYtpPt98W-12637RGtdfdj4cknk2nLiuGl-2F5yK_39ytbpJ0jwuUu1kuW_-a1ntz-sFvp48vuT7_ZAdlPA1emM8jeiKe2Ub4UqsD4cvmFF-6oAlfztfiAZZKN9Ibf6YuRMiSKutT-WJEqbJIKtedTCUc6uNRmWOUVVVkEQGEj4WR1IYC3GuG_6WcYY_meCGVNdBgvw4b4RP6pLSmhXgEKuiTcAYTugHTuxz_i9Qe0A5v2Q8g1-FNuBLhdoKZiLJWUpdr05MG-CncsS7BBFqb2oOksnaoW-t0EZQ1yEX46CQOk4YMZuyuPcAyW5bCSKaVAXaSRgbJF0HdF8rT7lx3E3hUk9YeL29KENrw3rjgVKWB4qFX23xhay2pBiExDsLQtsYo4wPSbP7m8Oi9DkDzWutXPVD_Nkza2odPgkNVTudNHJT3NSp8uozwcRFC5UmMdQiT1B59lBXOlqouI-uOHQ3zs6NifcKCdqizB8DEzhx7TxiPRuPB5ag3GV5yPh5wPhg10meEL2vCl5XIHsQR0jaqfOmDbGA3-dTzdDldXS8SDOb_HlC0u5Pw5a9W1y3u76x7QDUJX2J1bg5nIivg5ApAincZCi2Uk2klXHhBFfVjybryv-yKMuGzqffgAsqL3qp964wZ4bMfYiVJ090-mafzzc1uP73Zp-vpfLvZvW0sN9v19M_k69V6dUY9OSj96KB0cX-72e53lK3-QUcg848CGEXND2X5o_Kq7eNMGUxxzwolJZhTNyZxIkUAhiX5jFabYy2cBMnOZwFm4ImyO6E1sj4HJyi7M5Z1paASTpQQwFF29-RUAOYDVhNP2V0mfGD_rgWeLJVHnLNcgZZMGRWU0OoPcMioykqrTAWWC61D4Wx9LPC8fQQHkvknFbKCSchFrUN7vbHwnEEVWHipoCEZ9qhcqIVmMuDEcSdBQwD2yY6vj0fwgaF8pySeb7VmmTWP4LzCxos6Y5FBujISTGhqIyoWhGSleDkAq42vq8o6nJRYLpU4GuuDyjzLrG4uaz33qcc2MWXJTbKYff9GmQ8Su3qbyP3R-7qu_It31oa_Dy_rn1Mvcft-biVEoqoQ5tYEMA2AEngEbasm8W61CLl1JdLXOEveR1VH-sC5S355Y-rHUT_y8oGy_HY1b0zAzIwTrQ7ZCZGlqgprwHrWeZaVypA4mUS9n2qXukU1NrsfWHZi6w8j3tlmLNPY8FsjcYmQDVhPcNEmorLGU5bX5kkZyYI4YH9r9n0Q2QOrnMWBGlOiIQqEwB9A4sSLHFqmd-AlcfIK21A4EJIhZ3j5uGYOcnBgMvjTzgGCaNPs2Obg0dTtx6NwSkiVsVJkzvqWmE0mDJ4DGN9ag6kslXkNZX67WrTquxDU2VB_l2NOM42117FQCAzwIO5RdnfU9iA0AssHV6MDPGXrhLL1_md0JbZe_oRrIkmZ_SnmZP9kg_07feXPanSN_qzt4oTRdZEpPa-ItsHFx1Eyt462bRp3PunThI--GCVXgXqAsntH8JGnjV9Pc-EBaK6eoZkNHWT2aNQfcHqP2g6oOP0ZG2glvMeRr0TuLyPSvkU9Dn7_9WO4KeKfvHeX1tHC-tA9LE4v7ejvxOWLXMIS-Uku5VrgiNq9fgifN7NuO96-m4hxGH7T5l0feve2P1sUjdqn8ChPD2DU0aBXGxejnFMGDHv0UAeqJAitX5qtexSVnuSeMb7FtHmpdCN-d9OFvIrlJJ6IC7jqD8fDwWQ0GvcviqvhZDLojy-5nAx7h_Ew70vBB_ySH2KIe6M8vlBXvMfj3rDP-xMe9_rRiA-Hh0FPCjiMskl_QC57UAqlI4QJTvMXzQPgahjzUe9CiwNo3_yfhvPmnw2Ec8LnuDqLWzxtI8bJILlwV91Ie_TksqeVD_5NeFBBw9VPqB_KU2Uy6xxkQb-cKpakTyo0oWS-gkzlKjsh5aJ2-ur9S-eoQlEfosyWb2Wksa1y9nfIUPf2tUT4svHXfwIAAP__WlE5dw">