https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88054
Bug ID: 88054 Summary: Sanitizer triggers on valid code Product: gcc Version: 8.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: tydeman at tybor dot com Target Milestone: --- This code gets "caught" at runtime, but I believe that the code is valid. This is on Intel i5, 32-bit Fedora 29, gcc 8.2.1. command line flags are: "-fsanitize=undefined -fsanitize=address -fsanitize=bounds-strict -fstack-protector-all -H -std=gnu17 -O0 -march=native -mfpmath=387 -mieee-fp -fno-builtin -frounding-math -ffloat-store -fexcess-precision=standard -fsignaling-nans" #include <stdio.h> #include <wchar.h> /* wchar_t, wcsto*(), swprintf(), swscanf() */ #include <stddef.h> static FILE *file = NULL; /* points to FILE returned by open() */ static char *filename = NULL; /* points to name of temp file */ typedef struct { float str_fpval; /* FP value returned by wcsto*, and maybe *wscanf */ ptrdiff_t str_numread; /* number of characters accepted by wcsto* */ int wscan_cnt; /* # of chars processed by %f */ int wscan_rc; /* return code from wscanf */ const wchar_t from[20]; /* string to process by *wscanf and wcsto* */ const wchar_t wscan_str[20-8]; /* string return by wscanf's %ls; this or next time */ } data; static data tv[] = { /* 0*/{ 100.f, (ptrdiff_t)3, 3, 1, L"100", L"" } }; int main(void){ int rc; int i = 0; { (void)printf("DEBUG 1\n"); fflush(NULL); } filename = tmpnam(NULL); /* create a temporary file */ { (void)printf("DEBUG 2\n"); fflush(NULL); } (void)printf("temp file name=%s\n", filename); { (void)printf("DEBUG 3\n"); fflush(NULL); } file = fopen(filename,"wb"); /* make sure we can open the file */ { (void)printf("DEBUG 4\n"); fflush(NULL); } file = freopen(NULL, "wb", file); /* so can write */ { (void)printf("DEBUG 5\n"); fflush(NULL); } { (void)printf("str=%ls\n", tv[i].from); fflush(NULL); } { (void)printf("DEBUG 6\n"); fflush(NULL); } { (void)printf("file=%p\n", file); fflush(NULL); } { (void)printf("DEBUG 7\n"); fflush(NULL); } rc = fwprintf( file, L"%ls", tv[i].from ); /* string to process */ { (void)printf("DEBUG 8\n"); fflush(NULL); } return 0; }