RFR (XS) 8161280 - assert failed: reference count underflow for symbol

Andrew Haley aph at redhat.com
Sun Aug 28 20:03:48 UTC 2016


On 26/08/16 19:05, Kim Barrett wrote:

> 
> It seems my attempt at clarification has led to further confusion.
> 
> Recent discussion in this thread has been focused on the right shift,
> e.g. assuming it "does the right thing".
> 
> The left shift is *broken*.  Recent versions of gcc *will* do
> something other than what is being expected.  We've already seen
> reports of (and fixed) problems encountered by folks using gcc6 for
> exactly this sort of thing.  See, for example, JDK-8157758.
> 
> In the specific case at hand, the compiler can trivially prove that
> undefined behavior is being invoked, because of the constant -1 being
> passed to an inline function where the shift occurs. What it does from
> there is anyone's guess; gcc6 seems to be treating such things as
> unreachable code and optimizing accordingly.

GCC supports shifting left negative integers:

"4.5 Integers

"As an extension to the C language, GCC does not use the latitude
given in C99 and C11 only to treat certain aspects of signed ‘<<’ as
undefined. However, ‘-fsanitize=shift’ (and ‘-fsanitize=undefined’)
will diagnose such cases. They are also diagnosed where constant
expressions are required."

Andrew.


More information about the hotspot-runtime-dev mailing list