the.jxc has asked for the wisdom of the Perl Monks concerning the following question:
Hey Monks,
I have an XS module which has worked for years, but is giving me warnings with a new compiler:
Utils.xs:263:13: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]for (i = 0; i < n; i++) { HE *he = hv_iternext (hv); STRLEN key_len; >>> char *key = HePV (he, key_len);
The offending line is: "char *key = HePV (he, key_len);"
I've resolved some similar errors by changing the type of the LHS variable. But in this case, (char *) seems to be the absolutely correct type. Presumably it's because HePV is a macro that maps to a complicated nested ternary variable structure which maybe contains a subtle mix of types?
Can I do anything, other than perhaps just turning off warnings for this?
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Calling HePV - "warning: dereferencing type-punned pointer will break strict-aliasing rules"
by dave_the_m (Monsignor) on Jul 25, 2018 at 07:51 UTC | |
by the.jxc (Acolyte) on Jul 25, 2018 at 12:10 UTC | |
by dave_the_m (Monsignor) on Jul 25, 2018 at 13:27 UTC | |
by syphilis (Archbishop) on Jul 25, 2018 at 13:35 UTC | |
by the.jxc (Acolyte) on Jul 26, 2018 at 23:13 UTC | |
by syphilis (Archbishop) on Jul 27, 2018 at 00:12 UTC |