middle-end/101480 - overloaded global new/delete
authorRichard Biener <rguenther@suse.de>
Mon, 11 Oct 2021 14:06:03 +0000 (16:06 +0200)
committerRichard Biener <rguenther@suse.de>
Mon, 11 Oct 2021 14:20:19 +0000 (16:20 +0200)
commit09a0affdb0598a54835ac4bb0dd6b54122c12916
treed2ee960aa768dae7aebeea68d2dac57dd1880141
parenta40970cf043553f0ca09a3b7be1c5a949623d915
middle-end/101480 - overloaded global new/delete

The following fixes the issue of ignoring side-effects on memory
from overloaded global new/delete operators by not marking them
as effectively 'const' apart from other explicitely specified
side-effects.

This will cause

FAIL: g++.dg/warn/Warray-bounds-16.C  -std=gnu++1? (test for excess errors)

because we now no longer statically see the initialization loop
never executes because the call to operator new can now clobber 'a.m'.
This seems to be an issue with the warning code and/or ranger so
I'm leaving this FAIL to be addressed as followup.

2021-10-11  Richard Biener  <rguenther@suse.de>

PR middle-end/101480
* gimple.c (gimple_call_fnspec): Do not mark operator new/delete
as const.

* g++.dg/torture/pr10148.C: New testcase.
gcc/gimple.c
gcc/testsuite/g++.dg/torture/pr10148.C [new file with mode: 0644]