SFTtech/openage

Build with GCC 13 fails with `rng.h:210:1: error: ‘uint64_t’ does not name a type` and other errors.

dreirund opened this issue · 1 comments

(This seems at least partly to be a similar issue as SFTtech/nyan#101, where the fix was to add #include <cstdint>)

When I want to build the latest git checkout of openage with gcc 13.1.1, it fails with

  • rng.h:21:30: error: expected ‘)’ before ‘seed’,
  • rng.h:54:19: error: ‘uint64_t’ has not been declared,
  • rng.h:69:9: error: ‘uint64_t’ does not name a type,
  • rng.h:92:30: error: ‘class openage::rng::RNG’ has no member named ‘random’,
  • rng.h:92:47: error: ‘max’ is not a member of ‘openage::rng::RNG’,
  • rng.cpp:63:9: error: ‘state’ was not declared in this scope; did you mean ‘_xstate’?,
  • rng.cpp:85:10: error: no declaration matches ‘uint64_t openage::rng::RNG::random()’,
  • rng.cpp:146:28: error: ‘const class openage::rng::RNG’ has no member named ‘state’,
  • maybe others:
[...]
[ 71%] Building CXX object libopenage/CMakeFiles/libopenage.dir/renderer/vulkan/renderer.cpp.o
[ 71%] Building CXX object libopenage/CMakeFiles/libopenage.dir/renderer/vulkan/windowvk.cpp.o
/tmp/makepkg/build/openage-git/src/openage/libopenage/renderer/vulkan/loader.cpp: In member function ‘void openage::renderer::vulkan::VlkLoader::init(VkInstance)’:
/tmp/makepkg/build/openage-git/src/openage/libopenage/renderer/vulkan/loader.cpp:15:33: warning: unused parameter ‘instance’ [-Wunused-parameter]
   15 | void VlkLoader::init(VkInstance instance) {
      |                      ~~~~~~~~~~~^~~~~~~~
[ 71%] Building CXX object libopenage/CMakeFiles/libopenage.dir/rng/rng.cpp.o
In file included from /tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.cpp:3:
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:21:30: error: expected ‘)’ before ‘seed’
   21 |         explicit RNG(uint64_t seed);
      |                     ~        ^~~~~
      |                              )
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:54:19: error: ‘uint64_t’ has not been declared
   54 |         void seed(uint64_t val);
      |                   ^~~~~~~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:69:9: error: ‘uint64_t’ does not name a type
   69 |         uint64_t random();
      |         ^~~~~~~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:6:1: note: ‘uint64_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
    5 | #include <iostream>
  +++ |+#include <cstdint>
    6 | #include <string>
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:75:16: error: ‘uint64_t’ does not name a type
   75 |         inline uint64_t operator ()() {
      |                ^~~~~~~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:75:16: note: ‘uint64_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:83:16: error: ‘uint64_t’ does not name a type
   83 |         inline uint64_t random_range(uint64_t lower, uint64_t upper) {
      |                ^~~~~~~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:83:16: note: ‘uint64_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:118:19: error: ‘uint64_t’ has not been declared
  118 |         void fill(uint64_t *data, size_t len);
      |                   ^~~~~~~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:163:26: error: ‘uint64_t’ does not name a type
  163 |         static constexpr uint64_t max() {
      |                          ^~~~~~~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:163:26: note: ‘uint64_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:168:26: error: ‘uint64_t’ does not name a type
  168 |         static constexpr uint64_t min() {
      |                          ^~~~~~~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:168:26: note: ‘uint64_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:177:9: error: ‘uint64_t’ does not name a type
  177 |         uint64_t state[2]{};
      |         ^~~~~~~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:177:9: note: ‘uint64_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:177:28: warning: extra ‘;’ [-Wpedantic]
  177 |         uint64_t state[2]{};
      |                            ^
      |                            -
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h: In member function ‘bool openage::rng::RNG::probability(double)’:
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:92:30: error: ‘class openage::rng::RNG’ has no member named ‘random’
   92 |                 return this->random() < (RNG::max() * prob);
      |                              ^~~~~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:92:47: error: ‘max’ is not a member of ‘openage::rng::RNG’
   92 |                 return this->random() < (RNG::max() * prob);
      |                                               ^~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h: In member function ‘double openage::rng::RNG::real()’:
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:100:50: error: ‘class openage::rng::RNG’ has no member named ‘random’
  100 |                 return static_cast<double>(this->random()) / RNG::max();
      |                                                  ^~~~~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:100:67: error: ‘max’ is not a member of ‘openage::rng::RNG’
  100 |                 return static_cast<double>(this->random()) / RNG::max();
      |                                                                   ^~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h: At global scope:
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:203:1: error: ‘uint64_t’ does not name a type
  203 | uint64_t time_seed();
      | ^~~~~~~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:203:1: note: ‘uint64_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:210:1: error: ‘uint64_t’ does not name a type
  210 | uint64_t random_seed();
      | ^~~~~~~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:210:1: note: ‘uint64_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.cpp:30:1: error: no declaration matches ‘openage::rng::RNG::RNG(uint64_t)’
   30 | RNG::RNG(uint64_t v1) {
      | ^~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:15:7: note: candidates are: ‘constexpr openage::rng::RNG::RNG(openage::rng::RNG&&)’
   15 | class RNG {
      |       ^~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:15:7: note:                 ‘constexpr openage::rng::RNG::RNG(const openage::rng::RNG&)’
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:48:18: note:                 ‘openage::rng::RNG::RNG(std::istream&)’
   48 |         explicit RNG(std::istream &instream);
      |                  ^~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:39:18: note:                 ‘openage::rng::RNG::RNG(const std::string&)’
   39 |         explicit RNG(const std::string &instr);
      |                  ^~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:29:9: note:                 ‘openage::rng::RNG::RNG(const void*, size_t)’
   29 |         RNG(const void *data, size_t count);
      |         ^~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:15:7: note: ‘class openage::rng::RNG’ defined here
   15 | class RNG {
      |       ^~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.cpp:49:6: error: no declaration matches ‘void openage::rng::RNG::seed(uint64_t)’
   49 | void RNG::seed(uint64_t val) {
      |      ^~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:63:14: note: candidates are: ‘void openage::rng::RNG::seed(const void*, size_t)’
   63 |         void seed(const void *data, size_t count);
      |              ^~~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:54:14: note:                 ‘void openage::rng::RNG::seed(int)’
   54 |         void seed(uint64_t val);
      |              ^~~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:15:7: note: ‘class openage::rng::RNG’ defined here
   15 | class RNG {
      |       ^~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.cpp: In member function ‘void openage::rng::RNG::seed(const void*, size_t)’:
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.cpp:63:9: error: ‘state’ was not declared in this scope; did you mean ‘_xstate’?
   63 |         state[0] = siphash.digest(data, count);
      |         ^~~~~
      |         _xstate
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.cpp: At global scope:
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.cpp:85:10: error: no declaration matches ‘uint64_t openage::rng::RNG::random()’
   85 | uint64_t RNG::random() {
      |          ^~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.cpp:85:10: note: no functions named ‘uint64_t openage::rng::RNG::random()’
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:15:7: note: ‘class openage::rng::RNG’ defined here
   15 | class RNG {
      |       ^~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.cpp:116:6: error: no declaration matches ‘void openage::rng::RNG::fill(uint64_t*, size_t)’
  116 | void RNG::fill(uint64_t *dat, size_t len) {
      |      ^~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:118:14: note: candidate is: ‘void openage::rng::RNG::fill(int*, size_t)’
  118 |         void fill(uint64_t *data, size_t len);
      |              ^~~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.h:15:7: note: ‘class openage::rng::RNG’ defined here
   15 | class RNG {
      |       ^~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.cpp: In member function ‘void openage::rng::RNG::discard(size_t)’:
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.cpp:128:32: error: ‘class openage::rng::RNG’ has no member named ‘state’
  128 |                 nullptr, this->state, len,
      |                                ^~~~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.cpp: In member function ‘void openage::rng::RNG::fill_real(double*, size_t)’:
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.cpp:136:28: error: ‘class openage::rng::RNG’ has no member named ‘state’
  136 |                 dat, this->state, len,
      |                            ^~~~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.cpp: In lambda function:
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.cpp:138:50: error: ‘max’ is not a member of ‘openage::rng::RNG’
  138 |                         d[i] = v / (double) RNG::max();
      |                                                  ^~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.cpp: In member function ‘std::ostream& openage::rng::RNG::to_stream(std::ostream&) const’:
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.cpp:145:27: error: ‘const class openage::rng::RNG’ has no member named ‘state’
  145 |         if ((out << this->state[0] << " ").good() &&
      |                           ^~~~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.cpp:146:28: error: ‘const class openage::rng::RNG’ has no member named ‘state’
  146 |             !(out << this->state[1]).fail()) {
      |                            ^~~~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.cpp: In member function ‘std::istream& openage::rng::RNG::from_stream(std::istream&)’:
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.cpp:154:26: error: ‘class openage::rng::RNG’ has no member named ‘state’
  154 |         if ((in >> this->state[0]).good() &&
      |                          ^~~~~
/tmp/makepkg/build/openage-git/src/openage/libopenage/rng/rng.cpp:155:27: error: ‘class openage::rng::RNG’ has no member named ‘state’
  155 |             !(in >> this->state[1]).fail()) {
      |                           ^~~~~
make[2]: *** [libopenage/CMakeFiles/libopenage.dir/build.make:4402: libopenage/CMakeFiles/libopenage.dir/rng/rng.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [CMakeFiles/Makefile2:3420: libopenage/CMakeFiles/libopenage.dir/all] Error 2
make: *** [Makefile:166: all] Error 2

gcc --version | head -n1: gcc (GCC) 13.1.1 20230429
on Artix GNU/Linux (rolling release).

thanks a lot! fix is on the way in #1512 :)