https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110137

--- Comment #32 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #31)
> I believe to match clang++ behavior the needed change would be:
> --- gcc/gimple.cc.jj  2024-11-14 18:26:16.877459015 +0100
> +++ gcc/gimple.cc     2024-11-15 13:40:43.484711373 +0100
> @@ -1605,7 +1605,7 @@ gimple_call_fnspec (const gcall *stmt)
>    if (fndecl
>        && DECL_IS_REPLACEABLE_OPERATOR_NEW_P (fndecl)
>        && gimple_call_from_new_or_delete (stmt))
> -    return "m ";
> +    return "mP";
>    return "";
>  }
>  
> Clearly ::operator delete, even when called from delete expression, isn't
> assumed not to change global state nor read it by clang++.
> Or of course if we want to go even further than that, we could return "mC"
> and let it behave like __builtin_malloc.
> Though, while perhaps one can somehow derive from the fact that the call can
> be omitted the undesirability to visibly change global state (because the
> compiler could decide not to call it and thus the global state change
> wouldn't occur), I don't see what rationale we'd use for not reading global
> state, other than that when using malloc under the hood the operator doesn't
> do that (visibly).

See PR101480 for a reason why to not do this.

Reply via email to