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 build-dev mailing list