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

    <tr>
        <th>Summary</th>
        <td>
            [C] (1024 > 2048) evaluating as true
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

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

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

<pre>
    * Compiler Optimizations > O0 effect the outcome.  O0 compiler option works just fine.
* Works on gcc regardless of optimizations

I was toying with a custom memory allocator as I had an idea to implement lzcnt when I ran into a strange phenomenon where a part of my program should not have been ran when indeed it was.
At first I thought this was a bug in my program so I debugged a bit until I reached an if statement which absolutely should evaluate as false but instead was evaluating as true.

Attached on line 80, you'll find the if in question.  It reads as follows:

if(blksize > 2048)

blksize is a uint64_t which had the value of 1024.  Given this, clearly the statement is false, yet the "return directMap(blksize);" which followed was being executed and shouldn't have been.


Examples:
# clang -Wall -O3 -fomit-frame-pointer -march=native -o alloc.o -c alloc.c
# cc -o test test.c alloc.o
# ./test
1024 > 2048
You should never get here!


With gcc this does not happen and works as expected:

# gcc -Wall -O3 -fomit-frame-pointer -march=native -o alloc.o -c alloc.c
# gcc -o test test.c alloc.o
# ./test
1024 > 2048

test.c in the above cases is just a simple: 'alloc(512);'

You'll notice if you're so inclined to check the return value you can a usable pointer instead of that "You should never get here!" so it is indeed working.

# clang -v
FreeBSD clang version 13.0.0 (git@github.com:llvm/llvm-project.git llvmorg-13.0.0-0-gd7b669b3a303)
Target: x86_64-unknown-freebsd13.1
Thread model: posix
InstalledDir: /usr/bin

# uname -a
FreeBSD nas.myhome 13.1-RELEASE FreeBSD 13.1-RELEASE releng/13.1-n250148-fc952ac2212 GENERIC amd64

Not sure what other information I can provide, but please let me know if any questions arise!

[alloc.txt](https://github.com/llvm/llvm-project/files/9843814/alloc.txt)

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytVk1v2zgQ_TXyhZAhS7IjH3xIE6cIsNsCbYGip4KixhIbStSSVBz31-8bSU6ctFhggQIJY5PD-XjvzTClrU67KL0WN7bttSEnPvZBt_qnDNp2XkTZXnxMBB0OpIIIDQk7BGVbWgreV-dbtmd7cbTuwYsfgw_ioDtaRsltlFyz_6_jCUxqpYSjWrrKkMfOYbz7HHG-Ma734ii9CPaku1ocdWiEFAq-bStaaq07CWmMVTJYJ2B4LxpZCdkJXZHENaHb3lBLXRDmp8J6bKiDlWOTDudS-IAvNYkeJyiq4xIacoSjXrrA2bUn0TtbO9kK39jBVKKzAZEeSZQEf-xtdKy7iqgSOnDWc-XXjIMDGvfAzg51wxhqP9YlRTnUuPUqgoVlRTio4QoW8DZ0QRtOm6RqaCrwgMxlmGo7NloBmdJbMwQyp3Oa9CjNACOG5iCNR75DQDwfCDBxBrMFo8s4u-GZsDn5MEUEKgZsiiKJ0htxskOUXhnDDFejJJAOyvhnIM8UQhn3gbOt_BjagqOjj7LrS9_6EKVFaR68_kmjyNIkL6J0e2lzPtaM1QDGNvn3c7nMNIfmCohpWiVpjsjv9SOoYIw5VWVIOiDCli-A6RmPsRiaVB2lqaMwuE5U2kHqf8v-JUHOK3sHkzn4VBJNIJbE-NETKaDP7FQzAR1QuhDKK2indf8kWaEX2KQZcoYiRfwV0hbxx0zEB9vqEB8gD4p7CxjQbnErnWqi7LYDfQgQ26kVllbEav6oLnwqtgjgZ1yWZxP7YrKM0js-m3YYzRdaxq1vdnhuAHpEDjWg416J0tWvpX3lbuVWH-VeWfJz2_Q9-GGQplHBKnzqAThVbxTCSbGDP4tE_SegmNb5uu5GAcnSIrqSHpXqeQRivowjCJVBYFdjIKhqvUrPirq6dPjt3FhASquxraZewzzCYNCd4i6seLKhLdXDGHdW7dQHMEcKHbeLl6XBXJtROnc9GiU0MrDc_5NPSJ0jjr0yzzXmC0pfvuVo1uvjtHPniN59vp134dbzs7DKlskyQdSi1iHKE6zNUC7xegAaYx5bIM5_YszBHxDDEgaCN6yr4-lynMR1dVVuNtsyk1mSPc-KL9Ihc4b4qdh83-Tx0D109thBJ0Slr3B91ueXhoeSaG1Fhu176_XT_NIAH9BD1a12E1t3g3dYS929LXjooD8Ry9cFd5j57anBI8LVruJP-7_215_34nz-atORoa6G-3G3S9fJKi_ig9quU6nSdJWK9_sP-0_3N0K21Sa_zOADusgPUMSRebSQALN7sK4d30-8EywA4PiIV5AnHA99aBDCFAYMIz-Gh8Ulu9Pz0EYnOu1_6eX1u6k7wlOI1rfgrwmhH-dVeoefCx4nAt_wiK8HzQMuvdsWeVascnx68XimcEG71WazydN1UawW1S6rttlWLoIOhnbI4QaxWTyvWzHd_uYBWwzO7P53ktr7YcxyXazzfNHsyqsiSddZfpVW5bZYbze0yvN0q7b5usgoyxZGlmQ8J4fcFnqXJqANv0mR5PlqWSm5VVQckkyVSiVbaJ5aqc2SAy-h6oXbjTngpfc4NNoH_3Iovdd1R3T2Lwf89-B2vRwMklZSKb0Yc96NCf8Lh0MfaQ">