https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107561
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org
--- Comment #16 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #15)
> The compiler doesn't know that the allocation function cannot clobber *this.
> The C++ frontend tries to communicate this by making 'this' restrict
> qualified
> and we make use of that info, but for calls we do not know how to use the
> info.
>
> Maybe we can special-case directly the actual parameter case and compute
> the restrictness info for the call arguments. The canonical example is
>
> void bar (void);
> struct X {
> X (int);
> int i;
> int j;
> };
>
> X::X(int k)
> {
> i = k;
> bar ();
> j = i != k;
> }
>
> where if I understand you correctly, bar () is not allowed to modify *this
> (unless I pass it an argument to it, of course), even if *this is for
> example
Why? Because it is a constructor and the object isn't fully constructed yet at
that point? For normal methods I certainly don't see anything that would
preclude such modifications.