Skip to content

Add -ftrapping-math to default cflags

Tom Stellard requested to merge tstellar1/pixman:clang-fix into master

This should resolve #22 (closed) and make the tests pass with clang.

-ftrapping-math is already the default[1] for gcc, so this should not change behavior when compiling with gcc. However, clang defaults[2] to -fno-trapping-math, so -ftrapping-math is needed to avoid floating-point expceptions when running the combiner and stress tests.

The root causes of this issue is that that pixman-combine-float.c guards floating-point division operations with a FLOAT_IS_ZERO check e.g.

if (FLOAT_IS_ZERO (sa)) f = 1.0f; else f = CLAMP (da / sa);

With -fno-trapping-math, the compiler assumes that division will never trap, so it may re-order the division and the guard and execute the division first. In most cases, this would not be an issue, because floating-point exceptions are ignored. However, these tests call enable_divbyzero_exceptions() which causes the SIGFPE signal to be sent to the program when a divide by zero exception is raised.

[1] https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html [2] https://clang.llvm.org/docs/UsersManual.html#controlling-floating-point-behavior

Merge request reports