https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52339
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Known to fail| |13.1.0, 14.0, 4.1.0, 4.6.2 Last reconfirmed|2021-08-11 00:00:00 |2023-5-4 --- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> --- Marc Glisse pointed out that we're not using a SAVE_EXPR for the operand of the delete-expression: https://gcc.gnu.org/pipermail/gcc-help/2023-May/142512.html """ It normally uses a SAVE_EXPR, but seems to consider token->lexer_ as "safe". try { Lexer::~Lexer ((struct Lexer *) token->lexer_); } finally { operator delete ((void *) token->lexer_, 8); } whereas if I write delete (token->lexer_ + i); where i is 0, I get try { Lexer::~Lexer (SAVE_EXPR <(struct Lexer *) token->lexer_ + (sizetype) (i * 8)>); } finally { operator delete ((void *) (SAVE_EXPR <(struct Lexer *) token->lexer_ + (sizetype) (i * 8)>), 8); } which works. """