On Fri, 18 May 2018, Jakub Jelinek wrote:
On Fri, May 18, 2018 at 09:02:08AM -0400, Nathan Sidwell wrote:
On 05/18/2018 08:53 AM, Marc Glisse wrote:
As long as you do not dereference ptr in the constructor, that shouldn't
contradict 'restrict'. The PR gives this quote from the standard:
"During the construction of an object, if the value of the object or any
of its subobjects is accessed through a glvalue that is not obtained,
directly or indirectly, from the constructor’s this pointer, the value
of the object or subobject thus obtained is unspecified."
which reads quite close to saying that 'this' is restrict.
Indeed it is, thanks.
what about comparisons to this? I thought restrict implied such a
comparison was 'never the same'?
ie. if the ctor was:
selfie (selfie *ptr) : me (ptr==this ? 0 : ptr) {}
But what is invalid on:
struct S { int foo (S *); int a; } s { 2 };
int S::foo (S *x)
{
int b = this->a;
x->a = 5;
b += this->a;
return b;
}
int main ()
{
if (s.foo (&s) != 7)
abort ();
}
I think if you make this a restrict pointer, this will be miscompiled.
The patch is only for constructors, not for all member functions.
--
Marc Glisse