Problem/Opportunity
There are conflicting type definitions when compiling with gcc-15 with threading enabled. The definitions in reference/include/threads.h conflict with those defined by the standard library.
Build error:
$ cmake --build build/
[11/289] Building C object src/taimpl/CMakeFiles/taimpl.dir/src/internal/client_store.c.o
FAILED: [code=1] src/taimpl/CMakeFiles/taimpl.dir/src/internal/client_store.c.o
/usr/bin/cc -I/home/jasonc/projects/tasecureapi/reference/src/taimpl/include -I/home/jasonc/projects/tasecureapi/reference/src/taimpl/../client/include -I/home/jasonc/projects/tasecureapi/reference/src/taimpl/../util/include -I/home/jasonc/projects/tasecureapi/reference/src/taimpl/include/internal -I/home/jasonc/projects/tasecureapi/reference/src/util/include -I/home/jasonc/projects/tasecureapi/reference/src/util/../client/include -isystem /home/jasonc/projects/tasecureapi/reference/src/taimpl/../../include -D_GNU_SOURCE -fPIC -std=gnu11 -Werror -Wall -Wextra -Wno-unused-parameter -MD -MT src/taimpl/CMakeFiles/taimpl.dir/src/internal/client_store.c.o -MF src/taimpl/CMakeFiles/taimpl.dir/src/internal/client_store.c.o.d -o src/taimpl/CMakeFiles/taimpl.dir/src/internal/client_store.c.o -c /home/jasonc/projects/tasecureapi/reference/src/taimpl/src/internal/client_store.c
In file included from /home/jasonc/projects/tasecureapi/reference/src/taimpl/src/internal/client_store.c:23:
/home/jasonc/projects/tasecureapi/reference/include/threads.h:39:24: error: conflicting types for ‘once_flag’; have ‘pthread_once_t’ {aka ‘int’}
39 | typedef pthread_once_t once_flag;
| ^~~~~~~~~
In file included from /usr/include/stdlib.h:1191,
from /home/jasonc/projects/tasecureapi/reference/src/taimpl/src/internal/client_store.c:22:
/usr/include/bits/types/once_flag.h:24:21: note: previous declaration of ‘once_flag’ with type ‘once_flag’
24 | typedef __once_flag once_flag;
| ^~~~~~~~~
/home/jasonc/projects/tasecureapi/reference/include/threads.h:256:20: error: conflicting types for ‘call_once’; have ‘void(int *, void (*)(void))’
256 | static inline void call_once(once_flag *flag, void (*func)(void))
| ^~~~~~~~~
/usr/include/stdlib.h:1195:13: note: previous declaration of ‘call_once’ with type ‘void(once_flag *, void (*)(void))’
1195 | extern void call_once (once_flag *__flag, void (*__func)(void));
| ^~~~~~~~~
[24/289] Building CXX object src/util/CMakeFiles/util.dir/src/test_process_common_encryption.cpp.o
ninja: build stopped: subcommand failed.
GCC configuration:
$ echo | gcc -xc -E -v -
Using built-in specs.
COLLECT_GCC=gcc
Target: x86_64-pc-linux-gnu
Configured with: /build/gcc/src/gcc/configure --enable-languages=ada,c,c++,d,fortran,go,lto,m2,objc,obj-c++,rust,cobol --enable-bootstrap --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://gitlab.archlinux.org/archlinux/packaging/packages/gcc/-/issues --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 15.2.1 20260209 (GCC)
COLLECT_GCC_OPTIONS='-E' '-v' '-mtune=generic' '-march=x86-64'
/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/cc1 -E -quiet -v - -mtune=generic -march=x86-64 -dumpbase -
ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/../../../../x86_64-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/include
/usr/local/include
/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/include-fixed
/usr/include
End of search list.
# 0 "<stdin>"
# 0 "<built-in>"
# 0 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 0 "<command-line>" 2
# 1 "<stdin>"
COMPILER_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/:/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-E' '-v' '-mtune=generic' '-march=x86-64'
Steps to reproduce
- Ensure you are using a build of
gcc with threading enabled
cmake -B build -S reference
cmake --build build
Expected Behavior
Program should compile.
Actual Behavior
Program does not compile.
Notes (Optional)
If we have threads.h support, maybe we should forgo including the threads.h file provided in reference/include in the build.
Problem/Opportunity
There are conflicting type definitions when compiling with gcc-15 with threading enabled. The definitions in
reference/include/threads.hconflict with those defined by the standard library.Build error:
GCC configuration:
Steps to reproduce
gccwith threading enabledcmake -B build -S referencecmake --build buildExpected Behavior
Program should compile.
Actual Behavior
Program does not compile.
Notes (Optional)
If we have
threads.hsupport, maybe we should forgo including thethreads.hfile provided inreference/includein the build.