OpenJDK fails to build with GCC when the #include<time.h> inside zip.cpp comes from a non-sysroot path

Patrick Zhang patrick at os.amperecomputing.com
Wed Nov 28 09:45:39 UTC 2018


When I build on the latest jdk/jdk code base with GCC 8.2 (configured sysroot as a customized path instead of default root directory of the linux system), it failed with error: "jdk.pack/share/native/common-unpack/zip.cpp:420:23: error: declaration of 'tm* gmtime_r(const time_t*, tm*)' has a different exception specifier".

The root cause is the /usr/include/time.h included in src/jdk.pack/share/native/common-unpack/zip.cpp is treated as a non-system header file, so the originally suppressed error concerning "mismatched exception specifiers" gets exposed now. As the macro __THROW is defined in sys/cdefs.h we could reuse it on the condition of (defined(__GNUC__) && defined(__THROW)). Could you please help review this simple patch and comment, thanks!


diff -r 19b15ff2576b src/jdk.pack/share/native/common-unpack/zip.cpp

--- a/src/jdk.pack/share/native/common-unpack/zip.cpp    Tue Nov 27 21:20:16 2018 -0500

+++ b/src/jdk.pack/share/native/common-unpack/zip.cpp    Wed Nov 28 04:21:07 2018 -0500

@@ -417,7 +417,10 @@

}



#ifdef _REENTRANT // solaris

-extern "C" struct tm *gmtime_r(const time_t *, struct tm *);

+#if !(defined(__GNUC__) && defined(__THROW))

+#define __THROW

+#endif

+extern "C" struct tm *gmtime_r(const time_t *, struct tm *) __THROW;

#else

#define gmtime_r(t, s) gmtime(t)

#endif

Regards
Patrick



More information about the jdk-dev mailing list