<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJylVktzozgQ_jX40hVKQOLHwQc7Ge_Oaea2xy0BMigREiUJO86v324JsJ3J1G7VukgMdPfXr0_dLk192f7VCg3dBcpBqhqO3HYw9DX3ogbpHVSK6wYq0_VSCQveQFakLGVJ_hxNHJgjGC0Io7fmVVQeStFI7Uj5yKUCqYNCZfRRNoPlXhoND1DkpfTwvl6m8HwnOkvfQlNVV7do6qUeBEGejX2Ds1AqhZ9WnKQZHJyEdWSJocSAs5yCBK5cNHCjxfckX50EuF5oj1IFNb8QqLe8egPpXPQxOy6HBs5UocFJhDW9l538CGFSBcQJRfKIlUJbePjR0MugH8MY9YULiAMVtTdSeww3vOFWOqPThL0kbHcwFsQ773olZhiJkV2miLjF4M7mCtFnwDVC5ld4Jd9QqZUuKXYkT4oXKLkTSbEnvekRknxPOX0EwY8xTAtHYxuBbfctx5TuvA7ayUajixNXg3AUIjlvhBbYN0xxSrZGszqkEFC45upCJUjyPHrMc-AObtEim9Cjx_6g90svqKCk_bdPIXDUtwIsFjVIStmA0GZo2ugkAJOAlwb7y97XLH4IeexmjAtKa97EVPM_hY2eOiLDVP1iF6XJko1XeMSeOgcHY0bpah9veitPWIGrGdvMxapabpN8N_VgVnC-Jv1iF3ME_IzdGDGHUsnqFpL85utfgLU4B2zM8zMmimK9N0SGqLWe9TfBJMjXV02grFYvv0_kD-H3dLzRitTxZDr0ZMR7JXpP1mCFH6yeWfdvaN90_Z-wAmUnxl5B8eZaVvqPZwM6HgKkW26bKpAgeiSn-OpE-d938a4p3tJxd9Evnplg8rTPkqeXr7s4GgQa3hjknwzmAiiD6mrGvwEyg8LQ3dSk3xvPvn41ntu-v6UPVnB3pC-0wY5DZNQXpEJTNZFKfYFVGqPo4Mo6HkgCROCHpPj2iR5J8XwjmVt9C1YLJbwgrdu3Y-OvTpLiAIx4nF3VZhLcn9PW-57mX5If8GpMXRrlU5xs-PSBf68_s2qtXWuj-ncNow7l-zogB7EOlNc40aizOAZ5h3HiiLSmw1HPaCqPEz8MYWsaVAEzeJzEI4JLF_W2qDfFhi_44Ftjt6TX8aqVWiwGq7afgsXVN5QpTix8UOo0fT2MqxUfw5LC8Xt4KpZsvWi3TKzL5bIsqk1dZJvHqmLrjK3KUrDlY1GyYqF4KZTbIh1x9FLjAwTeIzkX_z8Cuc1Zjhd7ylaPa5alomTVU83KgmXH42pVJ49M4IlUKeFQHxZ2GyBxuzoUKum8uwpxyBIbRQgYI_TSK7ENCxVHAE2B-BOEljMRwszbSxnjxLQ-NO6ybvxBETZy3LfYy9sdugjJbEMm_wCYjeU8>53608</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            clang++ 13.0.0 bug: optimizer looses type information when comparing two pointers
        </td>
    </tr>

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

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

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

<pre>
    When my build farm updated its clang compiler to 13.0.0, builds of one my project begins to fail in one configuration - 32bit x86. Configuration with gcc compiler continue to work well. Previous version of clang 12.0.0 also works well. I've spent all day to track issue to compiler bug when using optimization, even if it is -Og, when clang optimizes computed pointers comparison.
For example, when i try to compare two pointers p1 and p2 computed like this: p1 = base; p2 = base + usize; Optimizer forgets that i compare two unsigned values, and generates optimized code, that analyzes "usize" as signed value, but it's type is size_t. When the range is big enough that usize is above 0x80000000, compiled code broken.
Here is small example:
```
class Foo
{
private:
        unsigned char* base;
        std::size_t    size;
public:
        Foo(unsigned char* newbase, std::size_t newsize): base(newbase), size(newsize) {}
        unsigned char* GetBegin() const noexcept { return base; }
        unsigned char* GetEnd() const noexcept { return base + size; }
};

int main(int argc, char** argv)
{
        std::string sbase = argv[1];
        std::string ssize = argv[2];
        unsigned long lbase = std::stoul(sbase);
        unsigned long lsize = std::stoul(ssize);
        Foo *foo = new Foo((unsigned char*)lbase, lsize);
        bool validrange = foo->GetBegin() < foo->GetEnd();
        delete foo;
        return validrange? 0: 1;
}
```
https://godbolt.org/z/jP1c8nshr
In godbolt, just change optimizing parameter from -O0 to -Og, and program output changes.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyNVcty2zoM_Rp5g4lHjzq2F17YSXPbVbu7yzuUBElMaFJDUnacry9ASrKTptPrkW2RAA5eh2Bp6svu3w41HC9QDlLV0Ah7hKGvhccapHdQKaFbqMyxlwoteANZsUyXaZI_RBMHpgGjkTF6a56x8lBiK7Vj5UZIBVIHhcroRraDFV4aDXdQ5KX08Lq5X8LDO9FZ-g7aqrq6JVMv9YAMeTb2Bc6o1BJ-WjxJMzg4oXVsSaHEgLOcgwShXDRwo8X3JF-fEFyP2pNUQS0uDOqtqF5AOhd9zI7LoYUzV2hwkmBN7-VRvoUwuQJ4IpFsqFJkC3c_Wt4M-jGMUR9dQBy4qL2R2lO4YUdY6YxeJuljku6fjAV8Fcde4QwjKbLLFJGwFNzZXCH6DIQmyPwKr-QLKXXSJcWe5UnxCKVwmBQH1puWkOQHzuktCH6MYVpojG2R2u47QSm98zpoJ1tNLk5CDeg4RHbeokbqG6U4JVuTWR1SCChCC3XhEiR5Hj3mOQgHt2iRTeTRU3_I-6VHLihr_-eXEDjqOwRLRQ2SUraA2gxtF50EYBaI0lB_09dNGj-MPHYzxgWlNS841fwb2ujpyGSYql_sozS5T8cnLKmnzsGTMaN0fYgvvZUnqsDVLN3Oxao6YZN8P_VgVnC-Zv1iH3ME-ozdGDGHUsnqFpL95pvfgDWeAzbl-RGTRLHeWyZD1NrM-ttgEuSbqyZwVuvHPyfyD_oDH2-yYnU6mY48GXytsPdsDRb9YPXMur-hfdX1_8IKlJ0YewWll2tZ-ZfOBhxFCJBfhW2rQILokZ3S1onzf9_Fd03xlo-7i37pzAST1SFLVo-fd3E0CDS8Mcg_GMwFUIbU1Yx_A2QGRaG7qUl_Np59_W48t_1wSx-q4L7hP7KhjkNk1CekIlM1kUp9glUao_jgyjoeSAYk4Luk-PqBHknxcCOZW30LVqNCj6x1uzs2_uokKZ4gZR5nV7WZBO_Paed9z_MvyZ_oaU1dGuWXNNlo9Ubf559ZtdGus1H9u4ZRh_N9HoiDVAfOa5xo3Fkag-JIcdKItOZIoz7lqTxO_DCErWlJBczgaRKPCG65qHdFvS22YuGlV7gL9wIxmckcb1K-YzgvMw9hZYzDaQpqGsnH8V4MF0u8Niik26tgMVi1-5A33aJDuSR9Wih1mv7uxlualuG-o0n-tCru082i2zUiW6-qpi7v6ypdFdU6L3C1LRuknXWT3S-UKFG5HTGbpjhzKEDQO_F8IXd5mtOTrrL1l02aLbFMq1WdlkWaNc16XSdfUqSjqZYcBzdkYXchJCqBI6GSzrurkKYt0xKDO8IXg--M3XGlj6LqpMZFcL8L4f8CfmrQzA">