AcademySoftwareFoundation / AcademySoftwareFoundation/openexr

openexr-3.1.7 test suite fails on armv7l-linux

Open
#1,400 5 comments 0 reactions 0 assignees View on GitHub
in progress
Dominant language
C
Stars
1.8k
Forks
700
Avg merge
3d 12h
Merged PRs (30d)
29

Description

```
112/112 Test #111: OpenEXRUtil.testDeepImage ................. Passed 25.84 sec
98% tests passed, 2 tests failed out of 112
Total Test time (real) = 190.83 sec
The following tests FAILED:
87 - OpenEXR.testMultiTiledPartThreading (SEGFAULT)
95 - OpenEXR.testRgbaThreading (SEGFAULT)
Errors while running CTest
make: *** [Makefile:71: test] Error 8
```

[Full build log](https://github.com/AcademySoftwareFoundation/openexr/files/11360715/openexr-3.1.7.log)

Likely relevant parts:
```
[ 30%] Building CXX object src/lib/OpenEXR/CMakeFiles/OpenEXR.dir/ImfFloatAttribute.cpp.o
In file included from /nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/vector:70,
from /build/source/src/lib/OpenEXR/ImfFastHuf.cpp:12:
/nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {long long unsigned int}; _Tp = long long unsigned int; _Alloc = std::allocator]':
/nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/bits/vector.tcc:439:7: note: parameter passing for argument of type 'std::vector::iterator' changed in GCC 7.1
439 | vector<_Tp, _Alloc>::
| ^~~~~~~~~~~~~~~~~~~
In member function 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {long long unsigned int}; _Tp = long long unsigned int; _Alloc = std::allocator]',
inlined from 'void std::vector<_Tp, _Alloc>::push_back(value_type&&) [with _Tp = long long unsigned int; _Alloc = std::allocator]' at /nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/bits/stl_vector.h:1294:21,
inlined from 'Imf_3_1::FastHufDecoder::FastHufDecoder(const char*&, int, int, int, int)' at /build/source/src/lib/OpenEXR/ImfFastHuf.cpp:186:31:
/nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/bits/vector.tcc:123:28: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1
123 | _M_realloc_insert(end(), std::forward<_Args>(__args)...);

[ 45%] Building CXX object src/lib/OpenEXR/CMakeFiles/OpenEXR.dir/ImfStdIO.cpp.o
/build/source/src/lib/OpenEXR/ImfStandardAttributes.cpp: In function 'const float& Imf_3_1::dwaCompressionLevel(const Header&)':
/build/source/src/lib/OpenEXR/ImfStandardAttributes.cpp:55:41: warning: 'const Imf_3_1::TypedAttribute& Imf_3_1::dwaCompressionLevelAttribute(const Header&)' is deprecated: use compression method in ImfHeader [-Wdeprecated-declarations]
55 | return IMF_NAME_ATTRIBUTE(name) (header).value(); \
| ^
/build/source/src/lib/OpenEXR/ImfStandardAttributes.cpp:99:1: note: in expansion of macro 'IMF_STD_ATTRIBUTE_IMP'
99 | IMF_STD_ATTRIBUTE_IMP (dwaCompressionLevel, DwaCompressionLevel, float)
| ^~~~~~~~~~~~~~~~~~~~~
In file included from /build/source/src/lib/OpenEXR/ImfStandardAttributes.cpp:12:
/build/source/src/lib/OpenEXR/ImfStandardAttributes.cpp:99:24: note: declared here
99 | IMF_STD_ATTRIBUTE_IMP (dwaCompressionLevel, DwaCompressionLevel, float)
| ^~~~~~~~~~~~~~~~~~~
/build/source/src/lib/OpenEXR/ImfStandardAttributes.h:46:34: note: in definition of macro 'IMF_NAME_ATTRIBUTE'
46 | #define IMF_NAME_ATTRIBUTE(name) name##Attribute
| ^~~~
/build/source/src/lib/OpenEXR/ImfStandardAttributes.cpp:99:1: note: in expansion of macro 'IMF_STD_ATTRIBUTE_IMP'
99 | IMF_STD_ATTRIBUTE_IMP (dwaCompressionLevel, DwaCompressionLevel, float)
| ^~~~~~~~~~~~~~~~~~~~~
/build/source/src/lib/OpenEXR/ImfStandardAttributes.cpp: In function 'float& Imf_3_1::dwaCompressionLevel(Header&)':
/build/source/src/lib/OpenEXR/ImfStandardAttributes.cpp:61:41: warning: 'Imf_3_1::TypedAttribute& Imf_3_1::dwaCompressionLevelAttribute(Header&)' is deprecated: use compression method in ImfHeader [-Wdeprecated-declarations]
61 | return IMF_NAME_ATTRIBUTE(name) (header).value(); \
| ^
/build/source/src/lib/OpenEXR/ImfStandardAttributes.cpp:99:1: note: in expansion of macro 'IMF_STD_ATTRIBUTE_IMP'
99 | IMF_STD_ATTRIBUTE_IMP (dwaCompressionLevel, DwaCompressionLevel, float)
| ^~~~~~~~~~~~~~~~~~~~~
/build/source/src/lib/OpenEXR/ImfStandardAttributes.cpp:99:24: note: declared here
99 | IMF_STD_ATTRIBUTE_IMP (dwaCompressionLevel, DwaCompressionLevel, float)
| ^~~~~~~~~~~~~~~~~~~
/build/source/src/lib/OpenEXR/ImfStandardAttributes.h:46:34: note: in definition of macro 'IMF_NAME_ATTRIBUTE'
46 | #define IMF_NAME_ATTRIBUTE(name) name##Attribute
| ^~~~
/build/source/src/lib/OpenEXR/ImfStandardAttributes.cpp:99:1: note: in expansion of macro 'IMF_STD_ATTRIBUTE_IMP'
99 | IMF_STD_ATTRIBUTE_IMP (dwaCompressionLevel, DwaCompressionLevel, float)

[ 50%] Building CXX object src/lib/OpenEXR/CMakeFiles/OpenEXR.dir/ImfTimeCode.cpp.o
In file included from /nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/bits/stl_algo.h:60,
from /nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/algorithm:61,
from /build/source/src/lib/OpenEXR/ImfTileOffsets.cpp:17:
/nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/bits/stl_heap.h: In function 'void std::__adjust_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Distance = int; _Tp = Imf_3_1::{anonymous}::tilepos; _Compare = __gnu_cxx::__ops::_Iter_less_iter]':
/nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/bits/stl_heap.h:224:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1
224 | __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
| ^~~~~~~~~~~~~
/nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/bits/stl_algo.h: In function 'void std::__insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]':
/nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/bits/stl_algo.h:1802:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1
1802 | __insertion_sort(_RandomAccessIterator __first,
| ^~~~~~~~~~~~~~~~
/nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/bits/stl_algo.h:1802:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1
/nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/bits/stl_algo.h: In function 'void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Size = int; _Compare = __gnu_cxx::__ops::_Iter_less_iter]':
/nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/bits/stl_algo.h:1908:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1
1908 | __introsort_loop(_RandomAccessIterator __first,
| ^~~~~~~~~~~~~~~~
/nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/bits/stl_algo.h:1908:5: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1
/nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/bits/stl_algo.h:1922:32: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1
1922 | std::__introsort_loop(__cut, __last, __depth_limit, __comp);
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]',
inlined from 'void std::sort(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator >]' at /nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/bits/stl_algo.h:4820:18,
inlined from 'void Imf_3_1::TileOffsets::getTileOrder(int*, int*, int*, int*) const' at /build/source/src/lib/OpenEXR/ImfTileOffsets.cpp:329:14:
/nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/bits/stl_algo.h:1937:32: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1
1937 | std::__introsort_loop(__first, __last,
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
1938 | std::__lg(__last - __first) * 2,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1939 | __comp);
| ~~~~~~~
In function 'void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]',
inlined from 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]' at /nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/bits/stl_algo.h:1940:31,
inlined from 'void std::sort(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator >]' at /nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/bits/stl_algo.h:4820:18,
inlined from 'void Imf_3_1::TileOffsets::getTileOrder(int*, int*, int*, int*) const' at /build/source/src/lib/OpenEXR/ImfTileOffsets.cpp:329:14:
/nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/bits/stl_algo.h:1849:32: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1
1849 | std::__insertion_sort(__first, __first + int(_S_threshold), __comp);
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/bits/stl_algo.h:1854:30: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator >' changed in GCC 7.1
1854 | std::__insertion_sort(__first, __last, __comp);

[ 65%] Building CXX object src/lib/OpenEXRUtil/CMakeFiles/OpenEXRUtil.dir/ImfImageDataWindow.cpp.o
/build/source/src/bin/exrmultipart/exrmultipart.cpp: In function 'void combine(std::vector, std::vector, const char*, bool)':
/build/source/src/bin/exrmultipart/exrmultipart.cpp:576:19: warning: ignoring return value of 'std::vector<_Tp, _Alloc>::size_type std::vector<_Tp, _Alloc>::size() const [with _Tp = Imf_3_1::MultiPartInputFile*; _Alloc = std::allocator; size_type = unsigned int]', declared with attribute 'nodiscard' [-Wunused-result]
576 | fordelete.size();
| ~~~~~~~~~~~~~~^~
In file included from /nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/vector:64,
from /build/source/src/lib/OpenEXR/ImfStringVectorAttribute.h:23,
from /build/source/src/lib/OpenEXR/ImfPartHelper.h:36,
from /build/source/src/bin/exrmultipart/exrmultipart.cpp:26:
/nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/bits/stl_vector.h:987:7: note: declared here
987 | size() const _GLIBCXX_NOEXCEPT

[ 78%] Building CXX object src/test/OpenEXRTest/CMakeFiles/OpenEXRTest.dir/testCompositeDeepScanLine.cpp.o
In function 'void testStringHelper(exr_context_t)',
inlined from 'void testAttrStrings(const std::string&)' at /build/source/src/test/OpenEXRCoreTest/general_attr.cpp:281:22:
/build/source/src/test/OpenEXRCoreTest/general_attr.cpp:248:36: warning: argument 1 value '2147483649' exceeds maximum object size 2147483647 [-Walloc-size-larger-than=]
248 | char* tmp = (char*) malloc (nbytes + 1);
| ~~~~~~~^~~~~~~~~~~~
In file included from /nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/cstdlib:75,
from /nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/ext/string_conversions.h:41,
from /nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/bits/basic_string.h:3960,
from /nix/store/s2nrdgav2iw8v8qs6h42r9yr5c47i8jy-gcc-12.2.0/include/c++/12.2.0/string:53,
from /build/source/src/test/OpenEXRCoreTest/general_attr.h:7,
from /build/source/src/test/OpenEXRCoreTest/general_attr.cpp:4:
/nix/store/j2sswk0kla12fcv4p34rk3w231m37saj-glibc-2.37-8-dev/include/stdlib.h: In function 'void testAttrStrings(const std::string&)':
/nix/store/j2sswk0kla12fcv4p34rk3w231m37saj-glibc-2.37-8-dev/include/stdlib.h:553:14: note: in a call to allocation function 'void* malloc(size_t)' declared here
553 | extern void *malloc (size_t __size) __THROW __attribute_malloc__
```

Contributor guide

Open the contributing guide

Research direction

Reproduce the OpenEXR 3.1.7 build on armv7l-linux from the linked build log, then run the failing CTest cases OpenEXR.testMultiTiledPartThreading and OpenEXR.testRgbaThreading. Inspect the related threading paths and the mentioned sources, including src/lib/OpenEXR/ImfFastHuf.cpp and ImfTileOffsets.cpp. Done means both tests complete without segmentation faults on the affected platform.

Written by the indexing model from the issue text.

Assessment

Tech stack
cmake, cpp
Domain
operating-systems, testing
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.