Hello,

This is not problem of assert, but rather of the fprintf which assert
calls. Same problem can be triggered by using the plain fprintf(stderr,...)
instead of assert(0).

So I do not think that it makes sense to remap assert as basically all
functions which calls fprintf(stderr,...) are affected.

Is not it just the _O_U8TEXT which is broken?

On Monday 08 September 2025 15:38:09 Kirill Makurin wrote:
> Consider the following code:
> 
> ```
> #include <assert.h>
> #include <fcntl.h>
> #include <io.h>
> #include <stdio.h>
> 
> int main (void) {
>   _setmode (_fileno (stderr), _O_U8TEXT);
>   assert (0);
>   return 0;
> }
> ```
> 
> When compiled with MSVC, it properly prints message about failed assertion. 
> When it is compiled with mingw-w64's headers (Msys2/UCRT64) it produces no 
> output.
> 
> mingw-w64's assert.h maps assert() macro to _wassert only when _UNICODE or 
> UNICODE is defined. MSVC's assert.h always maps assert() macro to _wassert 
> and even no longer exposes _assert function.
> 
> How about we always map assert() macro to _wassert for msvcr80.dll and later? 
> Since we also emulate _wassert for msvcrt.dll, it should be OK to map it to 
> _wassert for msvcrt.dll as well.
> 
> - Kirill Makurin


_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to