Re: Any way to locally apply no-strict-alias?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



John Fine wrote:
> Andrew Haley wrote:
>>
>> We obviously don't want to start having a no-strict-alias attribute for
>> pointers.  I think it's pointless because it would only apply to new
>> code, and the whole point of no-strict-alias is to make old code work.
> 
> I sure disagree with that.
> 
> How about making old code repairable.
> 
> It would be a monster task to rewrite old code to not need the problem
> casts.

The hard part IME is finding the bad casts.  Once you've done that it's
not so awfully hard to convert pointer casts to use unions instead.
Adding a no-strict-alias attribute solves the easy part, leaving the
hard part.

> It is a much more reasonable task to find all the pointers that
> are used with problem casts.  If you could just tack some attribute onto
> the declaration of each such pointer, you could take a giant application
> you don't even understand and repair it for this issue in under a day.
> 
> I think I've tricked the compiler into generating working code.  I don't
> think my correction is correct (I think I just confused the optimizer). 
> But I don't know enough about the exact rules of aliasing to be sure.
> 
> I made a union of void* and int*.  And my basic pointer now points to
> that union instead of being void**.

> Then I never use the int* member of the union.  What used to directly
> use the void** now uses the void* member of the union.  What used to use
> the Datatye** cast of the void** now uses a Datatype** cast of the
> address of the void* member of the union.  That still means I'm casting
> a void** to a Datatype**, but it seems to have changed the compiler's
> understanding of it.

Why not make it a union of Datatype* and void*  ?
Then you wouldn't need to cast at all.

Andrew.


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux