On Wed, Mar 17, 2004 at 12:07:52AM +0100, Dag-Erling Sm?rgrav wrote: > Ruslan Ermilov <ru_at_FreeBSD.org> writes: > > I know this code quite well. Where do you suspect could be a bug > > affecting -O2 compiles, or you just simply fixed -O2 and hope it > > will auto-fix the (possible) bugs in -O2? > > Since there is no inline asm, the most likely suspect is aliasing, > which is what my patch tries to address. > Hmm, read this again: : `-fstrict-aliasing' : Allows the compiler to assume the strictest aliasing rules : applicable to the language being compiled. For C (and C++), 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. And asking myself a question: should those (void *)'s in your patch be (char *)'s instead, e.g., in twowords() and DifferentialChecksum(), or am I misreading the above? Also, the easiest way to check if strict aliasing is guilty for not working libalias compiled with -O2, is to compile the original code with -O2 -fno-strict-aliasing. You guys who have seen a problem, can you please check and confirm that? Cheers, -- Ruslan Ermilov FreeBSD committer ru_at_FreeBSD.org
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:47 UTC