Build failure w/ GCC 7.3.1

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 x86_64 as below:
> -------------------
> Building target 'images' in configuration 'linux-x86_64-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<decorators>::oop_arraycopy(arrayOop, arrayOop,
> HeapWord*, HeapWord*, size_t)':
> /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/accessBackend.inline.hpp:129:98:
> error: no matching function for call to
> 'RawAccessBarrier<decorators>::arraycopy(narrowOop*, narrowOop*,
> size_t&)'
>       return arraycopy(reinterpret_cast<narrowOop*>(src),
> reinterpret_cast<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<long unsigned int decorators> template<class
> T> static bool RawAccessBarrier<decorators>::arraycopy(arrayOop,
> arrayOop, T*, T*, size_t)
>     static bool arraycopy(arrayOop src_obj, arrayOop dst_obj, T* src,
> T* dst, size_t 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(reinterpret_cast<narrowOop*>(src),
> reinterpret_cast<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<decorators>::arraycopy(oop*, oop*, size_t&)'
>       return arraycopy(reinterpret_cast<oop*>(src),
> reinterpret_cast<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<long unsigned int decorators> template<class
> T> static bool RawAccessBarrier<decorators>::arraycopy(arrayOop,
> arrayOop, T*, T*, size_t)
>     static bool arraycopy(arrayOop src_obj, arrayOop dst_obj, T* src,
> T* dst, size_t 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(reinterpret_cast<oop*>(src),
> reinterpret_cast<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<decorators>::oop_arraycopy(arrayOop, arrayOop,
> HeapWord*, HeapWord*, size_t)':
> /home/ysuenaga/OpenJDK/jdk-hs/src/hotspot/share/oops/accessBackend.inline.hpp:129:98:
> error: no matching function for call to
> 'RawAccessBarrier<decorators>::arraycopy(narrowOop*, narrowOop*,
> size_t&)'
>       return arraycopy(reinterpret_cast<narrowOop*>(src),
> reinterpret_cast<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<long unsigned int decorators> template<class
> T> static bool RawAccessBarrier<decorators>::arraycopy(arrayOop,
> arrayOop, T*, T*, size_t)
>     static bool arraycopy(arrayOop src_obj, arrayOop dst_obj, T* src,
> T* dst, size_t 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(reinterpret_cast<narrowOop*>(src),
> reinterpret_cast<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<decorators>::arraycopy(oop*, oop*, size_t&)'
>       return arraycopy(reinterpret_cast<oop*>(src),
> reinterpret_cast<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<long unsigned int decorators> template<class
> T> static bool RawAccessBarrier<decorators>::arraycopy(arrayOop,
> arrayOop, T*, T*, size_t)
>     static bool arraycopy(arrayOop src_obj, arrayOop dst_obj, T* src,
> T* dst, size_t 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(reinterpret_cast<oop*>(src),
> reinterpret_cast<oop*>(dst), length);
>
>                 ^
> gmake[3]: *** [lib/CompileJvm.gmk:214:
> /home/ysuenaga/OpenJDK/jdk-hs/build/linux-x86_64-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-x86_64-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-x86_64-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 <typename T>
>     static bool oop_arraycopy(arrayOop src_obj, arrayOop dst_obj, T*
> src, T* dst, size_t length);
> -  static bool oop_arraycopy(arrayOop src_obj, arrayOop dst_obj,
> HeapWord* src, HeapWord* dst, size_t length);
>
>     static void clone(oop src, oop dst, size_t 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 <DecoratorSet decorators>
> -inline bool RawAccessBarrier<decorators>::oop_arraycopy(arrayOop
> src_obj, arrayOop dst_obj, HeapWord* src, HeapWord* dst, size_t
> length) {
> -  bool needs_oop_compress = HasDecorator<decorators,
> INTERNAL_CONVERT_COMPRESSED_OOP>::value &&
> -                            HasDecorator<decorators,
> INTERNAL_RT_USE_COMPRESSED_OOPS>::value;
> -  if (needs_oop_compress) {
> -    return arraycopy(reinterpret_cast<narrowOop*>(src),
> reinterpret_cast<narrowOop*>(dst), length);
> -  } else {
> -    return arraycopy(reinterpret_cast<oop*>(src),
> reinterpret_cast<oop*>(dst), length);
> -  }
> -}
> -
> -template <DecoratorSet decorators>
>   template <DecoratorSet ds, typename T>
>   inline typename EnableIf<
>     HasDecorator<ds, MO_SEQ_CST>::value, T>::type
> -------------------
>
>
> Thanks,
>
> Yasumasa



More information about the hotspot-dev mailing list