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

    <tr>
        <th>Summary</th>
        <td>
            clang++ miscompile
        </td>
    </tr>

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

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

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

<pre>
    I have attached a reduced C++ test-case - it is a very small C++ program that produces different output depending on whether or not an assert() is included in the code.  This assert compares two uint32_t variables for "less than", so at least in theory, it shouldn't be possible for the presence or absence of the assert to change the output.  I get the problem at optimization levels O2 and higher, but not at O1.

I can't find any undefined behavior in the code.  When I run it with UBSan it does not find any undefined behavior either.

To reproduce the miscompilation in the attached code, define the macro CAUSE_BAD_COMPILE when compiling.  The assert I mentioned above will be part of the code if this macro is defined, and otherwise will not.  When executing correctly, main() should return the value 1, and thus the exit status available on the command line from echo $? should be 1 after running the program.

I am reproducing the miscompile on a Macbook Air M2 with MacOS Sequioa 15.5, using clang++ version 16.0.0 on the Terminal command line.  The installed XCode is version 16.1.  Though I am using the Terminal instead of XCode, I was able to reproduce it by directly using XCode too.  I was not able to reproduce the problem when I pasted the code into godbolt.org, even with "ARM 64-BIT CLANG - > armv8-a clang 16.0.0".  FYI I also have gcc/g++ 14.2 installed on this MacBook via homebrew, which I mention just in case there might be some conflict.

Please let me know if there is any information you need.

[test.cpp](https://github.com/user-attachments/files/21946848/test.cpp)

Copy/pasting from Terminal command line, here is more detailed information and a demonstration that defining CAUSE_BAD_COMPILE causes a miscompile.

% clang ++ --version
Apple clang version 16.0.0 (clang-1600.0.26.4)
Target: arm64-apple-darwin24.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

% which clang++
/usr/bin/clang++

% g++ --version
g++ (Homebrew GCC 14.2.0_1) 14.2.0
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

% which g++
/opt/homebrew/bin/g++

% clang++ -O2 -std=c++11 test.cpp -o test ; ./test; echo $?
1

% clang++ -DCAUSE_BAD_COMPILE -O2 -std=c++11 test.cpp -o test ; ./test; echo $?
0

% clang++ -DCAUSE_BAD_COMPILE -O1 -std=c++11 test.cpp -o test ; ./test; echo $?
1


</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysVlGP4jgS_jXmpUSUmMDAAw-B7uwiTU-Puhnd7tPISSrEu46dsx0Y7tefyg7dzMzeSiftE8EuV3311VdlC-fkSSNu2XLHlg8zMfrO2G032roTSolZZZrr9gCdOCMI70XdYQMCLDZjjQ3sGd8xvgOPzs9r4RDmID1IBwLOaK_geqHUm9lgzcmKHnwnPP0hJw4a2bZoUXswox9GDw0OqBupT2A0XDr0HVowFrTxIDQI59B6xteMbyiU1LUaG2xAavAdQm0aTACOHcEItlCbfhAWHfiLgVFqv-BfPZyFlaJS6KA1FhjnCp0jcJpxzvgenAHhQaFwfnJu7JU2pAfXmVE1mvEPHiqEwTgnK4XBFaEYLDrUNRJwUU2fbdiaQHkDdSf0CcNizD0BOMAJ_eTCVAp7wmAGL3v5H-Gl0aDwjMrBMwehG-jkqUNLqKrRR448PGcJSwuWFgeoRQTZSt2A0FcYdYOt1NhAhZ04S2N_YO5fHWo4gB01JXqRvoMvu1cR_jUGXQjyd-5QUskmBEcDFqdihyi9dFQPqWI2U-w3dREIyiZ6jSdEbQ3siy-vj193xcPX_fPT58PHR9KGhuhL6lOo-Ru7B-hRUwASbGXOCBepVCiVsP5WCgoGkr6lm8JIN4VuCAUxbCibi3STC238jST8hvXoSam1sRZrr4I8eiH1pM8oE7DoRxsTPQs1ImQ3574bXVjHb6QqL_zoQJyFVCRN6oCIs-_JWhElrTU9YN0ZYDxni_IWpELIQLQeLdVOE6xJRtR1b4IQ_VtBbiZvJQkBBTyJujLmTyikhSceJfAk6udXeMV_j9IIyJbJklIYXcheCX2amvyM1lFds1WSJuktgSPaXmqhvstkqpjUzgulsIHf9qEe7t5JFqzMeOogYI8Rv_NJDlA0VNTggYAd4CIcBA79vQKlh-oKjYzVmrzFuN6Y0H90MPTRT4fvu_ISu2QQzmNzJybtDZxMUxnlE2NPhAXPqCOJjPPi5QlW-Xx3OML-Y_HpF5gDWzyCsP15PReRyok8xnkCUP5-oMyVM3EOn-qa8fJGd5Yn_I7BQLd0VK0dVfAsBXSmx8rihaBcOll3780Bf4xxtoXhTTonMZy6MNOc6Skp3SpZ-0k-n2kaIij00CP8qc0ltg8dpHmrryB1a2wfm_tqRtCIzXSaLXd0VST1MLDlA-PrzvvBsUXBeEk5Sd-NVVKbnvFydGjncSoQWMd42UqF9MuzTb5a52vGyzd3fBND7M1wZbykslBlQ6_8pfiIjRvs3liEBr2QKtwj7wmQtYAGe6Odt3EtXF9hRlCEn8dSLUaHdAW-t9Utf76cCjxVbz6flM7SohgGhdP2D03E-Dqsz7NVmiZpwldJHjM-CntCzxYFCWiVzwU5mTfCXqTmebJMUjLqLLVHbxpUZDoYJ7_RLLjJ5kFaWme8JBCyDnkS07-FK0EQv-XeaD8V4oFuIDPQtVMejVF1J-S7_QO2YlQ--Vb7216oJ1lXUr9TEcV4NzzC-p0lL3_YjOdOf8HebY3x9a-T3uGX_T70R5J-zWgYx-9JJDbInPH1nrZ4ynMoLSK8mtZfhEUozaibwESYJ7pOApX04nDQkqmbTNliBw7jeHBmtHV8BtRmuMa7QTcyMBoHXtTcp2eWFhdhrdD-Sh5o5IRJQWefHl_2vxafjsXu8PFw_J1eEeXh-Onx9RXK5xco4HPxcjzsv3wsXuDzl5fPz6-PyY_EfkeqGTzj5fsomPj9idv7UT5_5jB3vmGLhzouZRncOg7mJnwDYU-mVqTvu5uJpUX2P1w__Nw3_0S49P8Jl_1T2c2a7aLZLDZihtvsw3K5yT5k63zWbTHP6gWu8rRN281ys6jadrMUuBGrqmn4Qszklqd8ma75IuX5iudJu2jzxSJf1FW7RsxXLE-xF1IlSp17ulBm0rkRt9lyma74TIkKlQvvd86njDk95e2WDsyr8eRYnirpvHt34aVXuL0n6H1UzUartn8zl8nJ9DMfrPkDaxJWAEUTYMJ13vL_BgAA__8sfwa8">