<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/94175>94175</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[compiler-rt]: hwasan fails to build on x32 with LLVM 17, works fine with LLVM 18 and later
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
glaubitz
</td>
</tr>
</table>
<pre>
For Debian unstable, I need to build LLVM 17 for x32 (x86_64 with 32-bit pointers).
However, this fails due to the newly introduced `hwasan` which has no switch to be disabled:
```
FAILED: compiler-rt/lib/hwasan/CMakeFiles/RTHwasan.x86_64.dir/hwasan_linux.cpp.o
/<<PKGBUILDDIR>>/build-llvm/bin/clang++ --target=x86_64-linux-gnux32 -DHWASAN_WITH_INTERCEPTORS=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/.. -fstack-protector-strong -Wformat -Werror=format-security -fcf-protection -Wno-unused-command-line-argument -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -fno-semantic-interposition -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 -ffunction-sections -fdata-sections -fdebug-prefix-map=/<<PKGBUILDDIR>>/build-llvm/runtimes/runtimes-bins=build-llvm/runtimes/runtimes-bins -fdebug-prefix-map=/<<PKGBUILDDIR>>/= -no-canonical-prefixes -ffile-prefix-map=/<<PKGBUILDDIR>>/build-llvm/runtimes/runtimes-bins=build-llvm/runtimes/runtimes-bins -ffile-prefix-map=/<<PKGBUILDDIR>>/= -no-canonical-prefixes -Wall -Wno-unused-parameter -O3 -DNDEBUG -std=c++17 -fPIC -fno-builtin -fno-exceptions -fomit-frame-pointer -funwind-tables -fno-stack-protector -fno-sanitize=safe-stack -fvisibility=hidden -fno-lto -Wthread-safety -Wthread-safety-reference -Wthread-safety-beta -O3 -gline-tables-only -Wno-gnu -Wno-variadic-macros -Wno-c99-extensions -nostdinc++ -fno-rtti -ffreestanding -Wno-format -MD -MT compiler-rt/lib/hwasan/CMakeFiles/RTHwasan.x86_64.dir/hwasan_linux.cpp.o -MF compiler-rt/lib/hwasan/CMakeFiles/RTHwasan.x86_64.dir/hwasan_linux.cpp.o.d -o compiler-rt/lib/hwasan/CMakeFiles/RTHwasan.x86_64.dir/hwasan_linux.cpp.o -c /<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/hwasan_linux.cpp
In file included from /<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/hwasan_linux.cpp:32:
/<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/hwasan.h:71:16: error: constexpr variable 'kAddressTagMask' must be initialized by a constant expression
71 | constexpr uptr kAddressTagMask = kTagMask << kAddressTagShift;
| ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/hwasan.h:71:43: note: shift count 57 >= width of type 'uptr' (aka 'unsigned int') (32 bits)
71 | constexpr uptr kAddressTagMask = kTagMask << kAddressTagShift;
| ^
/<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/hwasan.h:93:36: warning: shift count >= width of type [-Wshift-count-overflow]
93 | return InTaggableRegion(p) ? ((p >> kAddressTagShift) & kTagMask) : 0;
| ^ ~~~~~~~~~~~~~~~~
/<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/hwasan.h:108:53: warning: shift count >= width of type [-Wshift-count-overflow]
108 | ? ((p & ~kAddressTagMask) | ((uptr)tag << kAddressTagShift))
| ^ ~~~~~~~~~~~~~~~~
In file included from /<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/hwasan_linux.cpp:37:
In file included from /<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/hwasan_thread.h:16:
/<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/hwasan_allocator.h:69:47: warning: shift count >= width of type [-Wshift-count-overflow]
69 | static const uptr kMaxAllowedMallocSize = 1UL << 40; // 1T
| ^ ~~
/<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/hwasan_allocator.h:72:33: warning: implicit conversion from 'unsigned long long' to 'const uptr' (aka 'const unsigned int') changes value from 18446744073709551615 to 4294967295 [-Wconstant-conversion]
72 | static const uptr kSpaceBeg = ~0ULL;
| ~~~~~~~~~ ^~~~~
/<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/hwasan_allocator.h:78:34: warning: implicit conversion from 'unsigned long long' to 'const uptr' (aka 'const unsigned int') changes value from 4398046511104 to 0 [-Wconstant-conversion]
78 | static const uptr kSpaceSize = 0x40000000000ULL; // 4T.
| ~~~~~~~~~~ ^~~~~~~~~~~~~~~~
In file included from /<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/hwasan_linux.cpp:37:
In file included from /<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/hwasan_thread.h:16:
In file included from /<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/hwasan_allocator.h:20:
In file included from /<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/../lsan/lsan_common.h:17:
In file included from /<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/../sanitizer_common/sanitizer_allocator.h:74:
/<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/../sanitizer_common/sanitizer_allocator_primary64.h:639:17: error: static assertion failed due to requirement 'kRegionSize >= SizeClassMap<3, 4, 8, 17, 128, 16>::kMaxSize'
639 | static_assert(kRegionSize >= SizeClassMap::kMaxSize);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/../sanitizer_common/sanitizer_allocator_combined.h:26:35: note: in instantiation of template class '__sanitizer::SizeClassAllocator64<__hwasan::AP64>' requested here
26 | using AllocatorCache = typename PrimaryAllocator::AllocatorCache;
| ^
/<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/hwasan_allocator.h:93:9: note: in instantiation of template class '__sanitizer::CombinedAllocator<__sanitizer::SizeClassAllocator64<__hwasan::AP64>>' requested here
93 | typedef Allocator::AllocatorCache AllocatorCache;
| ^
/<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/../sanitizer_common/sanitizer_allocator_primary64.h:639:29: note: expression evaluates to '0 >= 131072'
639 | static_assert(kRegionSize >= SizeClassMap::kMaxSize);
| ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/hwasan_linux.cpp:37:
/<<PKGBUILDDIR>>/compiler-rt/lib/hwasan/hwasan_thread.h:22:22: error: no template named 'CompactRingBuffer' in namespace '__sanitizer'
22 | typedef __sanitizer::CompactRingBuffer<uptr> StackAllocationsRingBuffer;
| ~~~~~~~~~~~~~^
5 warnings and 3 errors generated.
```
Trying to build LLVM 18 on x32 works fine though, so the underlying issue must have been fixed.
I have searched the git log and git blame, but couldn't find any obvious fix. I'm hoping that someone can point me to the set of commits that fix this issue from the tip of their head, so I don't have to bisect LLVM for hours.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWVtT47iX_zTmRaWUIztx8sBDSMh0aqHpgvRS-5RSrGNbiy1lJJlAP_Rn3zqSc6NppmcGZrbqn6KMLUvn8jtXWdxaWSqA82hwEQ1mZ7x1lTbnZc3btXTfztZaPJ_PtSEzWEuuSKus4-saIjYlC6IABHGarFtZC3J19d_XpJ-RQhvylDASsdHTaLgapmQrXUUSRtfSkY2WyoGxERv3ongWxZNw_aS38AgGCbtKWlJwWVsiWkAGrgKiYFs_E6mc0aLNQZBoGFdbbrmKhjHZVjKvSMUtUZrYrXR55SUDIqRFiUWUTI75RcO4-_OP88ni6nIWJROS62YjazDUuIjNa7mO2Lzjw-bTa_4Ac1mDjdj8dvnJj_eCmj0hzX7uqpaqferlm01Pk44jm0fJNEqmX_7rt4uvi6vZbHEbJZf4x-YeQlrXjw0-SOSV11yVEbuI2AWh1HFTgouSWWBGPX1aqhahprNP95O7yefV_WL5abX4vLy8nV5-Wd7c3kXJrE_obDVfXF2ububzu8vl6mKxxPFhii-uJre_Xfq3dzdfb6eXOLa6W86mq-nN57vl5PNydT2Z3t7cHV7Mb26vJz8OXy2uF4fRxZvqvglyr0doYR3PH-jGaAe504ZaZ7QqCb0vtGm4I_QejNEmSmZhgFrIWyPdM6FFXuwWSq0IvVeatqq1IGium4YrgegB5aZsG1BIS3AH1MkGPFY3t8vF_H86QKJkxggtviymhBZKUwsNV07m1PvxRlsZuBSP0sq1rKV7plIhA0srKQSoI1mP-OzHWlW23AgQlD9yWfOOhoItofe8rnHqkzP8RJENN7wBB4bQ-62RDhAgqUpL6H3OraO_txxXNtJaqUpaSKgFlUo6yWv5DQxOlM2mlrl0tOB17Sqj27LC9foRDAgawogKKHhbu8BeaXjKYeOoe96AH1L0URrX8poKp1EcATU4oK-8sW1ZgnUU6RspcH2QmuZaPYKxwVyNtDVwgeNSCVCOd3bMHRe04c9roK2y7WajjQNBaCEkL5W2TuaW5rpGZkXRKm9_dAz8b3Eed_zkGdZtSTcGCvlEG76JktmvR6lpFVrSHt3StVQ2Sma_NO8v8I-SGaFK05wrrWTO624tILFC1vAv6vIn2b-lSuf1r3r7TULo7PPs8uLrb4RaJ6Jklock2c-OwxTFdlKFh-CzndF1gx6PBGlXjAgtWrWVSlBf3GwX6KcZqBvkGELfIEpmlhcQJp0Ef5TMdmGPC2qnCb13lQEuKC7BDHX6TA0UYEDl8MObNTgedC59ygryUa3q5wBQqdpw88iN5ELmtOG50TYM5uMxhScHygbdMUaEVPmuqqCAxjmJ5jMA1nGFYRcW7xLt9YzQ6-VH1EV6Pf8Asj1BqP4QcXPy14vaS3qhJ1gognFDpMrrVoAghdHNe3JJJgk7dD5_k26vipJJ1o-SSX-IrVJXwbBnUtbB08YQ74brGkjEsoeJEAasXfLymtuHiGWkaa3DpuxQiARZPxMeKHDlCFIBi_4aZCaEZH0SZdMjJu3GGfKCOsGE8nB4QDWP59xVsnBRcrGnSoin-uIXDS7J9zd-7w1kmiB-SjvA_xaFJLlulSODjHiSM7KVwlVEF8TX3IhlqD-iGbERf-B-RPk-XmB_HLEsYmN8mTCylg5b7X8Gy2hw-Y74jBGaxDvalhslVfkSotfxGVzQez-L-lm-2yhqvY0Gs73A46QzvgHXGkUWasnLEh33Fkr0PTbaeBCTOQKJj4Hb5Y84eKyHe7zCsgmJXwfoB-96R8T68ShKJoPkIyDrx6OgwjEibEi-_xDl4zDPzwmeOna8_KkbsfHBP18JyF_6_RzXfyLBZvsE-0HcQk8QTDx8t2y-4nWtc-608ZSHY0xH2YeE2zD4hMVOPg_Jp0s81_xpUtd6C-Lai3Mnv4FPP_2vVzuXSTGUiIeRzUl_-XpUfQgoGRbP5GVA7fZN5Gjb0ln6kIlr3K7iBTO10_juoPhp9u7Gf8zhecVVCZY88rqFwKI_StNhlqZxlmTxeDDoD_sDJJ-ycToeZmw8CCbZFdSjrdWxRTLWBdsrNrnb8BwuoPR2-B5_vbo6pLKfReg-7NAa75fWXpoD81uS_j8yR5qMR3E6HPT7_ThFuvGvwT_6A_j3cRA_pfH-F0yxD4V02fuDdubUNnvj_CelyQ9iduqYLP4wfr0ejoV7_LfKddPoruB_HKae7W63azqmJ0MvQjN9h8L0J5iuNkY23DwP01C9kvEOj8O2pAsubi0Y_wmp4LIGsfuqbOD3VhrwnwBxuxJavy7yfKnD-2nNrb3mmyiZJhGbkhQvI7z0M39l4WHo10yiZIJFDVdi1ujCc5gcV8BVkChioz_keUpv_HpP-daG5b3azD9jmlw3a6kghCLDUEwGx9scqYgM6VGGT3vYTECzqbkDkqPuaI_Vak874LBHZrLjNEyjZLpadUL6SZMvOHiJGR3tC9aBIBUY2OPGhh631kpVkj2pKc-rkHGxrVG8AfIleNh-SsfgZMVpZXy3DdCL4PJbofE7QDjtLHOk0_Tv4fwm1N02CxEVUJA3kSQ_A_Y9t5d_N8GwEyMcvlUQwJ6AO7BdbxHvwrmf9OOM_TOp4CTef54W_o2S_57FnbHd5ZDqlT64PwavQCNMdbPhubuVqrxoiwJ8nyeVn2Cxy3oZI3srMXbiuK_F0QvKydQ3kskluXM8f-icWWpljyf99PPT9xe2C_MGuzbXEq4ESYK-lpSgwHAHovfqYWa4Ls0zZrgX57MjopU_nt1q82BJIRUQV-m2rLCK2XDW2ioBpvbLpbUthO92FX8EsgZAx3k68A7eFN5a4CavQHgqpXSk1qUXHe_XNW_8yfG69VvKWqiIZQ5lEISrZ6LXj1K3KNRTjywiljWk0huvRMUdsboBrYDkXIVjZNLsT4ctOEyBGNDS2TC_kE_hLDno4P0b5zq58emyAmlIBVx0mi-I0EEirwsCJy3kLiBXaEMq3RrbOxPniRgnY34G5_2snyXDNE1GZ9V5kuScpbw_zCEejeO0YPkwS-NisBajeJAlZ_KcxSyNhzFj_TRORr14xNejPh_DIGdFzniUxtBwWffq-rHpaVOeednPx2k_G5zVfA219Wf1jCnYBsUixqLB7Myc4xq6bksbpXEtrbMHKk662h_yH4fawJ93h_jqztv3zrJzEumq3cE-onTkNEevRt7EGHvmrDX1eeXcxmKg-G1KKV3Vrnu5bjC4wzmSF3Vj9P9CjiHv9bARmwc9H8_Z_wUAAP__GAphdg">