Build failure w/ GCC 7.3.1 (original) (raw)

Erik Ă–sterlund erik.osterlund at oracle.com
Thu Mar 15 09:24:01 UTC 2018


Hi Yasumasa,

The problem is that the HeapWord* overload of arraycopy in the RawAccessBarrier calls arraycopy with 3 arguments instead of the expected 5 (it used to be 3, but changed very recently to 5).

This builds anyway for us because this path is never currently expanded as all calls to arraycopy with HeapWord* arguments goes through HeapAccess (as opposed to RawAccess) which always resolves whether compressed oops is used or not, and hence on that layer always knows if it is oop* or narrowOop*. It seems like the newer GCC version detects this error despite the path not being expanded.

I am working on a fix and refactoring of this code. Ideally I want the HeapWord* detection on arraycopy to be done at an earlier level to be more symmetric with how it is done for other accesses in this class.

Thanks, /Erik

On 2018-03-14 02:33, Yasumasa Suenaga wrote:

Hi all.

I encountered build failure with GCC 7.3.1 on Fedora 27 x8664 as below: ------------------- Building target 'images' in configuration 'linux-x8664-normal-server-fastdebug' In file included from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/access.inline.hpp:35:0, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/oop.inline.hpp:32, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/markOop.inline.hpp:30, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/precompiled/precompiled.hpp:153: /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/accessBackend.inline.hpp: In static member function 'static bool RawAccessBarrier::ooparraycopy(arrayOop, arrayOop, HeapWord*, HeapWord*, sizet)': /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/accessBackend.inline.hpp:129:98: error: no matching function for call to 'RawAccessBarrier::arraycopy(narrowOop*, narrowOop*, sizet&)' return arraycopy(reinterpretcast<narrowOop*>(src), reinterpretcast<narrowOop*>(dst), length); ^ In file included from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/gc/shared/barrierSet.hpp:31:0, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/gc/shared/collectorPolicy.hpp:28, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/gc/shared/genCollectedHeap.hpp:29, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/gc/shared/gcLocker.hpp:29, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/runtime/interfaceSupport.hpp:28, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/prims/methodHandles.hpp:32, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciMethod.hpp:33, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/code/debugInfoRec.hpp:30, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciEnv.hpp:31, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciUtilities.hpp:28, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciNullObject.hpp:30, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciConstant.hpp:29, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciArray.hpp:29, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/precompiled/precompiled.hpp:35: /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/accessBackend.hpp:343:15: note: candidate: template template static bool RawAccessBarrier::arraycopy(arrayOop, arrayOop, T*, T*, sizet) static bool arraycopy(arrayOop srcobj, arrayOop dstobj, T* src, T* dst, sizet length); ^~~~~~~~~ /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/accessBackend.hpp:343:15: note: template argument deduction/substitution failed: In file included from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/access.inline.hpp:35:0, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/oop.inline.hpp:32, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/markOop.inline.hpp:30, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/precompiled/precompiled.hpp:153: /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/accessBackend.inline.hpp:129:98: note: mismatched types 'T*' and 'long unsigned int' return arraycopy(reinterpretcast<narrowOop*>(src), reinterpretcast<narrowOop*>(dst), length); ^ /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/accessBackend.inline.hpp:131:86: error: no matching function for call to 'RawAccessBarrier::arraycopy(oop*, oop*, sizet&)' return arraycopy(reinterpretcast<oop*>(src), reinterpretcast<oop*>(dst), length); ^ In file included from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/gc/shared/barrierSet.hpp:31:0, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/gc/shared/collectorPolicy.hpp:28, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/gc/shared/genCollectedHeap.hpp:29, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/gc/shared/gcLocker.hpp:29, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/runtime/interfaceSupport.hpp:28, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/prims/methodHandles.hpp:32, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciMethod.hpp:33, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/code/debugInfoRec.hpp:30, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciEnv.hpp:31, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciUtilities.hpp:28, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciNullObject.hpp:30, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciConstant.hpp:29, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciArray.hpp:29, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/precompiled/precompiled.hpp:35: /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/accessBackend.hpp:343:15: note: candidate: template template static bool RawAccessBarrier::arraycopy(arrayOop, arrayOop, T*, T*, sizet) static bool arraycopy(arrayOop srcobj, arrayOop dstobj, T* src, T* dst, sizet length); ^~~~~~~~~ /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/accessBackend.hpp:343:15: note: template argument deduction/substitution failed: In file included from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/access.inline.hpp:35:0, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/oop.inline.hpp:32, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/markOop.inline.hpp:30, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/precompiled/precompiled.hpp:153: /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/accessBackend.inline.hpp:131:86: note: mismatched types 'T*' and 'long unsigned int' return arraycopy(reinterpretcast<oop*>(src), reinterpretcast<oop*>(dst), length); ^ In file included from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/access.inline.hpp:35:0, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/oop.inline.hpp:32, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/markOop.inline.hpp:30, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/precompiled/precompiled.hpp:153: /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/accessBackend.inline.hpp: In static member function 'static bool RawAccessBarrier::ooparraycopy(arrayOop, arrayOop, HeapWord*, HeapWord*, sizet)': /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/accessBackend.inline.hpp:129:98: error: no matching function for call to 'RawAccessBarrier::arraycopy(narrowOop*, narrowOop*, sizet&)' return arraycopy(reinterpretcast<narrowOop*>(src), reinterpretcast<narrowOop*>(dst), length); ^ In file included from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/gc/shared/barrierSet.hpp:31:0, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/gc/shared/collectorPolicy.hpp:28, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/gc/shared/genCollectedHeap.hpp:29, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/gc/shared/gcLocker.hpp:29, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/runtime/interfaceSupport.hpp:28, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/prims/methodHandles.hpp:32, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciMethod.hpp:33, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/code/debugInfoRec.hpp:30, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciEnv.hpp:31, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciUtilities.hpp:28, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciNullObject.hpp:30, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciConstant.hpp:29, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciArray.hpp:29, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/precompiled/precompiled.hpp:35: /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/accessBackend.hpp:343:15: note: candidate: template template static bool RawAccessBarrier::arraycopy(arrayOop, arrayOop, T*, T*, sizet) static bool arraycopy(arrayOop srcobj, arrayOop dstobj, T* src, T* dst, sizet length); ^~~~~~~~~ /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/accessBackend.hpp:343:15: note: template argument deduction/substitution failed: In file included from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/access.inline.hpp:35:0, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/oop.inline.hpp:32, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/markOop.inline.hpp:30, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/precompiled/precompiled.hpp:153: /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/accessBackend.inline.hpp:129:98: note: mismatched types 'T*' and 'long unsigned int' return arraycopy(reinterpretcast<narrowOop*>(src), reinterpretcast<narrowOop*>(dst), length); ^ /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/accessBackend.inline.hpp:131:86: error: no matching function for call to 'RawAccessBarrier::arraycopy(oop*, oop*, sizet&)' return arraycopy(reinterpretcast<oop*>(src), reinterpretcast<oop*>(dst), length); ^ In file included from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/gc/shared/barrierSet.hpp:31:0, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/gc/shared/collectorPolicy.hpp:28, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/gc/shared/genCollectedHeap.hpp:29, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/gc/shared/gcLocker.hpp:29, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/runtime/interfaceSupport.hpp:28, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/prims/methodHandles.hpp:32, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciMethod.hpp:33, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/code/debugInfoRec.hpp:30, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciEnv.hpp:31, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciUtilities.hpp:28, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciNullObject.hpp:30, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciConstant.hpp:29, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/ci/ciArray.hpp:29, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/precompiled/precompiled.hpp:35: /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/accessBackend.hpp:343:15: note: candidate: template template static bool RawAccessBarrier::arraycopy(arrayOop, arrayOop, T*, T*, sizet) static bool arraycopy(arrayOop srcobj, arrayOop dstobj, T* src, T* dst, sizet length); ^~~~~~~~~ /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/accessBackend.hpp:343:15: note: template argument deduction/substitution failed: In file included from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/access.inline.hpp:35:0, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/oop.inline.hpp:32, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/markOop.inline.hpp:30, from /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/precompiled/precompiled.hpp:153: /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/accessBackend.inline.hpp:131:86: note: mismatched types 'T*' and 'long unsigned int' return arraycopy(reinterpretcast<oop*>(src), reinterpretcast<oop*>(dst), length); ^ gmake[3]: *** [lib/CompileJvm.gmk:214: /home/ysuenaga/OpenJDK/jdk-hs/build/linux-x8664-normal-server-fastdebug/hotspot/variant-server/libjvm/objs/precompiled/precompiled.hpp.gch] Error 1 gmake[3]: *** Waiting for unfinished jobs.... gmake[3]: *** [lib/CompileGtest.gmk:67: /home/ysuenaga/OpenJDK/jdk-hs/build/linux-x8664-normal-server-fastdebug/hotspot/variant-server/libjvm/gtest/objs/precompiled/precompiled.hpp.gch] Error 1 gmake[2]: *** [make/Main.gmk:267: hotspot-server-libs] Error 2 ERROR: Build failed for target 'images' in configuration 'linux-x8664-normal-server-fastdebug' (exit code 2) ------------------- Do someone work for this issue? IMHO we can avoid this with following patch: ------------------- diff -r 98e7a2c315a9 src/hotspot/share/oops/accessBackend.hpp --- a/src/hotspot/share/oops/accessBackend.hpp Tue Mar 13 15:29:55 2018 -0700 +++ b/src/hotspot/share/oops/accessBackend.hpp Wed Mar 14 10:28:27 2018 +0900 @@ -384,7 +384,6 @@ template static bool ooparraycopy(arrayOop srcobj, arrayOop dstobj, T* src, T* dst, sizet length); - static bool ooparraycopy(arrayOop srcobj, arrayOop dstobj, HeapWord* src, HeapWord* dst, sizet length); static void clone(oop src, oop dst, sizet size); diff -r 98e7a2c315a9 src/hotspot/share/oops/accessBackend.inline.hpp --- a/src/hotspot/share/oops/accessBackend.inline.hpp Tue Mar 13 15:29:55 2018 -0700 +++ b/src/hotspot/share/oops/accessBackend.inline.hpp Wed Mar 14 10:28:27 2018 +0900 @@ -122,17 +122,6 @@ } template -inline bool RawAccessBarrier::ooparraycopy(arrayOop srcobj, arrayOop dstobj, HeapWord* src, HeapWord* dst, sizet length) { - bool needsoopcompress = HasDecorator<decorators,_ _INTERNALCONVERTCOMPRESSEDOOP>::value && - HasDecorator<decorators,_ _INTERNALRTUSECOMPRESSEDOOPS>::value; - if (needsoopcompress) { - return arraycopy(reinterpretcast<narrowOop*>(src), reinterpretcast<narrowOop*>(dst), length); - } else { - return arraycopy(reinterpretcast<oop*>(src), reinterpretcast<oop*>(dst), length); - } -} - -template template <DecoratorSet ds, typename T> inline typename EnableIf<_ _HasDecorator<ds, MOSEQCST>::value, T>::type -------------------

Thanks, Yasumasa



More information about the hotspot-dev mailing list