From 392060d0fca30cd3fac68a6feabe25bb87823d9b Mon Sep 17 00:00:00 2001 From: Michael Cree Date: Tue, 15 Sep 2015 10:08:41 +0530 Subject: [PATCH] tests: Fix test-suite failure on Alpha Pulseaudio fails to build on the Alpha architecture due to a failure in the volume-test of the test suite. I had reported this to the Debian bug tracker [1] but the maintainer has asked that I forward the patch to this mail list. The failure in volume-test occurs because it is compiled with -ffast-math which implies -ffinite-math-only of which the gcc manual states that it optimizes for floating-point arithmetic with the assumption that arguments and results are not NaNs or +/-infinity, and futher notes that it may result in incorrect output. On the Alpha platform that is somewhat an understatement as the use of non-finite floating-point arithmetic with -ffinite-math-only results in a floating-point exception and the termination of the program. The volume-test converts volumes into decibels (so a zero volume becomes a negative infinity) and proceeds to add two volumes (in decibels), thus does arithmetic with non-finite floating point numbers despite being compiled with -ffast-math! I attach a patch that protects against the arithmetic with non-finite numbers for your consideration. With that patch the test-suite passes on Alpha. Cheers Michael. [1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=798248 --- src/tests/volume-test.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/tests/volume-test.c b/src/tests/volume-test.c index bd0b01c68..191bc2127 100644 --- a/src/tests/volume-test.c +++ b/src/tests/volume-test.c @@ -114,7 +114,10 @@ START_TEST (volume_test) { double q, qq; p = pa_sw_volume_multiply(v, w); - qq = db + db2; + if (isfinite(db) && isfinite(db2)) + qq = db + db2; + else + qq = -INFINITY; p2 = pa_sw_volume_from_dB(qq); q = l*t; p1 = pa_sw_volume_from_linear(q);