This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


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 Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]