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.