< prev index next >
src/share/vm/opto/type.cpp
Print this page
@ rev 8243 : 8078666: JVM fastdebug build compiled with GCC 5 asserts with "widen increases"
| Summary: Fix signed integer overflow in normalize_{int,long}_widen()
*** 1156,1170 ****
static int normalize_int_widen( jint lo, jint hi, int w ) {
// Certain normalizations keep us sane when comparing types.
// The 'SMALLINT' covers constants and also CC and its relatives.
if (lo <= hi) {
! if ((juint)(hi - lo) <= SMALLINT) w = Type::WidenMin;
! if ((juint)(hi - lo) >= max_juint) w = Type::WidenMax; // TypeInt::INT
} else {
! if ((juint)(lo - hi) <= SMALLINT) w = Type::WidenMin;
! if ((juint)(lo - hi) >= max_juint) w = Type::WidenMin; // dual TypeInt::INT
}
return w;
}
const TypeInt *TypeInt::make( jint lo, jint hi, int w ) {
--- 1156,1170 ----
static int normalize_int_widen( jint lo, jint hi, int w ) {
// Certain normalizations keep us sane when comparing types.
// The 'SMALLINT' covers constants and also CC and its relatives.
if (lo <= hi) {
! if ((juint)hi - lo <= SMALLINT) w = Type::WidenMin;
! if ((juint)hi - lo >= max_juint) w = Type::WidenMax; // TypeInt::INT
} else {
! if ((juint)lo - hi <= SMALLINT) w = Type::WidenMin;
! if ((juint)lo - hi >= max_juint) w = Type::WidenMin; // dual TypeInt::INT
}
return w;
}
const TypeInt *TypeInt::make( jint lo, jint hi, int w ) {
*** 1414,1428 ****
static int normalize_long_widen( jlong lo, jlong hi, int w ) {
// Certain normalizations keep us sane when comparing types.
// The 'SMALLINT' covers constants.
if (lo <= hi) {
! if ((julong)(hi - lo) <= SMALLINT) w = Type::WidenMin;
! if ((julong)(hi - lo) >= max_julong) w = Type::WidenMax; // TypeLong::LONG
} else {
! if ((julong)(lo - hi) <= SMALLINT) w = Type::WidenMin;
! if ((julong)(lo - hi) >= max_julong) w = Type::WidenMin; // dual TypeLong::LONG
}
return w;
}
const TypeLong *TypeLong::make( jlong lo, jlong hi, int w ) {
--- 1414,1428 ----
static int normalize_long_widen( jlong lo, jlong hi, int w ) {
// Certain normalizations keep us sane when comparing types.
// The 'SMALLINT' covers constants.
if (lo <= hi) {
! if ((julong)hi - lo <= SMALLINT) w = Type::WidenMin;
! if ((julong)hi - lo >= max_julong) w = Type::WidenMax; // TypeLong::LONG
} else {
! if ((julong)lo - hi <= SMALLINT) w = Type::WidenMin;
! if ((julong)lo - hi >= max_julong) w = Type::WidenMin; // dual TypeLong::LONG
}
return w;
}
const TypeLong *TypeLong::make( jlong lo, jlong hi, int w ) {
< prev index next >