Hi,

On Thu, 14 Jul 2011, Mikael Morin wrote:

> Couldn't we simulate the desired behaviour with more than one decl, one of 
> them const qualified? Like so:
> 
> void
> sub (int *restrict non_aliasing_var)
> {
>    *non_aliasing_var = 5;
>    {
>       const int *non_aliasing_var_tmp = non_aliasing_var;
>       some_function ();
>       if (*non_aliasing_var_tmp != 5)
>          foobar_();
>    }
> }

Nope, const qualification is mostly ignored by the middle end.  The reason 
is that const-ness implies only not changing the pointed-to memory _via 
this very pointer_.  It doesn't mean the pointed-to memory isn't reachable 
via other means (e.g. other pointers or direct access to global memory) 
that could be used to change it.  restrict gives you some of that, but 
still doesn't rule out reachability via global memory.

We need something like "this pointer points to memory that isn't reachable 
via other mean including global memory".  non-global mostly is that but 
requires some adjustments to escaping at function exit (otherwise many 
stores into it will be dead).


Ciao,
Michael.

Reply via email to