Bug 81229

Summary: make check fails on ARMv7 (GCC 4.9 wrong-code compiler bug)
Product: pixman Reporter: Peter <pbrobinson>
Component: pixmanAssignee: Søren Sandmann Pedersen <soren.sandmann>
Status: RESOLVED MOVED QA Contact: Søren Sandmann Pedersen <soren.sandmann>
Severity: normal    
Priority: medium CC: siarhei.siamashka
Version: other   
Hardware: Other   
OS: All   
Whiteboard:
i915 platform: i915 features:

Description Peter 2014-07-11 12:01:33 UTC
PPC64 (big endian), aarch64, x86 all build fine.

ARMv7 failures:
https://kojipkgs.fedoraproject.org//work/tasks/8061/7128061/build.log

make  check-TESTS
make[2]: Entering directory '/builddir/build/BUILD/pixman-0.32.6/test'
make[3]: Entering directory '/builddir/build/BUILD/pixman-0.32.6/test'
PASS: prng-test
PASS: pdf-op-test
PASS: a1-trap-test
PASS: region-test
PASS: region-translate-test
PASS: fetch-test
PASS: combiner-test
PASS: pixel-test
PASS: oob-test
PASS: infinite-loop
PASS: trap-crasher
PASS: alpha-loop
PASS: rotate-test
FAIL: thread-test
PASS: scaling-crash-test
PASS: scaling-helpers-test
PASS: gradient-crash-test
FAIL: matrix-test
PASS: alphamap
FAIL: composite-traps-test
PASS: region-contains-test
FAIL: glyph-test
PASS: stress-test
FAIL: blitters-test
FAIL: affine-test
FAIL: scaling-test
PASS: composite
make[4]: Entering directory '/builddir/build/BUILD/pixman-0.32.6/test'
make[4]: Nothing to be done for 'all'.
make[4]: Leaving directory '/builddir/build/BUILD/pixman-0.32.6/test'
============================================================================
Testsuite summary for pixman 0.32.6
============================================================================
# TOTAL: 27
# PASS:  20
# SKIP:  0
# XFAIL: 0
# FAIL:  7
# XPASS: 0
# ERROR: 0
============================================================================
See test/test-suite.log
Please report to pixman@lists.freedesktop.org
============================================================================
Makefile:1113: recipe for target 'test-suite.log' failed
make[3]: Leaving directory '/builddir/build/BUILD/pixman-0.32.6/test'
make[3]: *** [test-suite.log] Error 1
make[2]: *** [check-TESTS] Error 2
make[1]: *** [check-am] Error 2
make: *** [check-recursive] Error 1
Makefile:1219: recipe for target 'check-TESTS' failed
make[2]: Leaving directory '/builddir/build/BUILD/pixman-0.32.6/test'
Makefile:1474: recipe for target 'check-am' failed
make[1]: Leaving directory '/builddir/build/BUILD/pixman-0.32.6/test'
Makefile:493: recipe for target 'check-recursive' failed

PPC64le: 

make  check-TESTS
make[2]: Entering directory '/builddir/build/BUILD/pixman-0.32.6/test'
make[3]: Entering directory '/builddir/build/BUILD/pixman-0.32.6/test'
PASS: oob-test
PASS: fetch-test
PASS: a1-trap-test
PASS: region-translate-test
PASS: combiner-test
PASS: prng-test
PASS: pdf-op-test
FAIL: pixel-test
PASS: trap-crasher
PASS: region-test
PASS: infinite-loop
PASS: alpha-loop
PASS: scaling-crash-test
FAIL: thread-test
FAIL: rotate-test
FAIL: alphamap
PASS: scaling-helpers-test
PASS: matrix-test
PASS: gradient-crash-test
FAIL: composite-traps-test
FAIL: glyph-test
PASS: region-contains-test
FAIL: affine-test
FAIL: scaling-test
PASS: composite
FAIL: blitters-test
PASS: stress-test
make[4]: Entering directory '/builddir/build/BUILD/pixman-0.32.6/test'
make[4]: Nothing to be done for 'all'.
make[4]: Leaving directory '/builddir/build/BUILD/pixman-0.32.6/test'
============================================================================
Testsuite summary for pixman 0.32.6
============================================================================
# TOTAL: 27
# PASS:  18
# SKIP:  0
# XFAIL: 0
# FAIL:  9
# XPASS: 0
# ERROR: 0
============================================================================
See test/test-suite.log
Please report to pixman@lists.freedesktop.org
============================================================================
Comment 1 Søren Sandmann Pedersen 2014-07-25 20:07:29 UTC
Thanks for the bug report. 

It's difficult to say what's going on without a way to reproduce, but a few questions that may shed some light:

- On ARMv7, does 

       PIXMAN_DISABLE=arm-neon make check

  still fail?

- On ppc64le, does

       PIXMAN_DISABLE=vmx make check

  still fail?

- Is the hardware known to be unreliable? When I was at Red Hat I remember
  some of the ARM hardware having issues. It is especially suspicious that
  the matrix-test is failing.

- Are the same tests failing on both ppc64le and ARMv7?
Comment 2 Peter 2014-07-28 09:39:05 UTC
> - On ARMv7, does 
> 
>        PIXMAN_DISABLE=arm-neon make check
> 
>   still fail?

Yes, see output below

> - Is the hardware known to be unreliable? When I was at Red Hat I remember
>   some of the ARM hardware having issues. It is especially suspicious that
>   the matrix-test is failing.

The hardware is fine, not sure of the issues you are referring to. We've not had many issues other than actual power with the ARM builders for some time. Even when there were issues they were more due to being low end and running off SD cards as opposed to any reliability with compiling of code.

Executing(%check): /bin/sh -e /var/tmp/rpm-tmp.BHW3nq
+ umask 022
+ cd /builddir/build/BUILD
+ cd pixman-0.32.6
+ PIXMAN_DISABLE=arm-neon
+ make check -j4 V=1
Making check in pixman
make[1]: Entering directory '/builddir/build/BUILD/pixman-0.32.6/pixman'
make[1]: Nothing to be done for 'check'.
make[1]: Leaving directory '/builddir/build/BUILD/pixman-0.32.6/pixman'
Making check in demos
make[1]: Entering directory '/builddir/build/BUILD/pixman-0.32.6/demos'
make[1]: Nothing to be done for 'check'.
make[1]: Leaving directory '/builddir/build/BUILD/pixman-0.32.6/demos'
Making check in test
make[1]: Entering directory '/builddir/build/BUILD/pixman-0.32.6/test'
make  check-TESTS
make[2]: Entering directory '/builddir/build/BUILD/pixman-0.32.6/test'
make[3]: Entering directory '/builddir/build/BUILD/pixman-0.32.6/test'
PASS: a1-trap-test
PASS: prng-test
PASS: pdf-op-test
PASS: region-test
PASS: region-translate-test
PASS: combiner-test
PASS: fetch-test
PASS: pixel-test
PASS: oob-test
PASS: infinite-loop
PASS: trap-crasher
PASS: alpha-loop
FAIL: thread-test
PASS: rotate-test
PASS: scaling-crash-test
PASS: scaling-helpers-test
PASS: gradient-crash-test
FAIL: matrix-test
PASS: alphamap
FAIL: composite-traps-test
PASS: region-contains-test
FAIL: glyph-test
PASS: stress-test
FAIL: blitters-test
FAIL: affine-test
FAIL: scaling-test
PASS: composite
make[4]: Entering directory '/builddir/build/BUILD/pixman-0.32.6/test'
make[4]: Nothing to be done for 'all'.
make[4]: Leaving directory '/builddir/build/BUILD/pixman-0.32.6/test'
============================================================================
Testsuite summary for pixman 0.32.6
============================================================================
# TOTAL: 27
# PASS:  20
# SKIP:  0
# XFAIL: 0
# FAIL:  7
# XPASS: 0
# ERROR: 0
============================================================================
See test/test-suite.log
Please report to pixman@lists.freedesktop.org
============================================================================
Makefile:1113: recipe for target 'test-suite.log' failed
make[3]: Leaving directory '/builddir/build/BUILD/pixman-0.32.6/test'
Makefile:1219: recipe for target 'check-TESTS' failed
make[2]: Leaving directory '/builddir/build/BUILD/pixman-0.32.6/test'
Makefile:1474: recipe for target 'check-am' failed
make[1]: Leaving directory '/builddir/build/BUILD/pixman-0.32.6/test'
make[3]: *** [test-suite.log] Error 1
make[2]: *** [check-TESTS] Error 2
make[1]: *** [check-am] Error 2
make: *** [check-recursive] Error 1
Comment 3 Peter 2014-07-28 09:53:58 UTC
> - On ppc64le, does
> 
>        PIXMAN_DISABLE=vmx make check
> 
>   still fail?

All pass work vmx disabled

Executing(%check): /bin/sh -e /var/tmp/rpm-tmp.10JUrM
+ umask 022
+ cd /builddir/build/BUILD
+ cd pixman-0.32.6
+ PIXMAN_DISABLE=vmx
+ make check -j16 V=1
Making check in pixman
make[1]: Entering directory '/builddir/build/BUILD/pixman-0.32.6/pixman'
make[1]: Nothing to be done for 'check'.
make[1]: Leaving directory '/builddir/build/BUILD/pixman-0.32.6/pixman'
Making check in demos
make[1]: Entering directory '/builddir/build/BUILD/pixman-0.32.6/demos'
make[1]: Nothing to be done for 'check'.
make[1]: Leaving directory '/builddir/build/BUILD/pixman-0.32.6/demos'
Making check in test
make[1]: Entering directory '/builddir/build/BUILD/pixman-0.32.6/test'
make  check-TESTS
make[2]: Entering directory '/builddir/build/BUILD/pixman-0.32.6/test'
make[3]: Entering directory '/builddir/build/BUILD/pixman-0.32.6/test'
PASS: infinite-loop
PASS: fetch-test
PASS: region-translate-test
PASS: oob-test
PASS: trap-crasher
PASS: prng-test
PASS: combiner-test
PASS: pdf-op-test
PASS: a1-trap-test
PASS: alpha-loop
PASS: region-test
PASS: pixel-test
PASS: scaling-crash-test
PASS: rotate-test
PASS: scaling-helpers-test
PASS: thread-test
PASS: matrix-test
PASS: gradient-crash-test
PASS: composite-traps-test
PASS: alphamap
PASS: region-contains-test
PASS: glyph-test
PASS: affine-test
PASS: scaling-test
PASS: composite
PASS: blitters-test
PASS: stress-test
make[4]: Entering directory '/builddir/build/BUILD/pixman-0.32.6/test'
make[4]: Nothing to be done for 'all'.
make[4]: Leaving directory '/builddir/build/BUILD/pixman-0.32.6/test'
============================================================================
Testsuite summary for pixman 0.32.6
============================================================================
# TOTAL: 27
# PASS:  27
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================
make[3]: Leaving directory '/builddir/build/BUILD/pixman-0.32.6/test'
make[2]: Leaving directory '/builddir/build/BUILD/pixman-0.32.6/test'
make[1]: Leaving directory '/builddir/build/BUILD/pixman-0.32.6/test'
make[1]: Entering directory '/builddir/build/BUILD/pixman-0.32.6'
make[1]: Nothing to be done for 'check-am'.
make[1]: Leaving directory '/builddir/build/BUILD/pixman-0.32.6'
+ exit 0
Comment 4 Peter 2014-07-30 21:39:14 UTC
So running make check on ARMv7 (no means of doing it on ppc64le) on Fedora 20 (gcc 4.8.3 / glibc 2.18) passes compared to F-21 (gcc 4.9.1 / glibc 2.19.90). Only change in CFLAGS is addition of -Werror=format-security

Not sure if that helps

PASS: prng-test
PASS: a1-trap-test
PASS: pdf-op-test
PASS: region-test
PASS: region-translate-test
PASS: combiner-test
PASS: fetch-test
PASS: pixel-test
PASS: infinite-loop
PASS: trap-crasher
PASS: oob-test
PASS: rotate-test
PASS: alpha-loop
PASS: thread-test
PASS: scaling-crash-test
PASS: scaling-helpers-test
PASS: gradient-crash-test
PASS: matrix-test
PASS: alphamap
PASS: composite-traps-test
PASS: region-contains-test
PASS: glyph-test
PASS: sress-test
PASS: blitters-test
PASS: affine-test
PASS: scaling-test
PASS: composite
make[4]: Entering directory `/builddir/build/BUILD/pixman-0.32.6/test'
make[4]: Nothing to be done for `all'.
make[4]: Leaving directory `/builddir/build/BUILD/pixman-0.32.6/test'
============================================================================
Testsuite summary for pixman 0.32.6
============================================================================
# TOTAL: 27
# PASS:  27
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================
make[3]: Leaving directory `/builddir/build/BUILD/pixman-0.32.6/test'
make[2]: Leaving directory `/builddir/build/BUILD/pixman-0.32.6/test'
make[1]: Leaving directory `/builddir/build/BUILD/pixman-0.32.6/test'
make[1]: Entering directory `/builddir/build/BUILD/pixman-0.32.6'
make[1]: Leaving directory `/builddir/build/BUILD/pixman-0.32.6'
Comment 5 Søren Sandmann Pedersen 2014-08-10 20:12:55 UTC
(In reply to comment #4)
> So running make check on ARMv7 (no means of doing it on ppc64le) on Fedora
> 20 (gcc 4.8.3 / glibc 2.18) passes compared to F-21 (gcc 4.9.1 / glibc
> 2.19.90). Only change in CFLAGS is addition of -Werror=format-security
> 
> Not sure if that helps

Well, that certainly points towards either a compiler bug or possibly pixman relying on undefined behavior somewhere. It's hard to say which without hardware to test on.
Comment 6 Siarhei Siamashka 2014-09-21 20:56:06 UTC
(In reply to comment #3)
> > - On ppc64le, does
> > 
> >        PIXMAN_DISABLE=vmx make check
> > 
> >   still fail?
> 
> All pass work vmx disabled

It is possible that the vmx code in pixman is just making some big endian assumptions. This either needs to be properly fixed or somebody can try to make a simple patch to disable the vmx code path on ppc64le.
Comment 7 Siarhei Siamashka 2014-09-21 21:05:20 UTC
(In reply to comment #5)
> (In reply to comment #4)
> > So running make check on ARMv7 (no means of doing it on ppc64le) on Fedora
> > 20 (gcc 4.8.3 / glibc 2.18) passes compared to F-21 (gcc 4.9.1 / glibc
> > 2.19.90). Only change in CFLAGS is addition of -Werror=format-security
> > 
> > Not sure if that helps
> 
> Well, that certainly points towards either a compiler bug or possibly pixman
> relying on undefined behavior somewhere. It's hard to say which without
> hardware to test on.

Out of curiosity, which version of gcc was used on the system with pixman test failures?
Comment 8 Peter 2014-09-22 09:55:07 UTC
> > > So running make check on ARMv7 (no means of doing it on ppc64le) on Fedora
> > > 20 (gcc 4.8.3 / glibc 2.18) passes compared to F-21 (gcc 4.9.1 / glibc
> > > 2.19.90). Only change in CFLAGS is addition of -Werror=format-security
> > > 
> > > Not sure if that helps
> > 
> > Well, that certainly points towards either a compiler bug or possibly pixman
> > relying on undefined behavior somewhere. It's hard to say which without
> > hardware to test on.
> 
> Out of curiosity, which version of gcc was used on the system with pixman
> test failures?

It's documented above in the comments which you quote :)
Comment 9 Siarhei Siamashka 2014-12-03 20:24:18 UTC
(In reply to Peter from comment #8)
> > > > So running make check on ARMv7 (no means of doing it on ppc64le) on Fedora
> > > > 20 (gcc 4.8.3 / glibc 2.18) passes compared to F-21 (gcc 4.9.1 / glibc
> > > > 2.19.90). Only change in CFLAGS is addition of -Werror=format-security
> > > > 
> > > > Not sure if that helps
> > > 
> > > Well, that certainly points towards either a compiler bug or possibly pixman
> > > relying on undefined behavior somewhere. It's hard to say which without
> > > hardware to test on.
> > 
> > Out of curiosity, which version of gcc was used on the system with pixman
> > test failures?
> 
> It's documented above in the comments which you quote :)

Yes, sure :) Also managed to reproduce it here. This looks like a problem in GCC 4.9.x - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64172

This bug only affects the PRNG code from the test suite, but the pixman library itself should be fine. Seems like a workaround is going to be reasonably simple.

There is one more GCC 4.9.x problem in the pixman arm-iwmmxt code, which fails with an internal compiler error, as reported in the pixman mailing list: http://lists.freedesktop.org/archives/pixman/2014-December/003462.html
Comment 10 Siarhei Siamashka 2014-12-04 12:49:51 UTC
It is better to track the PPC64le problem separately (because it is unrelated to ARMv7) - https://bugs.freedesktop.org/show_bug.cgi?id=87001
Comment 11 Oded Gabbay 2015-09-07 09:00:30 UTC
PPC64le problems were solved as of release pixman-0.33.2
Comment 12 GitLab Migration User 2018-06-05 15:27:55 UTC
-- GitLab Migration Automatic Message --

This bug has been migrated to freedesktop.org's GitLab instance and has been closed from further activity.

You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.freedesktop.org/pixman/pixman/issues/18.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.