<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/103479>103479</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
call to __attribute_((__error__(...))) not eliminated with -fprofile-instr-generate after commit 56af0e913ce7
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
nathanchance
</td>
</tr>
</table>
<pre>
After commit 56af0e913ce7ec29690cc7295d75fc5573153bbf, there is a build error in the Linux kernel because a call to a function declared with `__attribute__((__error__(...)))` (the basis of the kernel's compile time assertion macro `BUILD_BUG_ON()`, which is optimization sensitive) is no longer eliminated when `-fprofile-instr-generate` (the kernel's `CONFIG_GCOV` option) is enabled for the kernel's User Mode Linux target, which was originally reported [here](https://lore.kernel.org/oe-kbuild-all/202408131601.Aj9JmK7K-lkp@intel.com/), which shows some of the kernel's code, which can be further explored [here](https://elixir.bootlin.com/linux/v6.11-rc3/source/lib/test_bitmap.c#L1278).
`cvise` spits out:
```c
long const_test_bit_addr, __attribute__test_bitmap_const_eval_initvar;
static long exp2[] = {};
_Bool __attribute__test_bitmap_const_eval___trans_tmp_1;
void generic___change_bit() {}
void ___set_bit(long *);
void ___change_bit();
void bitmap_complement(long *dst, long *src) { *dst = ~*src; }
void bitmap_set(int nbits) {
int start = nbits && 1;
if (nbits && nbits && start)
;
}
void bitmap_clear(long *map) {
int nbits = 0, start = 0;
if (__builtin_constant_p(0) && start == 0 && __builtin_constant_p(nbits) &&
nbits == 0)
;
}
void bitmap_replace(long *new) {}
void __attribute__test_bitmap_const_eval() {
long bitmap[1];
long bitopvar = 0, var = 0, p = const_test_bit_addr, mask = 0, val = p;
bitmap_clear(bitmap);
__attribute__test_bitmap_const_eval___trans_tmp_1 = val & mask;
if (!(7 && (long)bitmap != 0 && (long)bitmap && *bitmap
? __attribute__test_bitmap_const_eval___trans_tmp_1
: 0))
bitmap_set(2);
1 && (long)&bitopvar != 0 && (long)&bitopvar &&__builtin_constant_p(bitopvar)
? generic___change_bit()
: ___change_bit;
if (var)
var = __attribute__test_bitmap_const_eval_initvar;
if (__attribute__test_bitmap_const_eval_initvar)
;
__attribute__((__noreturn__)) void __compiletime_assert_154()
__attribute__((__error__("BUILD_BUG_ON failed: "
"!__builtin_constant_p(~var)")));
if (!__builtin_constant_p(~var))
__compiletime_assert_154();
bitmap_complement(&var, &var);
__builtin_constant_p(var) ?: ___set_bit(&var);
bitmap_replace(&exp2[0]);
}
```
@ 5534d1d834c25ec6a3755a44b46e2489b7d0ccf9:
```
$ clang --target=x86_64-linux-gnu -O2 -c -o /dev/null test_bitmap.i
$ clang --target=x86_64-linux-gnu -O2 -c -o /dev/null test_bitmap.i -fprofile-instr-generate
```
@ 56af0e913ce7ec29690cc7295d75fc5573153bbf:
```
$ clang --target=x86_64-linux-gnu -O2 -c -o /dev/null test_bitmap.i
$ clang --target=x86_64-linux-gnu -O2 -c -o /dev/null test_bitmap.i -fprofile-instr-generate
test_bitmap.i:40:5: error: call to '__compiletime_assert_154' declared with 'error' attribute: BUILD_BUG_ON failed: !__builtin_constant_p(~var)
__compiletime_assert_154();
^
1 error generated.
```
Bisect log:
```
# bad: [4706251a3186c34da0ee8fd894f7e6b095da8fdc] Clear release notes for 18.x
# good: [603c286334b07f568d39f6706c848f576914f323] Bump the trunk major version to 17
git bisect start 'llvmorg-18-init' 'llvmorg-17-init'
# bad: [37cf4fc6cef9f2f50e15622a1bdecc89ea6ddd23] [RISCV] Consolidate legality checking for strided load/store [nfc]
git bisect bad 37cf4fc6cef9f2f50e15622a1bdecc89ea6ddd23
# good: [a031f72187ce495b9faa4ccf99b1e901a3872f4b] [libc] Correctly pass the compile options to the internal GPU compilation
git bisect good a031f72187ce495b9faa4ccf99b1e901a3872f4b
# good: [3c8ead2662ac4a223467007c340c9f9a4b2b38af] [clang][dataflow] Eliminate code duplication in Environment::createValueUnlessSelfReferential().
git bisect good 3c8ead2662ac4a223467007c340c9f9a4b2b38af
# good: [8bddb13c2470b95651955c61913627b31e9c99d6] [lldb] Change parameter type of StructuredData::ParseJSON
git bisect good 8bddb13c2470b95651955c61913627b31e9c99d6
# good: [d42ba4c2a65ad782b870a26ca86c45c30ed30fa5] [bazel] update for ba38640b9901d239e32e12c6569f7364d00af922
git bisect good d42ba4c2a65ad782b870a26ca86c45c30ed30fa5
# good: [9d53db21d7bd67ac5e13495df12a048d3062691b] ValueTracking: Add new tests for computeKnownFPClass copysign handling
git bisect good 9d53db21d7bd67ac5e13495df12a048d3062691b
# good: [25462d14b17beb0be10deeea9f9c6c2739051135] [bazel][mlir] update build for mem2reg f88f8fd0bca34dc8e5571cb828b1a159a50fd504
git bisect good 25462d14b17beb0be10deeea9f9c6c2739051135
# good: [bf199576f93191976da2aa6299fe490e14360f82] [libc++][PSTL][NFC] Rename to `pstl/` to `__pstl/`
git bisect good bf199576f93191976da2aa6299fe490e14360f82
# good: [9391177cbcb0e5fb051f7a867683d7a0817f1648] [Assignment Tracking] Check getTypeSizeInBits result for scalable vector types
git bisect good 9391177cbcb0e5fb051f7a867683d7a0817f1648
# good: [047a41446d2bc8d2950ee8cf8e5b6446ebefc9b1] [polly] Drop redundant use of -instnamer in polly MemAccess lit tests
git bisect good 047a41446d2bc8d2950ee8cf8e5b6446ebefc9b1
# good: [5ff493df29cc1eee162ec8308b3a5b4706d300bf] [ARM] Update and regenerate pred-selectop test. NFC
git bisect good 5ff493df29cc1eee162ec8308b3a5b4706d300bf
# good: [5534d1d834c25ec6a3755a44b46e2489b7d0ccf9] [CSE] Precommit an AMDGPU test case for D149348
git bisect good 5534d1d834c25ec6a3755a44b46e2489b7d0ccf9
# bad: [d321f3aa64b4eaedd790dafe974cfdc0517cb22b] [ARM] Enable shouldFoldSelectWithIdentityConstant for MVE
git bisect bad d321f3aa64b4eaedd790dafe974cfdc0517cb22b
# bad: [56af0e913ce7ec29690cc7295d75fc5573153bbf] [EarlyCSE] Do not CSE convergent calls in different basic blocks
git bisect bad 56af0e913ce7ec29690cc7295d75fc5573153bbf
# first bad commit: [56af0e913ce7ec29690cc7295d75fc5573153bbf] [EarlyCSE] Do not CSE convergent calls in different basic blocks
```
cc @jayfoad
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcWVuP27a2_jWaF8IGLyIlPsyDPRMX2W2aoNP0PAq8LHnY0JJB0ZNMH_ZvPyAlj-2MpvEuDnCAHTiJJC6u9X3rQi5KahjctgO4Lfi64Pc36hAf-3DbqfioOpP-wo3u7fPtqo0QkOl3OxcRF6rFIAkzUIGhUkhsTEUltxVvDecVI5xp3Rb0DsVHCIDcgBTSB-ctghD6gFyXRtAvrjt8Q18gdOCRBqMOAyCFjPIexR4p1B46E13fIQvGqwAWfXXxERUCN42KMTh9iNA0Ba0LWjdNVp5vl8tlQeX0ExgVtE4GtRrcgPo2Wx_tFrQaErO984Ci2wFSwwAhW90pE_pkbf35_S_3zfrzT83HX7OxpDTx-_rozGPi1--j27m_VJ43QDe46J6goDINdj3yfbeFgMC7netUTEweoUu6F-0-9K3zsHDdEMNiCx0EFeEM9hnSQuC7j79u3v_U_HT38Y8kkyz33WQJOqU9WNT24XuOnwcI6ENvj26PKmwhnkh8VQPqg9u6Tnn_jALs-5BwFnydgljw-4LWjzHuh4KtCrop6Mb3AZajiWUftgXd9LD4kgO9UN4XdEMxLXFNGBGYLFd_yn_tfq5-Xvgv-6LErovgl6bfZWXyhGR47L8OaOh3MBsqCydRozqkAbWHkDINwbd9wvS3oMG7by4sdd9H77rJvk8uKejmSSwJWQTDCroZ-kMwkAd1QTcRhthoF3dqvzQFZb8QWqVMWBb4vsCr6V-BzZMbcvCGvYsD6g8xmb6UGX9mvE-pgUzfDbE52miUtSGxvEjzMwTNKA9Pyjeuc_FJhYKtR31DVNGZnHHJIXQsblSwe1RU66K6f5Fs1n3vr7LRNDGobmjibt-Ql_lPvbMo56szTdOkFWMLafZYI0dzJ9mmaQaIk0QGWNBViv2FxhlVlwIv-HZ7DzvozrXZIef08XYIZkIyDWY__HsaYWt0CXDSPKTCqF0XUaddHI5cshxC6fkQVRh1ZQlUUFFQgU6-Qci1qX4vhi9usorEbZJH6GXyLCjjQYUzpju1vwT2gjfjyuvTCSZ-haxpUqVG142BVl1s9gWtcVZ6BjFNzxqOT9-YeHJVFjvRQidUE7CrOQfYe5WK8IV1B1_fSK0fZvFZVk7ms9JRruBrkpYL9mqw3z-pcHLpxc0-X75RvDs1fDmf5_PN_szEd5GdkJyl-39enNlGtkVFRvAq7gUlBa2rYzQn3xZUjppRGj8P94zA9Hw1AT6L9PinYJt_sKzMqFmN2fKSMBf1SS88hchrwAUVpwC-SetSKg2-keFHqYsEHtm-vQpeSq6-W92-D8732o_Z9k82glOhXz93tjTRbLfV9QHiIXTpSQoRmupwaqZSL9WMvVRDeHnhjB90bwWl5x0XapXzYJPzCkonFemKkjcC9e-JCqWnLnCmDH40-8wXP6D1onxuayqoyBrv0PHqHM0bIEa5lFtT0pw2zjktr9bLgopp88e5C5KvF9qXRuSiOykx4pyVltialYZyMEKxinNVlroUQMta6spiY1r5VmMz3dISGa-6LVospmaT3X-rRSPKRe63FtvugBYfKVoYtOhRQTcWngq66Q6p_z9rt9yFlf87tejN3vsH_rn2BPTf7Z9LCGxV4oKteErXXMrp4niUK2j1dgVV3x_vaDUqoBV6WSeStjcXhR9V8n9cxgV_N16R6cR6ZG6Xf5MbazeAicj32x9FniGtRux8XVZYUE4UI7UwrLQKA9StrWXZViA0ltyqurUmNfF3qVNAATyoAVDXRxjyWY_Uy28n3du-PyoXmBlaC8ZKjauWi9oy2YoKC1OXdcsrIUnZMsqS8vVht8_HrRgO3Re0U3_2AT1BGNKZNvaIVKOJrYtIj1SnBpFW3j_t-rBdkHqRtpIUuvOn1fHpnANYZdqyNcJAK1vacgyEC0oV0RaMqSUoYa0dMRZ8_dv7h7s_sjP6bui9syoC8rBV3sVnZB7BfHHdNrtliMFZsMj3yqYTXewDJBVdm7z5io1WFl0NZs7bCjPSVpTUlYFSci1bpcq0UkpNQGKiWF3RttQTE-_0GNU-BDDRP6O9GoYcguMbifF0PyT3p8fpzBw65dFPnz5PMvmVwysqCRS6Gs4cF2ZqUJYKQZUpFaWsFBXGlWElNrKVqtRUs1q1E5e85CSn8rVVUbW-_5pG3h1feOSDO7KHvXdmfEviOvSue3Kh7_I-yVYFW5kAKsIfyh_gc-dhGB7At79BCwG66I4t_HKe7tWI5-jW2lpNmKFlhbXkghPJuRFEEiZopRkBaaS04hg6b3MU73Irh_YqqB1ECCg-7_Nri4cYDiYeAth7FdXI7pMKA_zr4eOv8_ivhjCH35ZUq9JQJbiyVU11XWFFhVG1MCU3DINluFV8wq_VX-DT9WGf6ydVi1asFiXWUmJiKZPAKBBqBBeyrZgoLcaqlccO7Hv0VwOYQy8tZ1ZTYittRaUMB8JKyW1LqMJlbRkWVEiSXZ6z4_egcpmn-StrUQdf8941LoepMg4Rfu76r93m051PVWX6_fPgth16VJ31aeosjauRzNGgvBTUklKTSoPGGgi2AKBkK40wtGISc0LY90Eo-HrnXTgLx_iyNFHZwY4G2KK2rtu6tVgbxUprauC8IkbXtNZEES4Vx63luJxndTWwOVa6JVLySrSSEUlkJayiSgkqZQulxEBKJnBb0_NVja7TL1P79PD7L-PVr5u7JPMbdGoHKPcFAu-H6Au6KQSeHjTN6dE8m6sBzaYak4RUldFGY-Ctxpy0lapFJWpmK4VrUrVElPXEZpXfkacVCr3kXK57MF_QFuLvz3t4cH_B-27t4oACDAcfx83HKK-0B_QEJvbjyjC8kXTXYpojhMtKlaQshaXa1JZKnhoI09bAtShLARpaIzWZCO1775_T9X3o9yiAPXRWdREdhrxu5U4vxSe_pc_C6APsVsbAMCDv4lhm8zyuhjLHg7dtKZltqTSGAAARFEzNcK2Z4jp1SZZhrI8bzuq3D-nq81gwqrMowLFLQ_sAdjGAT57fZ8RLlLJvFvXVhmdRX3tWGlHfPbxLV58CTF9TVIdWH-7Tdp5QIpP6upQ996SU7BjxV4ivNTrTbVlGScuUEqUuQYG1lcRWtSCr0rTWYE4qoynVl25-lz8soOGxP3i76b19yM79Hxcf39u0N8fnu6nzzvA__PFutr262voM8quPXSPydyr458nf931qltHdwztk-u4JwjYVdDqdDCnNrWvHFiN_ITJI-958eZ3jicDVIF4ItC4M49wx5P-vbGbPLcagosR_que2V_bG3jIrmVQ3cEsqyngtyqq-eby1pq6YAcUVEFFjxWsmuTSc1y2Xpaxv3O3xcw-lmJBqmSQrXlGiTVVxVRUlhp1yfpnOBcs-bG_cMBzglmBWVvLGKw1-yB8jKU0beh4taNpYbsJtmrTQh-1QlNi7IQ4nNdFFD7fHw-b526W__zSY3Xj-TS4dP9869CL11lfQm0Pwt5dfmbYuPh708euSfzr-t9iH_k8wsaCbzG4o6Gai_3RL_zcAAP__53rnXw">