Skip to content

[C++20][Modules] Can't use same legacy header in different modules #60027

Closed
@SasisaDev

Description

@SasisaDev
module;

#include <concepts>

export module Services:Service;
module;

#include <iostream>

export module Log;

Results in this error

D:\VisualStudio\VC\Tools\MSVC\14.34.31933\include\vcruntime_new.h:27:16: error: 'std::align_val_t' has different definitions in different modules; definition in module 'Log.<global>' first difference is enum with specified type 'size_t' (aka 'unsigned long long')
    enum class align_val_t : size_t {};
    ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
D:\VisualStudio\VC\Tools\MSVC\14.34.31933\include\vcruntime_new.h:27:16: note: but in 'Services:Service.<global>' found enum with specified type 'size_t' (aka 'unsigned long long')
    enum class align_val_t : size_t {};
    ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
1 error generated.

Both headers at one point include vcruntime_new.h header.
No using namespace std; used.
Obviously, definitions are not different, they're just not removed by clang when building tree.
I used these commands to build

[PCM] clang++ -std=c++20 -fmodules  -g -O0  -Wall  -DPLATFORM_WINDOWS 
-fprebuilt-module-path=D:\UnixProjects\General\Bismuth\BismuthEngine\Intermediate\Modules  
D:\UnixProjects\General\Bismuth\BismuthEngine\Intermediate\Modules\Engine.lib 
D:\UnixProjects\General\Bismuth\BismuthEngine\Intermediate\Modules\Services.lib 
D:\UnixProjects\General\Bismuth\BismuthEngine\Intermediate\Modules\Engine.lib 
D:\UnixProjects\General\Bismuth\BismuthEngine\Intermediate\Modules\Services.lib 
--precompile D:\UnixProjects\General\Bismuth\BismuthEngine\Source\Engine\Application\Application.cppm
-o D:\UnixProjects\General\Bismuth\BismuthEngine\Intermediate\Modules\Application.pcm 

[LIB] clang++ -std=c++20 -fmodules  -g -O0  -Wall  -DPLATFORM_WINDOWS 
-fprebuilt-module-path=D:\UnixProjects\General\Bismuth\BismuthEngine\Intermediate\Modules  
D:\UnixProjects\General\Bismuth\BismuthEngine\Intermediate\Modules\Engine.lib 
D:\UnixProjects\General\Bismuth\BismuthEngine\Intermediate\Modules\Services.lib 
D:\UnixProjects\General\Bismuth\BismuthEngine\Intermediate\Modules\Engine.lib 
D:\UnixProjects\General\Bismuth\BismuthEngine\Intermediate\Modules\Services.lib 
-c  D:\UnixProjects\General\Bismuth\BismuthEngine\Source\Engine\Application\Application.cppm 
-o D:\UnixProjects\General\Bismuth\BismuthEngine\Intermediate\Modules\Application_temp\Application_interface.obj

[LINKER] lld-link  /lib D:\UnixProjects\General\Bismuth\BismuthEngine\Intermediate\Modules\Engine.lib 
D:\UnixProjects\General\Bismuth\BismuthEngine\Intermediate\Modules\Services.lib     
/out:D:\UnixProjects\General\Bismuth\BismuthEngine\Intermediate\Modules\Application.lib

Metadata

Metadata

Assignees

No one assigned

    Labels

    clang:modulesC++20 modules and Clang Header Modules

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions