Re: Re: GNU Gengetopt 2.22

"Papp Gyozo (VBuster)" <[email protected]> Wed, 16 Jan 2008 09:58:16 +0100
Newsgroups gmane.comp.gnu.gengetopt.general
Message-ID <[email protected]>
Hi

> [dereferencing type-punned pointer will break strict-aliasing rules]

I also met this warning several times in different projects but I still don't know by heart in what circumstances it happens for sure. But look at the GCC documentation: 

For C (and C++),  about -fstrict-aliasing
     
     this activates optimizations based on the type of expressions.  In
     particular, an object of one type is assumed never to reside at
     the same address as an object of a different type, unless the
     types are almost the same.  For example, an `unsigned int' can
     alias an `int', but not a `void*' or a `double'.  A character type
     may alias any other type.

You should also note that, as far as I know, this kind of data access violates the C99 aliasing rules. (I think mostly because of alignment and other size-related problems.)


> 	union generic_value {
> 	    int int_arg;
> 	    char *string_arg;
> 	};
> 
> for which type-punning doesn't make much sense. So I'm pretty sure
> it is harmless.

IMHO this is not the case due to the fact type-punning is not restricted to unions. (But you are right one of the workarounds is to use type-pun unions with all types possibly to use.) However the warning here may be harmless probably.