Skip to content

add_tests with build_should_pass causes jobgraph error with module dependencies #6991

@Shiffted

Description

@Shiffted

Xmake Version

3.0.3, 3.0.4, dev

Operating System Version and Architecture

Windows 11, Ubuntu 24.04

Describe Bug

If multiple targets with add_tests have a common dependency that contains modules and at least one has build_should_pass set to true it will result in a jobgraph error.
error: job(module_dep/modules/parse) not found in jobgraph(<jobgraph:prepare/11>)

Expected Behavior

No error.

Project Configuration

add_rules("mode.debug", "mode.release")
set_languages("c++23")
set_policy("build.c++.modules.std", false)

target("module_dep")
    set_kind("moduleonly")
    add_files("src/*.ixx")

target("module_target1")
    set_kind("moduleonly")
    add_files("src/*.ixx")

    add_deps("module_dep")
    add_tests("tests", {kind = "binary", files = "src/main.cpp", build_should_pass = true})

target("module_target2")
    set_kind("moduleonly")
    add_files("src/*.ixx")

    add_deps("module_dep")
    add_tests("tests", {kind = "binary", files = "src/main.cpp", build_should_pass = true})

or

add_rules("mode.debug", "mode.release")
set_languages("c++23")
set_policy("build.c++.modules.std", false)

target("module_dep")
    set_kind("moduleonly")
    add_files("src/*.ixx")

target("module_target")
    set_kind("moduleonly")
    add_files("src/*.ixx")

    add_deps("module_dep")
    add_tests("test", {kind = "binary", files = "src/main.cpp", build_should_pass = true})
    add_tests("test2", {kind = "binary", files = "src/main.cpp", build_should_pass = true})

Additional Information and Error Logs

> xmake test -vD
checking for platform ... windows
checking for architecture ... x64
checking for cl.exe ... C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\bin\HostX64\x64\cl.exe
checking for Microsoft C/C++ Compiler (x64) ... ok
checking for Microsoft Visual Studio (x64) version ... 2022
checkinfo: cannot runv(nim.exe --version), No such file or directory
checking for nim ... no
checking for cl.exe ... C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\bin\HostX64\x64\cl.exe
checking for the c++ compiler (cxx) ... cl.exe
checking for C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\bin\HostX64\x64\cl.exe ... c:\program files\microsoft visual studio\2022\community\vc\tools\msvc\14.44.35207\bin\hostx64\x64\cl.exe
checking for flags (-O2) ... ok
> cl.exe "-O2" "-nologo"
checking for flags (-std:c++23) ... no
> cl.exe "-std:c++23" "-nologo"
checking for flags (-std:c++latest) ... ok
> cl.exe "-std:c++latest" "-nologo"
checking for flags (-DNDEBUG) ... ok
> cl.exe "-DNDEBUG" "-nologo"
<module_target1_tests> reuse src\main.ixx from <module_dep>
checking for flags (cl_scan_dependencies) ... ok
> cl.exe "-scanDependencies" "F:\tmp\.xmake\251103\_a568eb315a40662426746d5c6e508d93.json" "-nologo"
checking for flags (cl_ifc_output) ... ok
> cl.exe "-ifcOutput" "F:\tmp\.xmake\251103\_25dd8841b2d2d9cc07d5fa25bff8d8c9" "-nologo"
[  1%]: <module_target1_tests> generating.module.deps src\main.cpp
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\bin\HostX64\x64\cl.exe -nologo -MD -O2 -std:c++latest /EHsc -DNDEBUG -TP -scanDependencies build\.gens\module_target1_tests\windows\x64\release\rules\bmi\cache\scans\f5de46fe63db0b71\main.cpp.module.json src\main.cpp -ifcOutput build\.gens\module_target1_tests\windows\x64\release\rules\bmi\cache\scans\f5de46fe63db0b71 -Fobuild\.objs\module_target1_tests\windows\x64\release\src\main.cpp.obj
main.cpp
[  1%]: <module_dep> generating.module.deps src\main.ixx
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\bin\HostX64\x64\cl.exe -nologo -MD -O2 -std:c++latest /EHsc -DNDEBUG -TP -scanDependencies build\.gens\module_dep\windows\x64\release\rules\bmi\cache\scans\1b2c54ca16e3c327\main.ixx.module.json src\main.ixx -ifcOutput build\.gens\module_dep\windows\x64\release\rules\bmi\cache\scans\1b2c54ca16e3c327 -Fobuild\.objs\module_dep\windows\x64\release\src\main.ixx.obj
main.ixx
checking for flags (cl_reference) ... ok
> cl.exe "-reference" "Foo=F:\tmp\.xmake\251103\_abb5a4e8c81e23999ce40e7d0690a295" "-nologo"
checking for flags (cl_header_unit_quote) ... ok
> cl.exe "-std:c++latest" "-headerUnit:quote" "foo.h=F:\tmp\.xmake\251103\_0ca65db7363eef7fb5994b4a1c7e7131" "-nologo"
checking for flags (cl_header_unit_angle) ... ok
> cl.exe "-std:c++latest" "-headerUnit:angle" "foo.h=F:\tmp\.xmake\251103\_0ca65db7363eef7fb5994b4a1c7e7131" "-nologo"
checking for flags (cl_ifc_only) ... ok
> cl.exe "-ifcOnly" "-nologo"
checking for flags (cl_interface) ... ok
> cl.exe "-interface" "-nologo"
checking for flags (cl_internal_partition) ... ok
> cl.exe "-internalPartition" "-nologo"
[ 35%]: <module_dep> compiling.module.release foo
"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.44.35207\\bin\\HostX64\\x64\\cl.exe" -c -nologo -MD -O2 -std:c++latest /EHsc -DNDEBUG -TP -interface -ifcOutput build\.gens\module_dep\windows\x64\release\rules\bmi\cache\interfaces\1b2c54ca16e3c327\foo.ifc -Fobuild\.objs\module_dep\windows\x64\release\src\main.ixx.obj src\main.ixx
[ 71%]: compiling.release src\main.cpp
"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.44.35207\\bin\\HostX64\\x64\\cl.exe" -c -nologo -MD -O2 -std:c++latest /EHsc -DNDEBUG -reference foo=build\.gens\module_dep\windows\x64\release\rules\bmi\cache\interfaces\1b2c54ca16e3c327\foo.ifc -Fobuild\.objs\module_target1_tests\windows\x64\release\src\main.cpp.obj src\main.cpp
checking for flags (cl_sourceDependencies) ... ok
> cl.exe "/sourceDependencies" "F:\tmp\.xmake\251103\_114132ea3dcaa71ea3bd6344a0ba9be5.json" "-nologo"
checking for link.exe ... C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\bin\HostX64\x64\link.exe
checking for the linker (ld) ... link.exe
[ 83%]: linking.release module_target1_tests.exe
"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.44.35207\\bin\\HostX64\\x64\\link.exe" -nologo -dynamicbase -nxcompat -machine:x64 /opt:ref /opt:icf -out:build\windows\x64\release\module_target1_tests.exe build\.objs\module_target1_tests\windows\x64\release\src\main.cpp.obj build\.objs\module_dep\windows\x64\release\src\main.ixx.obj /implib:build\windows\x64\release\module_target1_tests.lib
checking for cl.exe ... C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\bin\HostX64\x64\cl.exe
checking for the c compiler (cc) ... cl.exe

build cache stats:
cache directory: build\.build_cache
cache hit rate: 0%
cache hit: 0
cache hit total time: 0.000s
cache miss: 0
cache miss total time: 0.000s
new cached files: 0
remote cache hit: 0
remote new cached files: 0
preprocess failed: 0
compile fallback count: 0
compile total time: 0.000s

running tests ...
[ 50%]: running.test module_target1/tests
[100%]: running.test module_target2/tests
@programdir\actions\build\main.lua:161: @programdir\modules\async\jobgraph.lua:164: job(module_dep/modules/parse) not found in jobgraph(<jobgraph:prepare/11>)
stack traceback:
    [C]: in function 'error'
    [@programdir\core\base\os.lua:1093]: in function 'raiselevel'
    [@programdir\core\sandbox\modules\utils.lua:143]: in function 'assert'
    [@programdir\modules\async\jobgraph.lua:164]: in function 'add_orders'
    [@programdir\rules\c++\modules\scanner.lua:592]: in function '_schedule_module_dependencies_scan'
    [@programdir\rules\c++\modules\scanner.lua:923]:
    [@programdir\modules\private\action\build\target.lua:423]: in function 'add_filejobs_for_script'
    [@programdir\modules\private\action\build\target.lua:623]: in function 'callback'
    [@programdir\modules\async\jobgraph.lua:133]: in function 'group'
    [@programdir\modules\private\action\build\target.lua:611]: in function 'callback'
    [@programdir\modules\async\jobgraph.lua:133]: in function 'group'
    [@programdir\modules\private\action\build\target.lua:599]: in function 'add_filejobs_with_stage'
    [@programdir\modules\private\action\build\target.lua:660]: in function 'add_filejobs'
    [@programdir\modules\private\action\build\prepare_files.lua:26]:
    [@programdir\modules\private\action\build\target.lua:138]: in function 'add_targetjobs_for_builtin_script'
    [@programdir\modules\private\action\build\target.lua:274]: in function 'callback'
    [@programdir\modules\async\jobgraph.lua:133]: in function 'group'
    [@programdir\modules\private\action\build\target.lua:249]: in function 'add_targetjobs_with_stage'
    [@programdir\modules\private\action\build\target.lua:356]: in function 'add_targetjobs'
    [@programdir\modules\private\action\build\target.lua:372]: in function 'add_targetjobs_and_deps'
    [@programdir\modules\private\action\build\target.lua:375]: in function 'add_targetjobs_and_deps'
    [@programdir\modules\private\action\build\target.lua:392]: in function 'get_targetjobs'
    [@programdir\modules\private\action\build\target.lua:785]: in function 'run_targetjobs'
    [@programdir\actions\build\build.lua:34]: in function '_prepare'
    [@programdir\actions\build\build.lua:57]:
    [@programdir\actions\build\main.lua:112]: in function '_do_build'
    [@programdir\actions\build\main.lua:127]:


report of tests:
[ 50%]: module_target1/tests  passed 0.000s
[100%]: module_target2/tests  failed 0.000s
errors: build\.gens\module_target2_tests\windows\x64\release\tests\module_target2\tests.errors.log

Detailed summary:
Failed tests:
 - module_target2/tests

50% tests passed, 1 test(s) failed out of 2, spent 0.000s
error: @programdir\core\main.lua:272: stack traceback:
    [C]: in function 'error'
    [@programdir\core\base\os.lua:1104]:
    [@programdir\actions\test\main.lua:447]: in function '_run_tests'
    [@programdir\actions\test\main.lua:588]:
    [C]: in function 'xpcall'
    [@programdir\core\base\utils.lua:246]:
    [@programdir\core\base\task.lua:495]: in function 'run'
    [@programdir\core\main.lua:270]: in function 'cotask'
    [@programdir\core\base\scheduler.lua:514]:

stack traceback:
        [C]: in function 'error'
        @programdir\core\base\os.lua:1093: in function 'base/os.raiselevel'
        (...tail calls...)
        @programdir\core\main.lua:272: in upvalue 'cotask'
        @programdir\core\base\scheduler.lua:514: in function <@programdir\core\base\scheduler.lua:507>

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions