AaronBallman wrote: > This warning creates issues under Windows, where reinterpret-casting from > FARPROC to the actual function type is common. > > #92738 > [boostorg/interprocess#259](https://github.com/boostorg/interprocess/issues/259) > > Reinterpret-casting a function pointer to another function pointer type, then > back to the original, is well defined in C++. In contrast, using `void*` for > the same purpose is not.
I think the diagnostic is working as expected in this case -- we cannot tell that the user is doing a round-trip cast, we can only see there's a single cast between incompatible function pointer types. ``` warning: cast from 'FARPROC' (aka 'int (*)() __attribute__((stdcall))') to 'GetSystemTimeAsFileTimePtr' (aka 'void (*)(_FILETIME *) __attribute__((stdcall))') converts to incompatible function type [-Wcast-function-type-mismatch] ``` or ``` 2025-03-12T16:47:36.5368174Z .\boost/interprocess/detail/win32_api.hpp(1122,59): error: cast from 'farproc_t' (aka 'int (*)() __attribute__((stdcall))') to 'NtQuerySystemInformation_t' (aka 'long (*)(int, void *, unsigned long, unsigned long *) __attribute__((stdcall))') converts to incompatible function type [-Werror,-Wcast-function-type-mismatch] 2025-03-12T16:47:36.5371616Z 1122 | NtQuerySystemInformation_t pNtQuerySystemInformation = reinterpret_cast<NtQuerySystemInformation_t> 2025-03-12T16:47:36.5373049Z | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2025-03-12T16:47:36.5373933Z 1123 | (dll_func::get(dll_func::NtQuerySystemInformation)); ``` is exactly what this is intended to diagnose. Did you have a change in mind you'd like to see? https://github.com/llvm/llvm-project/pull/86131 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits