-
-
Notifications
You must be signed in to change notification settings - Fork 182
Open
Labels
bugSomething isn't workingSomething isn't working
Description
Environment
toml++ version and/or commit hash:
Compiler:
GCC 15.2.0
C++ standard mode:
C++23
Target arch:
x86_64-pc-linux-gnu
Library configuration overrides:
TOMLPLUSPLUS_BUILD_MODULES=ON
Relevant compilation flags:
Describe the bug
cmake -G Ninja ..
output:
-- The C compiler identification is GNU 15.2.0
-- The CXX compiler identification is GNU 15.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
CMake Warning (dev) at /usr/local/share/cmake-4.0/Modules/Compiler/CMakeCommonCompilerMacros.cmake:248 (cmake_language):
CMake's support for `import std;` in C++23 and newer is experimental. It
is meant only for experimentation and feedback to CMake developers.
Call Stack (most recent call first):
/usr/local/share/cmake-4.0/Modules/CMakeDetermineCompilerSupport.cmake:113 (cmake_create_cxx_import_std)
/usr/local/share/cmake-4.0/Modules/CMakeTestCXXCompiler.cmake:83 (CMAKE_DETERMINE_COMPILER_SUPPORT)
CMakeLists.txt:8 (project)
This warning is for project developers. Use -Wno-dev to suppress it.
-- Detecting CXX compile features - done
-- Building C++ modules (CMake 4.0.0 supports modules)
-- Configuring done (1.0s)
CMake Warning (dev) in tomlplusplus/src/modules/CMakeLists.txt:
Target "tomlplusplus_modules" has source file
/root/demo/tomlplusplus/src/modules/tomlplusplus.cppm
in a "FILE_SET TYPE CXX_MODULES" multiple times.
This warning is for project developers. Use -Wno-dev to suppress it.
-- Generating done (0.1s)
-- Build files have been written to: /root/demo/build
ninja -v
output:
[1/11] /usr/bin/c++ -std=gnu++23 -fmodule-only -E -x c++ /usr/include/c++/15.2.0/bits/std.compat.cc -MT CMakeFiles/__CMAKE__CXX23@synth_a252cf90f7bd.dir/906157ab5ab1.bmi.ddi -MD -MF CMakeFiles/__CMAKE__CXX23@synth_a252cf90f7bd.dir/906157ab5ab1.bmi.ddi.d -fmodules-ts -fdeps-file=CMakeFiles/__CMAKE__CXX23@synth_a252cf90f7bd.dir/906157ab5ab1.bmi.ddi -fdeps-target=CMakeFiles/__CMAKE__CXX23@synth_a252cf90f7bd.dir/906157ab5ab1.bmi -fdeps-format=p1689r5 -o CMakeFiles/__CMAKE__CXX23@synth_a252cf90f7bd.dir/906157ab5ab1.bmi.ddi.i
[2/11] /usr/bin/c++ -std=gnu++23 -fmodule-only -E -x c++ /usr/include/c++/15.2.0/bits/std.cc -MT CMakeFiles/__CMAKE__CXX23@synth_a252cf90f7bd.dir/c80ddc02f13e.bmi.ddi -MD -MF CMakeFiles/__CMAKE__CXX23@synth_a252cf90f7bd.dir/c80ddc02f13e.bmi.ddi.d -fmodules-ts -fdeps-file=CMakeFiles/__CMAKE__CXX23@synth_a252cf90f7bd.dir/c80ddc02f13e.bmi.ddi -fdeps-target=CMakeFiles/__CMAKE__CXX23@synth_a252cf90f7bd.dir/c80ddc02f13e.bmi -fdeps-format=p1689r5 -o CMakeFiles/__CMAKE__CXX23@synth_a252cf90f7bd.dir/c80ddc02f13e.bmi.ddi.i
[3/11] /usr/local/bin/cmake -E cmake_ninja_dyndep --tdi=CMakeFiles/__CMAKE__CXX23@synth_a252cf90f7bd.dir/CXXDependInfo.json --lang=CXX --modmapfmt=gcc --dd='CMakeFiles/__CMAKE__CXX23@synth_a252cf90f7bd.dir/CXX.dd' @'CMakeFiles/__CMAKE__CXX23@synth_a252cf90f7bd.dir/CXX.dd'.rsp
[4/11] /usr/bin/c++ -isystem /root/demo/tomlplusplus/include -std=gnu++23 -E -x c++ /root/demo/main.cpp -MT CMakeFiles/mytest.dir/main.cpp.o.ddi -MD -MF CMakeFiles/mytest.dir/main.cpp.o.ddi.d -fmodules-ts -fdeps-file=CMakeFiles/mytest.dir/main.cpp.o.ddi -fdeps-target=CMakeFiles/mytest.dir/main.cpp.o -fdeps-format=p1689r5 -o CMakeFiles/mytest.dir/main.cpp.o.ddi.i
[5/11] /usr/bin/c++ -isystem /root/demo/tomlplusplus/include -std=gnu++23 -E -x c++ /root/demo/tomlplusplus/src/modules/tomlplusplus.cppm -MT tomlplusplus/src/modules/CMakeFiles/tomlplusplus_modules.dir/tomlplusplus.cppm.o.ddi -MD -MF tomlplusplus/src/modules/CMakeFiles/tomlplusplus_modules.dir/tomlplusplus.cppm.o.ddi.d -fmodules-ts -fdeps-file=tomlplusplus/src/modules/CMakeFiles/tomlplusplus_modules.dir/tomlplusplus.cppm.o.ddi -fdeps-target=tomlplusplus/src/modules/CMakeFiles/tomlplusplus_modules.dir/tomlplusplus.cppm.o -fdeps-format=p1689r5 -o tomlplusplus/src/modules/CMakeFiles/tomlplusplus_modules.dir/tomlplusplus.cppm.o.ddi.i
[6/11] /usr/local/bin/cmake -E cmake_ninja_dyndep --tdi=tomlplusplus/src/modules/CMakeFiles/tomlplusplus_modules.dir/CXXDependInfo.json --lang=CXX --modmapfmt=gcc --dd=tomlplusplus/src/modules/CMakeFiles/tomlplusplus_modules.dir/CXX.dd @tomlplusplus/src/modules/CMakeFiles/tomlplusplus_modules.dir/CXX.dd.rsp
[7/11] /usr/local/bin/cmake -E cmake_ninja_dyndep --tdi=CMakeFiles/mytest.dir/CXXDependInfo.json --lang=CXX --modmapfmt=gcc --dd=CMakeFiles/mytest.dir/CXX.dd @CMakeFiles/mytest.dir/CXX.dd.rsp
[8/11] /usr/bin/c++ -isystem /root/demo/tomlplusplus/include -std=gnu++23 -MD -MT tomlplusplus/src/modules/CMakeFiles/tomlplusplus_modules.dir/tomlplusplus.cppm.o -MF tomlplusplus/src/modules/CMakeFiles/tomlplusplus_modules.dir/tomlplusplus.cppm.o.d -fmodules-ts -fmodule-mapper=tomlplusplus/src/modules/CMakeFiles/tomlplusplus_modules.dir/tomlplusplus.cppm.o.modmap -MD -fdeps-format=p1689r5 -x c++ -o tomlplusplus/src/modules/CMakeFiles/tomlplusplus_modules.dir/tomlplusplus.cppm.o -c /root/demo/tomlplusplus/src/modules/tomlplusplus.cppm
[9/11] /usr/bin/c++ -isystem /root/demo/tomlplusplus/include -std=gnu++23 -MD -MT CMakeFiles/mytest.dir/main.cpp.o -MF CMakeFiles/mytest.dir/main.cpp.o.d -fmodules-ts -fmodule-mapper=CMakeFiles/mytest.dir/main.cpp.o.modmap -MD -fdeps-format=p1689r5 -x c++ -o CMakeFiles/mytest.dir/main.cpp.o -c /root/demo/main.cpp
FAILED: CMakeFiles/mytest.dir/main.cpp.o
/usr/bin/c++ -isystem /root/demo/tomlplusplus/include -std=gnu++23 -MD -MT CMakeFiles/mytest.dir/main.cpp.o -MF CMakeFiles/mytest.dir/main.cpp.o.d -fmodules-ts -fmodule-mapper=CMakeFiles/mytest.dir/main.cpp.o.modmap -MD -fdeps-format=p1689r5 -x c++ -o CMakeFiles/mytest.dir/main.cpp.o -c /root/demo/main.cpp
In module imported at /root/demo/main.cpp:1:1:
tomlplusplus: error: failed to read compiled module: Bad file data
tomlplusplus: note: compiled module file is ‘tomlplusplus/src/modules/CMakeFiles/tomlplusplus_modules.dir/tomlplusplus.gcm’
tomlplusplus: fatal error: returning to the gate for a mechanical issue
compilation terminated.
[10/11] : && /usr/local/bin/cmake -E rm -f tomlplusplus/src/modules/libtomlplusplus_modules.a && /usr/bin/ar qc tomlplusplus/src/modules/libtomlplusplus_modules.a tomlplusplus/src/modules/CMakeFiles/tomlplusplus_modules.dir/tomlplusplus.cppm.o && /usr/bin/ranlib tomlplusplus/src/modules/libtomlplusplus_modules.a && :
ninja: build stopped: subcommand failed.
Steps to reproduce (or a small repro code sample)
Tree:
mytest
├── build
├── CMakeLists.txt
├── main.cpp
└── tomlplusplus
CMakeLists.txt:
cmake_minimum_required(VERSION 4.0.0)
project(mytest)
set(CMAKE_CXX_STANDARD 23)
set(TOMLPLUSPLUS_BUILD_MODULES ON)
add_subdirectory(tomlplusplus)
add_executable(mytest main.cpp)
target_link_libraries(mytest PRIVATE tomlplusplus_modules)
main.cpp:
import tomlplusplus;
int main() {
return 0;
}
Additional information
The "bad data" error occurs during the reading of .gcm
files, specifically when processing namespace metadata. I traced the issue to the module_state::read_namespaces()
function, which triggers an overrun condition when it encounters a namespace with a specific flag combination: export=1
but purview=0
.
I'm not certain whether this represents a bug in GCC, or something else. But I successfully resolved the compilation issue by removing the inline namespace:
// inline namespace literals {
using TOML_NAMESPACE::literals::operator""_toml;
using TOML_NAMESPACE::literals::operator""_tpath;
// }
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working