<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">