Build fails with GCC 16 and -march=native: -Werror=array-bounds in DynamicWorld::soundOclusion()
Maintainers usually reply within 2 days
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 68/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- cmake, cpp
- Domain
- build-system
Research direction
Start in common/physics/dynamicworld.cpp, at DynamicWorld::soundOclusion() around the reported std::sort call near line 846; inspect how its CallBack data is collected and sorted. Reproduce with the GCC 16 and -march=native CMake configuration in the report, then build again to confirm the array-bounds error no longer prevents compilation.
Written by the indexing model from the issue text.
Description
Building current master with GCC 16 and -march=native fails in dynamicworld.cpp:
[ 94%] Building CXX object CMakeFiles/OpenGothic.dir/common/world/fplock.cpp.o
[ 94%] Building CXX object CMakeFiles/OpenGothic.dir/common/world/objects/globalfx.cpp.o
In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/g++-v16/bits/stl_algo.h:61,
from /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/g++-v16/algorithm:63,
from /home/green/tmp/OpenGothic/lib/Tempest/Engine/include/../utility/utility.h:5,
from /home/green/tmp/OpenGothic/lib/Tempest/Engine/include/Tempest/Vec:1,
from /home/green/tmp/OpenGothic/lib/Tempest/Engine/include/../math/matrix.h:3,
from /home/green/tmp/OpenGothic/lib/Tempest/Engine/include/Tempest/Matrix4x4:1,
from /home/green/tmp/OpenGothic/common/physics/dynamicworld.h:5,
from /home/green/tmp/OpenGothic/common/physics/dynamicworld.cpp:1:
In function ‘constexpr void std::__adjust_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare) [with _RandomAccessIterator = float*; _Distance = long int; _Tp = float; _Compare = less<void>]’,
inlined from ‘constexpr void std::__make_heap(_RandomAccessIterator, _RandomAccessIterator, _Compare&) [with _RandomAccessIterator = float*; _Compare = less<void>]’ at /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/g++-v16/bits/stl_heap.h:357:22,
inlined from ‘constexpr void std::__heap_select(_RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = float*; _Compare = less<void>]’ at /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/g++-v16/bits/stl_algo.h:1593:23,
inlined from ‘constexpr void std::__partial_sort(_RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = float*; _Compare = less<void>]’ at /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/g++-v16/bits/stl_algo.h:1876:25,
inlined from ‘constexpr void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size, _Compare) [with _RandomAccessIterator = float*; _Size = long int; _Compare = less<void>]’ at /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/g++-v16/bits/stl_algo.h:1892:27,
inlined from ‘constexpr void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = float*; _Compare = less<void>]’ at /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/g++-v16/bits/stl_algo.h:1913:25,
inlined from ‘constexpr void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = float*; _Compare = less<void>]’ at /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/g++-v16/bits/stl_algo.h:1908:5,
inlined from ‘constexpr void std::sort(_RAIter, _RAIter) [with _RAIter = float*]’ at /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/g++-v16/bits/stl_algo.h:4817:18,
inlined from ‘float DynamicWorld::soundOclusion(const Tempest::Vec3&, const Tempest::Vec3&) const’ at /home/green/tmp/OpenGothic/common/physics/dynamicworld.cpp:846:12:
/usr/lib/gcc/x86_64-pc-linux-gnu/16/include/g++-v16/bits/stl_heap.h:246:36: error: array subscript 68 is outside array bounds of ‘DynamicWorld::soundOclusion(const Tempest::Vec3&, const Tempest::Vec3&) const::CallBack [1]’ [-Werror=array-bounds=]
246 | *(__first + __holeIndex) = _GLIBCXX_MOVE(*(__first
| ^
/home/green/tmp/OpenGothic/common/physics/dynamicworld.cpp: In member function ‘float DynamicWorld::soundOclusion(const Tempest::Vec3&, const Tempest::Vec3&) const’:
/home/green/tmp/OpenGothic/common/physics/dynamicworld.cpp:834:12: note: at offset 272 into object ‘callback’ of size 272
834 | CallBack callback(CollisionWorld::toMeters(from), CollisionWorld::toMeters(to));
| ^~~~~~~~
[ 94%] Building CXX object CMakeFiles/OpenGothic.dir/common/world/objects/interactive.cpp.o
[ 94%] Building CXX object CMakeFiles/OpenGothic.dir/common/world/objects/item.cpp.o
[ 94%] Building CXX object CMakeFiles/OpenGothic.dir/common/world/objects/itemtorchburning.cpp.o
[ 94%] Building CXX object CMakeFiles/OpenGothic.dir/common/world/objects/npc.cpp.o
[ 95%] Building CXX object CMakeFiles/OpenGothic.dir/common/world/objects/pfxemitter.cpp.o
[ 95%] Building CXX object CMakeFiles/OpenGothic.dir/common/world/objects/sound.cpp.o
[ 95%] Building CXX object CMakeFiles/OpenGothic.dir/common/world/objects/staticobj.cpp.o
cc1plus: all warnings being treated as errors
make[2]: *** [CMakeFiles/OpenGothic.dir/build.make:1325: CMakeFiles/OpenGothic.dir/common/physics/dynamicworld.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [CMakeFiles/Makefile2:649: CMakeFiles/OpenGothic.dir/all] Error 2
make: *** [Makefile:136: all] Error 2
make: Leaving directory '/home/green/tmp/OpenGothic/build'
Steps to reproduce:
cmake -B build -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_CXX_FLAGS="-march=native"
make -C build -j $(nproc)
Without -march=native it builds fine.
Why -march=native: I'm on Gentoo, everything is built from source with -march=native, which is the usual choice when compiling for your own machine.
$ gcc --version | head -1
gcc (Gentoo 16.2.1_p20260926 p1) 16.2.1 20260926
$ gcc -march=native -Q --help=target | grep -E '^\s+-march=|^\s+-mtune='
-march= alderlake
$ grep -m1 'model name' /proc/cpuinfo
model name : Intel(R) Core(TM) Ultra 7 155H
OS: Gentoo Linux
- Dominant language
- C++
- Stars
- 1.6k
- Forks
- 138
- Avg merge
- 1d 15h
- Merged PRs (30d)
- 13
Getting set up
- No Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from Try/OpenGothic
-
Difficulty 5/5 Over a week Newbie friendliness 25/100
Try/OpenGothic#992 · 4 comments ·
Maintainers usually reply within 2 days
-
bug
Difficulty 3/5 1-2 days Newbie friendliness 68/100
Try/OpenGothic#990 ·
Maintainers usually reply within 2 days
-
bug
Difficulty 3/5 1-2 days Newbie friendliness 48/100
Try/OpenGothic#986 ·
Maintainers usually reply within 2 days
-
Game crash on deathOpenbug
Difficulty 4/5 3-5 days Newbie friendliness 42/100
Try/OpenGothic#984 · 4 comments ·
Maintainers usually reply within 2 days
-
bug
Difficulty 4/5 3-5 days Newbie friendliness 55/100
Try/OpenGothic#974 · 1 comment ·
Maintainers usually reply within 2 days
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
nasa/fprime#6225 · 1 comment ·
Maintainers usually reply within 1 day
-
content good first issue
Difficulty 1/5 Under an hour Newbie friendliness 95/100
cpinitiative/usaco-guide#6699 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
codepointerapp/codepointer#231 ·
-
enhancement source/qq
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
metasequoiaime/msime-windows#1054 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
amnezia-vpn/amnezia-client#3297 · 1 comment ·
Maintainers usually reply within 1 day