Earnie
earni****@users*****
Wed Jun 27 23:19:59 JST 2018
On 6/26/2018 8:06 PM, David Gressett wrote: > I have been trying to build gcc 7.3.0 as a native build using the current MinGW > gcc compiler, which is at version 6.3.0. My buillds are crashing early in the build > process when it reaches a file named adaint.c > Have you tried building without ADA and using the result to build ADA? > Adaint.c caused no problems with my earlier gcc 6.3.0 and 7.1.0 builds, but with > 7.3.0, I was getting a swarm of error message from the adaint.c compilation. > The first one looked like this: > > error: cannot convert 'TCHAR* {aka wchar_t*}' to 'LPCSTR {aka const char*}' for > argument '1' to > 'BOOL GetFileAttributesExA(LPCSTR, GET_FILEEX_INFO_LEVELS, PVOID)' > >From the code below it appears that UNICODE is expected but GetFileAttributesEx macro is being set to GetFileAttributesExA instead of GetFileAttributesExU. > I extracted adaint.c and several header files that it included and proceeded to > strip them down to a minimal test case. The result was a set of three files, > adaint.c, adaint.h, and mingw32.h, which are now only a tiny fraction of > their original sizes; I can open all three of them in a text editor on my > dual-monitor development computer and see all of the contents of all > three of them. The shrunken version produces an error, but it changed. > > If I issue the command gcc -c adaint.c , I get this error text with the > current gcc: ( long lines have been broken) > > adaint.c: In function '__gnat_file_time_name_attr': > adaint.c:21:39: warning: passing argument 1 of 'GetFileAttributesExA' > from incompatible pointer type [-Wincompatible-pointer-types] > if ((res = GetFileAttributesEx (wname, GetFileExInfoStandard, &fad))) > ^~~~~ > In file included from c:\mingw\include\windows.h:44:0, > from mingw32.h:14, > from adaint.c:5: > c:\mingw\include\winbase.h:1728:24: note: expected 'LPCSTR > {aka const char *}' but argument is of type 'TCHAR * > {aka short unsigned int *}' > WINBASEAPI BOOL WINAPI GetFileAttributesExA > > When I did my earlier successful builds of gcc 6.3.0, 7.1.0, and my > experimental gcc 7.1.0 with sjlj exceptions, I installed them into > my MinGW direcrory and backed them up so that I could > recover them later. I did that, and tested them on test case. > All three of them compiled the test case with no errors, > so it looks like a problem with something that changed since > I made those builds, possibly problem in the current WSL 5.0.2. > (I haven't tried the WSL 5.1 that is currently up on OSDN) > > Here are the three pieces of the test case. Long lines are > not broken. I'm hoping that Microsoft Outlook won't > scramble them. > > Here is the first one: adaint.c, 26 lines of text: > > #ifdef __cplusplus > extern "C" { > #endif > > #include "mingw32.h" > > #include "adaint.h" > > #define GNAT_MAX_PATH_LEN 256 > > OS_Time > __gnat_file_time_name_attr (char* name, struct file_attributes* attr) > { > if (attr->timestamp == (OS_Time)-2) { > BOOL res; > WIN32_FILE_ATTRIBUTE_DATA fad; > GNAT_TIME_T ret = -1; > TCHAR wname[GNAT_MAX_PATH_LEN]; > S2WSC (wname, name, GNAT_MAX_PATH_LEN); > > if ((res = GetFileAttributesEx (wname, GetFileExInfoStandard, &fad))) > /* f2t (&fad.ftLastWriteTime, &ret) */; > attr->timestamp = (OS_Time) ret; > } > return attr->timestamp; > } > > > The next one is adaint.h, 36 lines of text : > > > #ifdef __cplusplus > extern "C" { > #endif > > #include "mingw32.h" > > #define GNAT_STRUCT_STAT struct _stati64 > #define GNAT_TIME_T time_t > > typedef long OS_Time; > > #define __int64 long long > GNAT_STRUCT_STAT; > > struct file_attributes { > int error; > > unsigned char exists; > > unsigned char writable; > unsigned char readable; > unsigned char executable; > > unsigned char symbolic_link; > unsigned char regular; > unsigned char directory; > > OS_Time timestamp; > __int64 file_length; > }; > > extern OS_Time __gnat_file_time_name_attr (char *, struct file_attributes *); > > #ifdef __cplusplus > } > #endif > > Here is the last one, mingw32.h, 27 lines of text: > > #ifndef _MINGW32_H > #define _MINGW32_H > > #include <_mingw.h> > > #ifndef RTX > #define GNAT_UNICODE_SUPPORT > #define _UNICODE /* For C runtime */ > #define UNICODE /* For Win32 API */ > #endif > > #include <tchar.h> > > #include <windows.h> > > #ifdef GNAT_UNICODE_SUPPORT > > extern UINT __gnat_current_codepage; > extern UINT __gnat_current_ccs_encoding; > > #define S2WSC(wstr,str,len) \ > MultiByteToWideChar (__gnat_current_codepage,0,str,-1,wstr,len) > #else > #define S2WSC(wstr,str,len) strncpy(wstr,str,len) > #endif > > #include <stdlib.h> > > #endif /* _MINGW32_H */ > -- Earnie