RFR (S) JDK-8041623: Solaris Studio 12.4 C++ 5.13, CHECK_UNHANDLED_OOPS use of class oop's copy constructor definitions causing error level diagnostic

Lindenmaier, Goetz goetz.lindenmaier at sap.com
Mon Jun 23 15:38:52 UTC 2014


Hi Lois, 

unfortunately, your change breaks the ppc build (with gcc 4.1.2):

collectedHeap.inline.hpp:85 In function "void post_allocation_notify(KlassHandle, oop, int)":
collectedHeap.inline.hpp:85: warning: choosing "oop::operator markOopDesc*() const" over "oop::operator oopDesc*() const volatile"
collectedHeap.inline.hpp:85: warning:   for conversion from "oop" to "oopDesc*"
collectedHeap.inline.hpp:85: warning:   because conversion sequence for the argument is better

This is because you added 'volatile' to the operator definition of the oopDesc call.

This can be fixed by adding 'volatile' to the markOop cast operator.
Would that be fine with you, or will it break your case?  If so, I'll make the 
corresponding change.

Best regards,
  Goetz



-----Original Message-----
From: hotspot-runtime-dev [mailto:hotspot-runtime-dev-bounces at openjdk.java.net] On Behalf Of Lois Foltan
Sent: Donnerstag, 22. Mai 2014 19:41
To: hotspot-runtime-dev
Subject: RFR (S) JDK-8041623: Solaris Studio 12.4 C++ 5.13, CHECK_UNHANDLED_OOPS use of class oop's copy constructor definitions causing error level diagnostic

Hello,

Please review the following fix:

Webrev:
     http://cr.openjdk.java.net/~lfoltan/bug_jdk8041623/

Bug: Solaris Studio 12.4 C++ 5.13, CHECK_UNHANDLED_OOPS use of class 
oop's copy constructor definitions causing error level diagnostic
     https://bugs.openjdk.java.net/browse/JDK-8041623

Summary of fix:
A couple of fixes for Solaris C++ 5.13 compilation issues specifically 
related to CHECK_UNHANDLED_OOPS support in non-product JVM builds.  
First, the following diagnostic occurred concerning a volatile oop being 
returned by value.  C++ complained that the return value failed to 
correctly copy construct into a temporary when returning from 
target_volatile().

"javaClasses.hpp", line 1183: Error: Initializing const volatile oop& 
requires an lvalue.
"javaClasses.hpp", line 1183: Error: Formal argument o of type const 
volatile oop& in call to oop::oop(const volatile oop&) is being passed 
volatile oop.

The fix required a user conversion from oop to OopDesc* with immediate 
oop construction to provide the lvalue needed.  Solaris C++ 5.13 also 
complained about the lack of an appropriate assignment operator from 
NULL to volatile oop.  Solution was to explicitly construct NULL prior 
to assignment.

Built with the following versions:
     carrs: g++ 4.4.3
     crocker: g++ 4.4.4
     philli: g++ 4.8.1
     Solaris C++ 5.10 (12u1)
     Solaris C++ 5.12 (12u3)
     Solaris C++ 5.13 - beta
VS2013

Tests:
     JPRT build & test,
     Hotspot jtreg on Solaris,
     Hotspot jtreg on Linux with -XX:+CheckUnhandledOops,
     vm.quick.testlist - 2 runs one with -XX:+CheckUnhandledOops and one 
without

Thank you,
Lois


More information about the hotspot-runtime-dev mailing list