Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

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

Aperta Adatta ai principianti
#1,010 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
68/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
cmake, cpp
Ambito
build-system

Direzione di ricerca

Inizia in common/physics/dynamicworld.cpp, in corrispondenza di DynamicWorld::soundOclusion() attorno alla chiamata a std::sort segnalata vicino alla riga 846; esamina come vengono raccolti e ordinati i dati di CallBack. Riproduci il problema con la configurazione CMake per GCC 16 e -march=native indicata nel report, quindi esegui di nuovo la compilazione per confermare che l’errore di limiti dell’array non impedisce più la compilazione.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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
Lingua principale
C++
Stelle
1.6k
Fork
138
Merge medio
1g 22h
PR unite (30g)
14

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di Try/OpenGothic

Tutte le issue di Try/OpenGothic

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.