On 20 June 2007 11:36, Bokhanko, Andrey S wrote: > Hi, > > As I learned from experience, gcc always assume independence between memory > references in the following program: > > typedef struct { > int m1; > int m2; > } S1; > > void foo(S1 *p1, S1 *p2) { > ... = p1->m1; > ... = p2->m2; > } > > ...even if -fno-strict-aliasing (an option disabling ansi-aliasing rules) > supplied. > > I wonder, is there a way to force gcc not to assume independence in the > example shown above?
Just maybe if you give the struct definition __attribute__ ((packed)) gcc will no longer assume that all struct S1s are naturally aligned and therefore know that they might overlap? (But it's also quite possible that it won't... I haven't been through the sources to determine how much aliasing information it infers from alignment.) cheers, DaveK -- Can't think of a witty .sigline today....