X-Authentication-Warning: delorie.com: mail set sender to djgpp-workers-bounces using -f X-Recipient: djgpp-workers AT delorie DOT com X-Authenticated: #27081556 X-Provags-ID: V01U2FsdGVkX18tRBc9obItuBS3ucPTU2MwqTWTne3GD5IurP5znW G1Ip7nWFqpuhEU From: Juan Manuel Guerrero To: djgpp-workers AT delorie DOT com Subject: Difficulties compiling emu387.cc with gcc 4.3.0 Date: Mon, 9 Jun 2008 20:58:05 +0200 User-Agent: KMail/1.9.5 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200806092058.05925.juan.guerrero@gmx.de> X-Y-GMX-Trusted: 0 Reply-To: djgpp-workers AT delorie DOT com I have tried to compile today's CVS sources and I have run into a problem. I am using gcc 4.3.0 and bnu217br2. The sources can only be compiled if Andris' patches to emu387.cc and ieeefp.h are applied (see and ). That is ok and well known. Now if I apply the following patch: diff -aprNU3 djgpp.orig/include/string.h djgpp/include/string.h --- djgpp.orig/include/string.h 2007-12-11 07:01:20 +0000 +++ djgpp/include/string.h 2008-06-09 16:05:26 +0000 @@ -77,6 +77,7 @@ char * rindex(const char *_string, int char * stpcpy(char *_dest, const char *_src); char * stpncpy(char *_dest, const char *_src, size_t _n); char * strdup(const char *_s); +char * strndup(const char *_s, size_t _n); size_t strlcat(char *_dest, const char *_src, size_t _size); size_t strlcpy(char *_dest, const char *_src, size_t _size); char * strlwr(char *_s); @@ -84,6 +85,7 @@ int strcasecmp(const char *_s1, const ch int stricmp(const char *_s1, const char *_s2); int strncasecmp(const char *_s1, const char *_s2, size_t _n); int strnicmp(const char *_s1, const char *_s2, size_t _n); +size_t strnlen(const char *_s, size_t _n); char * strsep(char **_stringp, const char *_delim); char * strupr(char *_s); the compilation of emu387.cc fails with the following error message: ../makemake.exe makemake: scanning libemu for makefiles C:/djgpp/bin/make.exe -f makefile.sub C:/djgpp/bin/make.exe -C src gcc -MD -O2 -mtune=i586 -march=i386 -Wall -Wcast-qual -Werror -Wpointer-arith -Wshadow -Wwrite-strings -Wundef -Wcast-align -Wsign-compare -nostdinc -iquote . -isystem ../../../include -DGAS_MAJOR=2 -DGAS_MINOR=17 -DGAS_MINORMINOR=0 -c -fno-exceptions emu387.cc cc1plus.exe: warnings being treated as errors emu387.cc: In function 'void fsqrt()': emu387.cc:2366: error: likely type-punning may break strict-aliasing rules: object '*{unknown}' of main type 'long int' is referenced at or around emu387.cc:2366 and may be aliased to object 'result' of main type 'long long unsigned int' which is referenced at or around emu387.cc:2357. emu387.cc:2371: error: likely type-punning may break strict-aliasing rules: object '*{unknown}' of main type 'unsigned int' is referenced at or around emu387.cc:2371 and may be aliased to object 'val' of main type 'long long unsigned int' which is referenced at or around emu387.cc:2356. make.exe[3]: *** [emu387.o] Error 1 make.exe[2]: *** [all_subs] Error 2 make.exe[1]: *** [all] Error 2 make.exe: *** [subs] Error 2 Please note that strndup() and strnlen() are neither implemented nor used anywhere in the complete CVS code. If I comment out one of the declaration (no matter which one) the code compiles without error. As soon as both are declarations are active again the compilation fails. If I replace gcc and gpp 4.3.0 with gcc and gpp 4.2.3 then the sources can be compiled without any difficulties. The surprising fact to me is not really the error message but the way it is triggered. Any ideas what I am missing here? If more information is needed, let me know. Regards, Juan M. Guerrero