<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/55638>55638</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            std::is_constant_evaluated returns true in C++2b in manifestly runtime functions
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          jzmaddock
      </td>
    </tr>
</table>

<pre>
    Consider the code:

```

#include <type_traits>
#include <cmath>
#include <iostream>

template <class Integer>
constexpr Integer bitwise_sqrt(const Integer& x)
{
   // TODO put real code here, doesn't need it for the bug case though
   return 0;
}
template <class Integer>
constexpr Integer fast_sqrt(const Integer& x)
{
   return static_cast<Integer>(std::sqrt(static_cast<double>(x)));
}
template <class Integer>
constexpr Integer get_sqrt(const Integer& x)
{
  if(std::is_constant_evaluated())
    return bitwise_sqrt(x);
   return fast_sqrt(x);
}


int main()
{
  unsigned i;
  std::cin >> i;
  i = get_sqrt(i);
  std::cout << i << std::endl;
}
```

Input comes from `std::cin`, I assume we can all agree that in this context `get_sqrt()` can not be a constant context.  However, `std::is_constant_evaluated()` is returning true.

Note that:

1) The issue only occurs when compiling with -std=c++2b.
2) The issue does not occur prior to clang-14.
3) The issue does not occur if we use `__builtin_is_constant_evaluated()` directly.
4) Reproduced on Ubuntu-22 with `ubuntu clang version 14.0.0-1ubuntu1`

This is a reduced test case from Boost.Multiprecision BTW.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytVUuP4zYM_jXOhUjgyHlMDj5skl3sHNoFiil6DGSbcbRVpFSiJpn--lKyk3EGs1NsUUCwJfP18SNFV7Z5KTfWeNWgAzog1LbBrPiU5dssvz4Xeb-GH0WhTK1Dg5AVG3o54Y6cVOSz4vN7GvVR0uEHMmU9OZTHV3F6Eh5PWlJnrqX38GgIW3Q3vZqRE15O7iqBStFZedz5vxxl4iEp3MzEAi6ZWPUxlutuAwCZ-MILnr5tv8EpEDAYnZiAAzrMxAYai95kYklgEBtQBHvbEVaFFmrpkQ82tIebT4cUnIE8K9bXgNv_ntdeevrJpHoAniSpescQieMNIokHT00sdfGpd3yv2thQaew0U4Ru_S_ptPiT2aj9EK_yu2QmDe3wWerA4RtW6CFeGbhS8KYpLsM0XrWGFF_ezXT4VIbgKJXpo77FG_hKtSZ2yiDSDX-tDER2is93csUft0Nu1D3SV3vLTcp080pGaXOTomn0O-Dfu8WPJrZ7bY_oYe_sEVg-RBnVufsfgcsajghnHhDSgNQaZOswNr0k4GzooDz74SpeKDoZJBFzWOTJzliCCkHCtXpXkwnAV3vG59gBmzsQH5WavXLUrnzKtEAu4GSY3q-WOohvJtqUreGJL6_itBCs0S9g6zo4D-cDmkjISeno8qzoAOOEZltnYs1LVH0Mce8ljoiUYfIEJ6fihLDAd8K04-mstyo-tFL7yHHgccLZ7XZVUJqU2f0LC41yWJN-6UPMYojf8ORsE2ruQWvg9yoYCmMhuozYKKQvHTpg4r1iNUaZT_LxtBNO33TLUywyL8mcd54J-e6m6Ze6Z215kk9-CYz5xIhU8rl--mMyasqiWRUrOSJFGsuPy9uX1KeCxu7aXJmPh6M0as9xuWaOUSpuy30wNXEsPwpOlweik4_u01RvOd9QTbikfND6-foaMz3fmTU-pkp43szni-JhdCjFg8yL_bTe102BuJwW86Ws8vmsWuxr2czkSMsKtS-zOcMSBs9dMXmfzbcjVYpciHwuxHRZrHIxWYpF3VSr2ayaF7OlnGazHHl26EnEMbGuHbkyQeJ_iWehVp78q5DvXpwlmMKxfxn4V-PK738fZdPY-s9RCl4m8P8AJ_xrPA">