Hi Magnus,

*||****make/common/NativeCompilation.gmk*
Typo: s/explicitely/explicitly/

I don't quite understand the changes ;) but Mr ErikJ has done the honors. :-)

Thanks
Kumar


On 3/17/2015 5:58 AM, Magnus Ihse Bursie wrote:
It turned out that the fix for JDK-8074796 (Disabling warnings on clang triggers compiler bug for libunpack) did not address the core issue.

In fact, there was no compiler bug in clang. (Surprise! :-)) Instead, what happened was that the makefile changes that turned on the warning flags, also affected other flags sent to the compiler. This happened on all toolchains, but was first noticed only for clang builds.

More precisely, due to the convoluted logic in SetupNativeCompilation, the value of "CFLAGS_release := -DPRODUCT" which was set in libunpack should have been copied by default to CXXFLAGS_release, so it could be used when compiling C++ code. However, if there are additional CXX flags set, then this copy does not happen. Due to the exact placement of the DISABLED_WARINGS flags code in SetupNativeCompilation, the CXX flags turned out to be non-empty when the "if CXX flags not set, then copy C flags by default" was executed. Hence, CFLAGS_release was not transferred to CXXFLAGS_release, and -DPRODUCT was lost when compiling the C++ files.

One could certainly argue that our entire handling of C flags vs C++ flags is not ideal. Hopefully, we can address that in the future, and create a more robust model.

For now, moving the code in SetupNativeCompilation will solve the problems which was introduced with the new warning option. This will also allow us to re-enable the warning statement for clang.

Bug: https://bugs.openjdk.java.net/browse/JDK-8075176
WebRev: http://cr.openjdk.java.net/~ihse/JDK-8075176-disabled-warnings-removed-extra-cflags/webrev.01

/Magnus

Reply via email to