crt: fix compilation of tests for mbrlen, mbrtowc and wcrtomb funtions

Compilation of tests for mbrlen, mbrtowc and wcrtomb fails with UCRT.
UCRT's mbstate_t is a structure and cannot be directly assigned a value.

To fix this, define a function to set mbstate_t's conversion state.

Signed-off-by: Kirill Makurin <maiddaisuki@outlook.com>
Signed-off-by: LIU Hao <lh_mouse@126.com>
diff --git a/mingw-w64-crt/testcases/t_mbrlen.c b/mingw-w64-crt/testcases/t_mbrlen.c
index 0cf6b18..4d297e3 100644
--- a/mingw-w64-crt/testcases/t_mbrlen.c
+++ b/mingw-w64-crt/testcases/t_mbrlen.c
@@ -9,6 +9,14 @@
 #include <stdlib.h>
 #include <wchar.h>
 
+static void set_conversion_state (mbstate_t *state, int bytes) {
+#ifdef _UCRT
+  state->_Wchar = bytes;
+#else
+  *state = bytes;
+#endif
+}
+
 char Ascii[] = {'a'};
 char NonAscii[] = {(char) 0x80};
 char Multibyte[] = {(char) 0x81, (char) 0x81};
@@ -45,7 +53,7 @@
    * NOTE: this is optional error condition specified in POSIX.
    * This check fails with CRT's mbrlen.
    */
-  state = Ascii[0];
+  set_conversion_state (&state, Ascii[0]);
 
   assert (mbrlen ((char *) &Ascii, MB_CUR_MAX, &state) == (size_t) -1);
   assert (!mbsinit (&state));
diff --git a/mingw-w64-crt/testcases/t_mbrtowc.c b/mingw-w64-crt/testcases/t_mbrtowc.c
index fd2fcb7..1b94207 100644
--- a/mingw-w64-crt/testcases/t_mbrtowc.c
+++ b/mingw-w64-crt/testcases/t_mbrtowc.c
@@ -9,6 +9,14 @@
 #include <stdlib.h>
 #include <wchar.h>
 
+static void set_conversion_state (mbstate_t *state, int bytes) {
+#ifdef _UCRT
+  state->_Wchar = bytes;
+#else
+  *state = bytes;
+#endif
+}
+
 char Ascii[] = {'a'};
 char NonAscii[] = {(char) 0x80};
 char Multibyte[] = {(char) 0x81, (char) 0x81};
@@ -47,7 +55,7 @@
    * NOTE: this is optional error condition specified in POSIX.
    * This check fails with CRT's mbrtowc.
    */
-  state = Ascii[0];
+  set_conversion_state (&state, Ascii[0]);
   wc = WEOF;
 
   assert (mbrtowc (&wc, (char *) &Ascii, MB_CUR_MAX, &state) == (size_t) -1);
diff --git a/mingw-w64-crt/testcases/t_wcrtomb.c b/mingw-w64-crt/testcases/t_wcrtomb.c
index 76d8ca0..f6e44f4 100644
--- a/mingw-w64-crt/testcases/t_wcrtomb.c
+++ b/mingw-w64-crt/testcases/t_wcrtomb.c
@@ -12,6 +12,14 @@
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 
+static void set_conversion_state (mbstate_t *state, int bytes) {
+#ifdef _UCRT
+  state->_Wchar = bytes;
+#else
+  *state = bytes;
+#endif
+}
+
 int main (void) {
 #if __MSVCRT_VERSION__ >= 0x0800
   return 77;
@@ -42,7 +50,7 @@
    * NOTE: this is optional error condition specified in POSIX.
    * This check fails with CRT's wcrtomb.
    */
-  state = 1;
+  set_conversion_state (&state, 1);
 
   if (1) {
     char c = EOF;