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

    <tr>
        <th>Summary</th>
        <td>
            clang's -O2 optimization omits the calls to global "operator new/delete" when using clang7+ version
        </td>
    </tr>

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

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

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

<pre>
    ```
#include <cstdlib>
#include<iostream>
static int gv=0;
#define TRACE_STEP(s) { gv = (gv*251 + s)%256; }

void *operator new(size_t sz)
 {
    TRACE_STEP(1);
    std::cout  << "call new,    gv =" << gv  << std::endl;
    return malloc(sz);
}

void operator delete(void *p) noexcept
{
    TRACE_STEP(2);
    std::cout  << "call delete, gv =" << gv  << std::endl;
    free(p);
}

class foo 
{
    int rv;
public:
};

int test(void) 
{
    foo *f=new foo();
    delete f;
    std::cout << "call test,   gv =" << gv  << std::endl;
    return gv==253;
}

int main () 
{
   test();
}
```
test it using https://godbolt.org/ 

x86-64 clang(trunk)   -O0 -std=c++11
```
call new,    gv =1
call delete, gv =253
call test,   gv =253
```

x86-64 clang(trunk)   -O2 -std=c++11
```
call new,    gv =0
```

x86-64 gcc(6.0.1)   -O2 -std=c++11
```
call new,    gv =1
call delete, gv =253
call test,   gv =253
```

x86-64 gcc(trunk)   -O2 -std=c++11
```
call new,    gv =1
call delete, gv =253
call test,   gv =253
```

clang's -O2 optimization omits the calls to global "operator new/delete", but gcc does not do that,  is it clang bug?


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy1VUtzmzAQ_jXiorEHxMP4wMGP-NpOm3tGCAFqZcRIwkn967vChtjESaZN4tFgwa6-x6JFuSr-ZCjxz8PfIn-FSCgaJruCYxRumLGFFDkK76ZRCAplrOZ0P0aNpVYwLBqLqwMKtz4K1-O6gpei4fj-x2pz9_Dz_u47IqlBZInRYg3pwLbF8AgWkhWJA5ivsYsjEpM4ASRI3J7R-utBiQKyVqrlmlqlccMfHaY48geLzdGt7RMdw3kGvysBgUsKL6LgF4UrGEx1FrsSwAAWwqiUJ4aNyzsJhudDCjwYpiMGbwp5ha657XSD94ClmNN6vOS_5W80V3DJLYc1g-3W1a5R_Inx1g4Ar_kk_-ZzINv8p89Scye1fcMdk9QYXCqFb2h3O0gfxqVtl0vBHNeINKL2V5dvubHn8vS76iVqT0ZWJRiCF-luIX9amJN1XL5RrUmxTsSbj26KvmNgkDh8rWbO5p6KBp903_B4LsLtul83ukvFwuLOiKbCtbWtcQLJDkalilxJO1e6gjt8qeEpTWZJhOH1NRBLre6a304LxrNvPp71Nrewt9cwguAm881WCi5i0-3nSvIcndZ7jE6_ZO_qJR_Q67_PWTHX48ncnwefwfjFFTqp_bT6fJXa84tcmF6faq3YiyMcO6rBai-swbbm2OHCTOFKqpxK16rXp8RukEQccw5NDfZxobiBT6qFCcDQkyphXJf0tJBYoXB3KcfjWZAkwSJJokXqFVlYLMMl9aywkmefrRU_1rw5N2yPvXCH5IFrA5Bep2U2aWNh6y6fM7WHGykPw9-s1eoXZ-BvJ4zpOByzu3gRkdCrs7gIaLpk0TKMUk6oHxM_LvMkomHsJ2UQeZLmXJoMxWsUbz2REZ8QPyVLfxkt4nQe0TSJA1LGNEpyVlAU-Ry-WXLuiN0HxdNZrwFqaSAohbHmOQiHgqgazgd82tla6YzV3Z5qU1MZeL3krNf7F0rfXjY">