Skip to content

Bug: Compilation fails with gcc-15 with threading enabled #165

Description

@jcarrete5

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

  1. Ensure you are using a build of gcc with threading enabled
  2. cmake -B build -S reference
  3. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    Fields

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions