MikeMirzayanov / testlib

C++ library to develop competitive programming problems
MIT License
1.44k stars 480 forks source link

gcc13 requires include `<cstdint>` for `uint64_t` #173

Closed mizar closed 1 year ago

mizar commented 1 year ago

related: https://github.com/yosupo06/library-checker-problems/pull/983

Example of test procedure (docker + archlinux)

docker run -it --rm archlinux:base-devel-20230430.0.146624
# install clang, git
pacman -Sy --noconfirm clang git

# checkout testlib
# https://github.com/MikeMirzayanov/testlib/tree/7fd543d7e6ae36a04bb382c5ebb4eee254362c6a
mkdir -p ~/testlib
cd ~/testlib
git init
git remote add origin https://github.com/MikeMirzayanov/testlib.git
git fetch --depth 1 origin 7fd543d7e6ae36a04bb382c5ebb4eee254362c6a
git checkout FETCH_HEAD

# g++ version check
## gcc version 12.2.1 20230201 (GCC)
g++ -v

# clang++ version check
## clang version 15.0.7
clang++ -v

# g++ run tests (some tests pass, cause error `empty_file`)
~/testlib/tests/t.sh

# clang++ run tests (some tests pass, cause error `empty_file`)
~/testlib/tests/run.sh clang++ 11 v0 $*

# update gcc
pacman -Sy --noconfirm gcc

# g++ version check
## gcc version 13.1.1 20230429 (GCC)
g++ -v

# clang++ version check
## clang version 15.0.7
clang++ -v

# g++ run tests (cause error `uint64_t`)
~/testlib/tests/t.sh

# clang++ run tests (cause error `uint64_t`)
~/testlib/tests/run.sh clang++ 11 v0 $*

Example of test procedure (docker + ubuntu 23.04)

docker run -it --rm ubuntu:23.04
apt update && apt install -y ca-certificates

# use mirror sources
# Note that connecting to an https mirror site before installing the `ca-certificates` package will trigger a warning
# `No system certificates available. Try installing ca-certificates.`
## sed -i.bak -r 's!(deb|deb-src) http://archive.ubuntu.com/\S+!\1 mirror://mirrors.ubuntu.com/mirrors.txt!' /etc/apt/sources.list && apt update

# install clang, g++-12, git
apt install -y clang-13 clang-14 clang-15 clang-16 g++-12 git

# checkout testlib
# https://github.com/MikeMirzayanov/testlib/tree/7fd543d7e6ae36a04bb382c5ebb4eee254362c6a
mkdir -p ~/testlib
cd ~/testlib
git init
git remote add origin https://github.com/MikeMirzayanov/testlib.git
git fetch --depth 1 origin 7fd543d7e6ae36a04bb382c5ebb4eee254362c6a
git checkout FETCH_HEAD

# g++ version check
## gcc version 12.2.0 (Ubuntu 12.2.0-17ubuntu1)
g++-12 -v

# clang++ version check
## Ubuntu clang version 13.0.1-11ubuntu14
## Ubuntu clang version 14.0.6
## Ubuntu clang version 15.0.7
## Ubuntu clang version 16.0.0 (1~exp5ubuntu3)
clang++-13 -v
clang++-14 -v
clang++-15 -v
clang++-16 -v

# g++ run tests (some tests pass, cause error `empty_file`)
~/testlib/tests/run.sh g++ 11 v12 $*

# clang++ run tests (some tests pass, cause error `empty_file`)
~/testlib/tests/run.sh clang++ 11 v13 $*
~/testlib/tests/run.sh clang++ 11 v14 $*
~/testlib/tests/run.sh clang++ 11 v15 $*
~/testlib/tests/run.sh clang++ 11 v16 $*

# install g++-13
apt install -y g++-13

# g++ version check
## gcc version 12.2.0 (Ubuntu 12.2.0-17ubuntu1)
## gcc version 13.0.1 20230320 (experimental) [master r13-6759-g5194ad1958c] (Ubuntu 13-20230320-1ubuntu1)
g++-12 -v
g++-13 -v

# clang++ version check
## Ubuntu clang version 13.0.1-11ubuntu14
## Ubuntu clang version 14.0.6
## Ubuntu clang version 15.0.7
## Ubuntu clang version 16.0.0 (1~exp5ubuntu3)
clang++-13 -v
clang++-14 -v
clang++-15 -v
clang++-16 -v

# g++ run tests (some tests pass, cause error `empty_file`)
~/testlib/tests/run.sh g++ 11 v12 $*

# g++ run tests (cause error `uint64_t`)
~/testlib/tests/run.sh g++ 11 v13 $*

# clang++ run tests (cause error `uint64_t`)
~/testlib/tests/run.sh clang++ 11 v13 $*
~/testlib/tests/run.sh clang++ 11 v14 $*
~/testlib/tests/run.sh clang++ 11 v15 $*
~/testlib/tests/run.sh clang++ 11 v16 $*

Example of error (gcc 12.2.1, g++):

[INFO] Filter CPP: g++
[INFO] Filter standards: 11
[INFO] Filter versions: 0

GNU-like compilers:
    g++

Standards:
    --std=c++11
Valgrind mode is OFF
Compiler 'g++' has been found
Running tests (g++@--std=c++11)

Running test-000_compile-all-cpp (g++@--std=c++11)
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/12.2.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /build/gcc/src/gcc/configure --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++,d --enable-bootstrap --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --with-build-config=bootstrap-lto --with-linker-hash-style=gnu --with-system-zlib --enable-__cxa_atexit --enable-cet=auto --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object --enable-libstdcxx-backtrace --enable-link-serialization=1 --enable-linker-build-id --enable-lto --enable-multilib --enable-plugin --enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch --disable-werror
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.2.1 20230201 (GCC)
Compiling /root/testlib/tests/../generators/gen-bipartite-graph.cpp, running: g++  --std=c++11 -Wpedantic -Werror -I/root/testlib/tests/.. -ogen-bipartite-graph -O2 /root/testlib/tests/../generators/gen-bipartite-graph.cpp
[SUCCESS] /root/testlib/tests/../generators/gen-bipartite-graph.cpp compiled

(snip)

Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/12.2.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /build/gcc/src/gcc/configure --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++,d --enable-bootstrap --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --with-build-config=bootstrap-lto --with-linker-hash-style=gnu --with-system-zlib --enable-__cxa_atexit --enable-cet=auto --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object --enable-libstdcxx-backtrace --enable-link-serialization=1 --enable-linker-build-id --enable-lto --enable-multilib --enable-plugin --enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch --disable-werror
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.2.1 20230201 (GCC)
Compiling /root/testlib/tests/../empty_file.cpp, running: g++  --std=c++11 -Wpedantic -Werror -I/root/testlib/tests/.. -oempty_file -O2 /root/testlib/tests/../empty_file.cpp
/usr/sbin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../lib/Scrt1.o: in function `_start':
(.text+0x1b): undefined reference to `main'
collect2: error: ld returned 1 exit status

Example of error (gcc 12.2.1, clang++):

[INFO] Filter CPP: clang++
[INFO] Filter standards: 11
[INFO] Filter versions: 0

GNU-like compilers:
    clang++

Standards:
    --std=c++11
Valgrind mode is OFF
Compiler 'clang++' has been found
Running tests (clang++@--std=c++11)

Running test-000_compile-all-cpp (clang++@--std=c++11)
clang version 15.0.7
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/sbin
Found candidate GCC installation: /usr/sbin/../lib/gcc/x86_64-pc-linux-gnu/12.2.1
Found candidate GCC installation: /usr/sbin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1
Selected GCC installation: /usr/sbin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Selected multilib: .;@m64
Compiling /root/testlib/tests/../generators/gen-bipartite-graph.cpp, running: clang++  --std=c++11 -Wpedantic -Werror -I/root/testlib/tests/.. -ogen-bipartite-graph -O2 /root/testlib/tests/../generators/gen-bipartite-graph.cpp
[SUCCESS] /root/testlib/tests/../generators/gen-bipartite-graph.cpp compiled

(snip)

clang version 15.0.7
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/sbin
Found candidate GCC installation: /usr/sbin/../lib/gcc/x86_64-pc-linux-gnu/12.2.1
Found candidate GCC installation: /usr/sbin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1
Selected GCC installation: /usr/sbin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Selected multilib: .;@m64
Compiling /root/testlib/tests/../empty_file.cpp, running: clang++  --std=c++11 -Wpedantic -Werror -I/root/testlib/tests/.. -oempty_file -O2 /root/testlib/tests/../empty_file.cpp
/usr/sbin/ld: /usr/sbin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../lib64/Scrt1.o: in function `_start':
(.text+0x1b): undefined reference to `main'
clang-15: error: linker command failed with exit code 1 (use -v to see invocation)

Example of error (gcc 13.1.1, g++):

[INFO] Filter CPP: g++
[INFO] Filter standards: 11
[INFO] Filter versions: 0

GNU-like compilers:
    g++

Standards:
    --std=c++11
Valgrind mode is OFF
Compiler 'g++' has been found
Running tests (g++@--std=c++11)

Running test-000_compile-all-cpp (g++@--std=c++11)
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/13.1.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /build/gcc/src/gcc/configure --enable-languages=ada,c,c++,d,fortran,go,lto,objc,obj-c++ --enable-bootstrap --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --with-build-config=bootstrap-lto --with-linker-hash-style=gnu --with-system-zlib --enable-__cxa_atexit --enable-cet=auto --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object --enable-libstdcxx-backtrace --enable-link-serialization=1 --enable-linker-build-id --enable-lto --enable-multilib --enable-plugin --enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch --disable-werror
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 13.1.1 20230429 (GCC)
Compiling /root/testlib/tests/../generators/gen-bipartite-graph.cpp, running: g++  --std=c++11 -Wpedantic -Werror -I/root/testlib/tests/.. -ogen-bipartite-graph -O2 /root/testlib/tests/../generators/gen-bipartite-graph.cpp
In file included from /root/testlib/tests/../generators/gen-bipartite-graph.cpp:1:
/root/testlib/tests/../testlib.h: In member function ‘std::vector<T> random_t::distinct(int, T, T)’:
/root/testlib/tests/../testlib.h:1136:9: error: ‘uint64_t’ was not declared in this scope
 1136 |         uint64_t n = to - from + 1;
      |         ^~~~~~~~
/root/testlib/tests/../testlib.h:207:1: note: ‘uint64_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
  206 | #   include <unistd.h>
  +++ |+#include <cstdint>
  207 | #endif
/root/testlib/tests/../testlib.h:1137:30: error: ‘n’ was not declared in this scope
 1137 |         if (uint64_t(size) > n)
      |                              ^
/root/testlib/tests/../testlib.h:1142:32: error: ‘n’ was not declared in this scope
 1142 |             expected += double(n) / double(n - i + 1);
      |                                ^
/root/testlib/tests/../testlib.h:1144:31: error: ‘n’ was not declared in this scope
 1144 |         if (expected < double(n)) {
      |                               ^

Example of error (gcc 13.1.1, clang++):

[INFO] Filter CPP: clang++
[INFO] Filter standards: 11
[INFO] Filter versions: 0

GNU-like compilers:
    clang++

Standards:
    --std=c++11
Valgrind mode is OFF
Compiler 'clang++' has been found
Running tests (clang++@--std=c++11)

Running test-000_compile-all-cpp (clang++@--std=c++11)
clang version 15.0.7
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/sbin
Found candidate GCC installation: /usr/sbin/../lib/gcc/x86_64-pc-linux-gnu/13.1.1
Found candidate GCC installation: /usr/sbin/../lib64/gcc/x86_64-pc-linux-gnu/13.1.1
Selected GCC installation: /usr/sbin/../lib64/gcc/x86_64-pc-linux-gnu/13.1.1
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Selected multilib: .;@m64
Compiling /root/testlib/tests/../generators/gen-bipartite-graph.cpp, running: clang++  --std=c++11 -Wpedantic -Werror -I/root/testlib/tests/.. -ogen-bipartite-graph -O2 /root/testlib/tests/../generators/gen-bipartite-graph.cpp
In file included from /root/testlib/tests/../generators/gen-bipartite-graph.cpp:1:
/root/testlib/tests/../testlib.h:1136:9: error: unknown type name 'uint64_t'
        uint64_t n = to - from + 1;
        ^
/root/testlib/tests/../testlib.h:1137:13: error: use of undeclared identifier 'uint64_t'
        if (uint64_t(size) > n)
            ^
2 errors generated.
MikeMirzayanov commented 1 year ago

Thanks. Can you confirm that now it is fixed?

MikeMirzayanov commented 1 year ago

It seems, now it is fixed