Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Build fails with GCC 16 and -march=native: -Werror=array-bounds in DynamicWorld::soundOclusion()

Open Beginner friendly
#1,010 2 comments 0 reactions 0 assignees View on GitHub

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

bug

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

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from Try/OpenGothic

All issues in Try/OpenGothic

Similar issues

More C++ issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.