> On 07/02/2014 06:30 PM, Jan Hubicka wrote:
> >But this is one of things that was not quite clear to me.  I know that 
> >polymorphic type A
> >was created at a give memory location.  THis means that accesses to that 
> >location in one
> >alias class has been made.
> >Now I destroy A and turn it into B, construct B and make memory accesses in 
> >different
> >alias set.  I see this has chance to work if one is base of another, but if 
> >B is completely
> >different type, I think strick aliasin should just make those accesses to 
> >not alias and in turn
> >make whole thing undefined?
> 
> Right, if they're unrelated types the accesses don't alias (3.10p10).
> 
> On the subject of aliasing, there's a proposal to add explicit alias
> sets to C++:
> 
>  http://open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3988.pdf
> 
> Any thoughts?

Thanks! I will take a look.
I would like to decide what to do with this approach. I can see
 1) I can start explicitly tracking if type came from a declaration or was 
detected dynamically
    (by seeing a vtable write or constructor call).  Currently we don't do the 
second, but I would
    like to understand if these make difference
 2) The code in question first detect that a type in a given variable is fully 
constructed and 
    then starts tracking it across function calls.  If needed I can check if my 
unwind stack contains
    some additional constructors/destructors that may possibly be currently 
destructing the type
    if it is valid to call destructor and construct same type there again.
    
    If one can there destruct the type and build completely different type, we 
need updates elsewhere
    in devirt machinery, too.

Thanks!
Honza
> 
> Jason

Reply via email to