microsoft / microsoft/wil

Compile error in WI_IsFlagClear / WI_IsFlagSet when using C++ modules

Open
#304 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

msvc
Dominant language
C++
Stars
3k
Forks
300
Avg merge
19h 12m
Merged PRs (30d)
1

Description

Demo:
https://github.com/lanyizi/BakaMsvc

Use the CMake preset MSVC x86 Debug defined in the CMakePresets.json to build the project, it fails to build on Visual Studio 17.5.0.
The compiler complains that there is no suitable binary operator& for wil::details::ReportFailureOptions and wil::FailureFlags.
https://github.com/microsoft/wil/blob/d0849dca2c466bdce38a32a7e4265b193b8fb0f9/include/wil/result_macros.h#L3695
https://github.com/microsoft/wil/blob/d0849dca2c466bdce38a32a7e4265b193b8fb0f9/include/wil/result_macros.h#L3697
https://github.com/microsoft/wil/blob/d0849dca2c466bdce38a32a7e4265b193b8fb0f9/include/wil/result_macros.h#L3706
https://github.com/microsoft/wil/blob/d0849dca2c466bdce38a32a7e4265b193b8fb0f9/include/wil/result_macros.h#L3717

Full build log

>------ 全部重新生成 已启动: 项目: BakaMsvc,配置: msvc-x86 ------
  MSBuild version 17.5.0+6f08c67f3 for .NET Framework
  
  MSBuild version 17.5.0+6f08c67f3 for .NET Framework
  
    Checking Build System
    Building Custom Rule C:/Users/lanyi/source/repos/lanyizi/BakaMsvc/CMakeLists.txt
    正在扫描源以查找模块依赖项...
    address_table.ixx
    正在编译...
    address_table.ixx
  C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\um\winnt.h(1005,1): message : 很抱歉: 由于“C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\um\winnt.h(1010,5)”处的表达式或语句无法识别,无法将“ULONGLONG Int64ShllMod32(ULONGLONG,DWORD)”的“inline”函数定义写入模块 [C:\Users\lanyi\source\repos\lanyizi\BakaMsvc\out\build\msvc-x86\BakaMsvc.vcxproj]
    如果可能,请在此处提供重现: https://developercommunity.visualstudio.com
  C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\um\winnt.h(1021,1): message : 很抱歉: 由于“C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\um\winnt.h(1026,5)”处的表达式或语句无法识别,无法将“LONGLONG Int64ShraMod32(LONGLONG,DWORD)”的“inline”函数定义写入模块 [C:\Users\lanyi\source\repos\lanyizi\BakaMsvc\out\build\msvc-x86\BakaMsvc.vcxproj]
    如果可能,请在此处提供重现: https://developercommunity.visualstudio.com
  C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\um\winnt.h(1037,1): message : 很抱歉: 由于“C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\um\winnt.h(1042,5)”处的表达式或语句无法识别,无法将“ULONGLONG Int64ShrlMod32(ULONGLONG,DWORD)”的“inline”函数定义写入模块 [C:\Users\lanyi\source\repos\lanyizi\BakaMsvc\out\build\msvc-x86\BakaMsvc.vcxproj]
    如果可能,请在此处提供重现: https://developercommunity.visualstudio.com
  C:\Users\lanyi\source\repos\lanyizi\BakaMsvc\out\build\msvc-x86\vcpkg_installed\x86-windows-static\include\wil\result_macros.h(3244,24): message : 很抱歉: 由于“C:\Users\lanyi\source\repos\lanyizi\BakaMsvc\out\build\msvc-x86\vcpkg_installed\x86-windows-static\include\wil\result_macros.h(3246,13)”处的表达式或语句无法识别,无法将“HRESULT wil::details::ResultFromExceptionSeh(const wil::DiagnosticsInfo &,void *,wil::SupportedExceptions,wil::details::IFunctor &) noexcept”的“inline”函数定义写入模块 [C:\Users\lanyi\source\repos\lanyizi\BakaMsvc\out\build\msvc-x86\BakaMsvc.vcxproj]
    如果可能,请在此处提供重现: https://developercommunity.visualstudio.com
    native_dll.cpp
C:\Users\lanyi\source\repos\lanyizi\BakaMsvc\out\build\msvc-x86\vcpkg_installed\x86-windows-static\include\wil\result_macros.h(3695,17): error C2676: 二进制“&”:“wil::details::ReportFailureOptions”不定义该运算符或到预定义运算符可接收的类型的转换 
  C:\Users\lanyi\source\repos\lanyizi\BakaMsvc\native_dll.cpp(8,1): message : 查看对正在编译的函数 模板 实例化“void wil::details::ReportFailure_NoReturn<wil::FailureType::FailFast>(void *,unsigned int,PCSTR,PCSTR,PCSTR,void *,const wil::details::ResultStatus &,PCWSTR,wil::details::ReportFailureOptions)”的引用 [C:\Users\lanyi\source\repos\lanyizi\BakaMsvc\out\build\msvc-x86\BakaMsvc.vcxproj]
C:\Users\lanyi\source\repos\lanyizi\BakaMsvc\out\build\msvc-x86\vcpkg_installed\x86-windows-static\include\wil\result_macros.h(3697,53): error C2676: 二进制“&”:“wil::details::ReportFailureOptions”不定义该运算符或到预定义运算符可接收的类型的转换 
C:\Users\lanyi\source\repos\lanyizi\BakaMsvc\out\build\msvc-x86\vcpkg_installed\x86-windows-static\include\wil\result_macros.h(3706,49): error C2676: 二进制“&”:“wil::FailureFlags”不定义该运算符或到预定义运算符可接收的类型的转换 
C:\Users\lanyi\source\repos\lanyizi\BakaMsvc\out\build\msvc-x86\vcpkg_installed\x86-windows-static\include\wil\result_macros.h(3717,21): error C2676: 二进制“&”:“wil::details::ReportFailureOptions”不定义该运算符或到预定义运算符可接收的类型的转换 

全部重新生成 失败。

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce with the MSVC x86 Debug CMake preset from CMakePresets.json in the linked BakaMsvc demo. Inspect the WI_IsFlagClear/WI_IsFlagSet references around lines 3695, 3697, 3706, and 3717 of include/wil/result_macros.h, using native_dll.cpp as the triggering entry point. Done means the C++ module build completes without the reported operator errors.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
compilers
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
28/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.