Combo GCC issues with bugs
Ken Brown
kbrown@cornell.edu
Sat Aug 3 18:59:00 GMT 2019
On 8/2/2019 5:05 PM, Denis Vnoukov wrote:
> Code Example:
> #include <stdlib.h>
> #include <stdio.h>
> #include <sys/select.h>
> #include <windows.h>
> #include <stdint.h>
> #include <intrin.h>int main()
> {
> // https://github.com/msys2/MSYS2-packages/issues/1711
> char buf[50];
> char * str = gcvt(3.141592653589793238462643383279502884197169399375, 49, buf);
> printf("buffer: %s", str);// https://github.com/msys2/MSYS2-packages/issues/1270
> fd_set read_fd;
> FD_ZERO(&read_fd);GetTickCount64();//
> https://github.com/msys2/MSYS2-packages/issues/1262
> unsigned long index;
> uint64_t b = 0xbedabedadeadc0de;
> _BitScanForward64(&index, b);
> _BitScanReverse64(&index, b);return 0;
> }
> If we compile it with gcc as .c:
> $ gcc main.c
> main.c: In function âmainâ:
> main.c:16:15: warning: implicit declaration of function âgcvtâ
> [-Wimplicit-function-declaration]
> char * str = gcvt(3.141592653589793238462643383279502884197169399375, 49, buf);
> ^~~~
> main.c:16:15: warning: initialization makes pointer from integer without a cast
> [-Wint-conversion]
> main.c:23:2: warning: implicit declaration of function âGetTickCount64â; did you
> mean âGetTickCountâ? [-Wimplicit-function-declaration]
> GetTickCount64();
> ^~~~~~~~~~~~~~
> GetTickCount
> main.c:28:20: warning: passing argument 1 of â_BitScanForward64â from
> incompatible pointer type [-Wincompatible-pointer-types]
> _BitScanForward64(&index, b);
> ^
> In file included from /usr/include/w32api/winnt.h:27:0,
> from /usr/include/w32api/minwindef.h:163,
> from /usr/include/w32api/windef.h:8,
> from /usr/include/w32api/windows.h:69,
> from main.c:8:
> /usr/include/w32api/psdk_inc/intrin-impl.h:749:1: note: expected âunsigned int *â
> but argument is of type âlong unsigned int *â
> __buildbitscan(_BitScanForward64, unsigned __int64, "bsf{q %[Mask],%[Index] |
> %[Index],%[Mask]}")
> ^
> main.c:29:20: warning: passing argument 1 of â_BitScanReverse64â from
> incompatible pointer type [-Wincompatible-pointer-types]
> _BitScanReverse64(&index, b);
> ^
> In file included from /usr/include/w32api/winnt.h:27:0,
> from /usr/include/w32api/minwindef.h:163,
> from /usr/include/w32api/windef.h:8,
> from /usr/include/w32api/windows.h:69,
> from main.c:8:
> /usr/include/w32api/psdk_inc/intrin-impl.h:756:1: note: expected âunsigned int *â
> but argument is of type âlong unsigned int *â
> __buildbitscan(_BitScanReverse64, unsigned __int64, "bsr{q %[Mask],%[Index] |
> %[Index],%[Mask]}")
> ^
> So...
> 1. gcvt function must be into stdlib.h, but we have a warning
The Linux man page for gcvt says, "Marked as LEGACY in POSIX.1-2001.
POSIX.1-2008 removes the specification of gcvt(), recommending the use of
sprintf(3) instead (though snprintf(3) may be preferable)."
Cygwin's stdlib.h is consistent with this. It guards the declaration of gcvt with
#if __XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200112
If you really need to use gcvt, I think you probably have to #define
_XOPEN_SOURCE to be 500. (I haven't tested this.)
> 2. gcvt function in all standards has declaration like:char *gcvt(double number,
> int ndigit, char *buf);but we have a warning about "int-conversion" and get core
> dump on line:printf("buffer: %s", str);
This is a consequence of the fact that gcvt hasn't been declared.
I haven't looked at the rest of the warnings/errors in your message, but I
suspect you can figure out the causes yourself by looking at the relevant
headers and/or by looking at the result of preprocessing. You might also find
the following helpful:
https://cygwin.com/faq.html#faq.programming.64bitporting
Ken
ТÒÐÐ¥&ö&ÆVÒ&W÷'G3¢GG¢òö7wvâæ6öÒ÷&ö&ÆV×2æFÖÀФd¢GG¢òö7wvâæ6öÒöfðФFö7VÖVçFFöã¢GG¢òö7wvâæ6öÒöFö72æFÖÀÐ¥Vç7V'67&&Ræfó¢GG¢òö7wvâæ6öÒöÖÂò7Vç7V'67&&R×6×ÆPÐ Ð
More information about the Cygwin
mailing list