<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">