RFR: build pragma error with gcc 4.4.7
David Holmes
david.holmes at oracle.com
Fri Mar 16 11:05:15 UTC 2018
Hi Michal,
On 16/03/2018 8:48 PM, Michal Vala wrote:
> Hi,
>
> I've been trying to build latest jdk with gcc 4.4.7 and I hit compile
> error due to pragma used in function:
That's a very old gcc. Our "official" version is 4.9.2 but we're working
on getting gcc 7.x working as well. This code causes no problem on
4.9.2+ so to make any change we'd have to know it will continue to work
on later versions.
Also a google search indicates the "pragma diagnostic push" and pop
weren't added until gcc 4.6 ??
David
-----
> /mnt/ramdisk/openjdk/src/hotspot/os/linux/os_linux.inline.hpp:103:
> error: #pragma GCC diagnostic not allowed inside functions
>
>
> I'm sending little patch that fixes the issue by wrapping whole
> function. I've also created a macro for ignoring deprecated declaration
> inside compilerWarnings.hpp to line up with others.
>
> Can someone please review? If it's ok, I would also need a sponsor.
>
>
> diff -r 422615764e12 src/hotspot/os/linux/os_linux.inline.hpp
> --- a/src/hotspot/os/linux/os_linux.inline.hpp Thu Mar 15 14:54:10
> 2018 -0700
> +++ b/src/hotspot/os/linux/os_linux.inline.hpp Fri Mar 16 10:50:24
> 2018 +0100
> @@ -96,13 +96,12 @@
> return ::ftruncate64(fd, length);
> }
>
> -inline struct dirent* os::readdir(DIR* dirp, dirent *dbuf)
> -{
> // readdir_r has been deprecated since glibc 2.24.
> // See https://sourceware.org/bugzilla/show_bug.cgi?id=19056 for more
> details.
> -#pragma GCC diagnostic push
> -#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
> -
> +PRAGMA_DIAG_PUSH
> +PRAGMA_DEPRECATED_IGNORED
> +inline struct dirent* os::readdir(DIR* dirp, dirent *dbuf)
> +{
> dirent* p;
> int status;
> assert(dirp != NULL, "just checking");
> @@ -114,11 +113,11 @@
> if((status = ::readdir_r(dirp, dbuf, &p)) != 0) {
> errno = status;
> return NULL;
> - } else
> + } else {
> return p;
> -
> -#pragma GCC diagnostic pop
> + }
> }
> +PRAGMA_DIAG_POP
>
> inline int os::closedir(DIR *dirp) {
> assert(dirp != NULL, "argument is NULL");
> diff -r 422615764e12 src/hotspot/share/utilities/compilerWarnings.hpp
> --- a/src/hotspot/share/utilities/compilerWarnings.hpp Thu Mar 15
> 14:54:10 2018 -0700
> +++ b/src/hotspot/share/utilities/compilerWarnings.hpp Fri Mar 16
> 10:50:24 2018 +0100
> @@ -48,6 +48,7 @@
> #define PRAGMA_FORMAT_NONLITERAL_IGNORED _Pragma("GCC diagnostic
> ignored \"-Wformat-nonliteral\"") \
> _Pragma("GCC diagnostic
> ignored \"-Wformat-security\"")
> #define PRAGMA_FORMAT_IGNORED _Pragma("GCC diagnostic ignored
> \"-Wformat\"")
> +#define PRAGMA_DEPRECATED_IGNORED _Pragma("GCC diagnostic ignored
> \"-Wdeprecated-declarations\"")
>
> #if defined(__clang_major__) && \
> (__clang_major__ >= 4 || \
>
>
> Thanks!
>
More information about the hotspot-dev
mailing list