This is the mail archive of the gcc@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] |
On 06/07/2017 04:56 PM, Andrew Haley wrote:
On 07/06/17 14:45, K wrote:And I found that that a version which I beleve mustn't have aliasing problems still generates same warnings.It still has aliasing problems: you can't make them magically go away by using an intermediate uint8_t*. You're doing this: struct udp_pseudo { uint32_t src; uint32_t dst; uint8_t z; uint8_t proto; uint16_t len; } tmp; ... auto ret = calc_16bit_checksum_part((uint8_t*)&tmp, sizeof(tmp), 0); static uint32_t calc_16bit_checksum_part(uint8_t* buf, int len, uint32_t ret) { struct ui16{ uint16_t d; }; ui16 *ptr = (ui16*)buf; There's no need for any of this messing about with pointer casts, as has been explained.
Sorry, but I still can't get the idea. Cast from udp_pseudo to uint8_t doesn't have an aliasing problem (std 8.8) and a cast from uint8_t to ui16 still doesn't have an aliasing problem (std 8.6), or may be I missed something?
Kirill.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |