--- old/make/bsd/makefiles/gcc.make 2016-03-29 16:10:28.000000000 -0500 +++ new/make/bsd/makefiles/gcc.make 2016-03-29 16:10:28.000000000 -0500 @@ -322,11 +322,11 @@ # Work around some compiler bugs. ifeq ($(USE_CLANG), true) - # Clang < 6 | <= 6.1 | <= 7.0 + # Clang < 6 | <= 6.1 | <= 7.3 ifeq ($(shell expr \ $(CC_VER_MAJOR) \< 6 \| \ \( $(CC_VER_MAJOR) = 6 \& $(CC_VER_MINOR) \<= 1 \) \| \ - \( $(CC_VER_MAJOR) = 7 \& $(CC_VER_MINOR) \<= 0 \) \ + \( $(CC_VER_MAJOR) = 7 \& $(CC_VER_MINOR) \<= 3 \) \ ), 1) OPT_CFLAGS/loopTransform.o += $(OPT_CFLAGS/NOOPT) OPT_CFLAGS/unsafe.o += -O1 --- old/src/cpu/x86/vm/stubGenerator_x86_64.cpp 2016-03-29 16:10:29.000000000 -0500 +++ new/src/cpu/x86/vm/stubGenerator_x86_64.cpp 2016-03-29 16:10:29.000000000 -0500 @@ -2720,7 +2720,7 @@ { BLOCK_COMMENT("assert primitive array {"); Label L; - __ cmpl(rax_lh, (Klass::_lh_array_tag_type_value << Klass::_lh_array_tag_shift)); + __ cmpl(rax_lh, ((juint)Klass::_lh_array_tag_type_value << Klass::_lh_array_tag_shift)); __ jcc(Assembler::greaterEqual, L); __ stop("must be a primitive array"); __ bind(L); --- old/src/share/vm/oops/klass.hpp 2016-03-29 16:10:30.000000000 -0500 +++ new/src/share/vm/oops/klass.hpp 2016-03-29 16:10:30.000000000 -0500 @@ -324,11 +324,11 @@ } static bool layout_helper_is_typeArray(jint lh) { // _lh_array_tag_type_value == (lh >> _lh_array_tag_shift); - return (juint)lh >= (juint)(_lh_array_tag_type_value << _lh_array_tag_shift); + return (juint)lh >= ((juint)_lh_array_tag_type_value << _lh_array_tag_shift); } static bool layout_helper_is_objArray(jint lh) { // _lh_array_tag_obj_value == (lh >> _lh_array_tag_shift); - return (jint)lh < (jint)(_lh_array_tag_type_value << _lh_array_tag_shift); + return (jint)lh < (jint)((juint)_lh_array_tag_type_value << _lh_array_tag_shift); } static int layout_helper_header_size(jint lh) { assert(lh < (jint)_lh_neutral_value, "must be array"); --- old/src/share/vm/opto/library_call.cpp 2016-03-29 16:10:30.000000000 -0500 +++ new/src/share/vm/opto/library_call.cpp 2016-03-29 16:10:30.000000000 -0500 @@ -3762,7 +3762,7 @@ } // Now test the correct condition. jint nval = (obj_array - ? ((jint)Klass::_lh_array_tag_type_value + ? (jint)((juint)Klass::_lh_array_tag_type_value << Klass::_lh_array_tag_shift) : Klass::_lh_neutral_value); Node* cmp = _gvn.transform(new CmpINode(layout_val, intcon(nval)));