RFR(XL): 8182299: Enable disabled clang warnings, build on OSX 10 + Xcode 8

jesper.wilhelmsson at oracle.com jesper.wilhelmsson at oracle.com
Thu Jun 29 16:10:02 UTC 2017


Thanks for changing this!
Looks good to me.
/Jesper

> On 29 Jun 2017, at 15:31, Hohensee, Paul <hohensee at amazon.com> wrote:
> 
> I now have access to cr.openjdk.java.net, so the latest webrevs are at
> 
> http://cr.openjdk.java.net/~phh/8182299/webrev_jdk.00/
> http://cr.openjdk.java.net/~phh/8182299/webrev_hotspot.00/
> 
> On 6/28/17, 3:50 PM, "hotspot-dev on behalf of Hohensee, Paul" <hotspot-dev-bounces at openjdk.java.net on behalf of hohensee at amazon.com> wrote:
> 
>    Thanks for the review, Jesper.
> 
>    New webrev sent, has only a change to nativeInst_x86.cpp.
> 
>    In nativeInst_x86.cpp, I formatted the expression so I could easily understand it, but you’re right, not everyone does it that way (maybe only me!), so I’ve changed it to
> 
>      if (((ubyte_at(0) & NativeTstRegMem::instruction_rex_prefix_mask) == NativeTstRegMem::instruction_rex_prefix &&
>           ubyte_at(1) == NativeTstRegMem::instruction_code_memXregl &&
>           (ubyte_at(2) & NativeTstRegMem::modrm_mask) == NativeTstRegMem::modrm_reg) ||
>          (ubyte_at(0) == NativeTstRegMem::instruction_code_memXregl &&
>           (ubyte_at(1) & NativeTstRegMem::modrm_mask) == NativeTstRegMem::modrm_reg)) {
> 
>    In graphKit.cpp, the old code was
> 
>    #ifdef ASSERT
>      case Deoptimization::Action_none:
>      case Deoptimization::Action_make_not_compilable:
>        break;
>      default:
>        fatal("unknown action %d: %s", action, Deoptimization::trap_action_name(action));
>        break;
>    #endif
> 
>    In the non-ASSERT case, the compiler complained about the lack of Action_none, Action_make_not_compilable and default. If the warning had been turned off, the result would have been ‘break;’ for all three. In the ASSERT case, Action_none and Action_make_not_compilable result in ‘break;’, and in the default case ‘fatal(); break;’
> 
>    The new code is
> 
>      case Deoptimization::Action_none:
>      case Deoptimization::Action_make_not_compilable:
>        break;
>      default:
>    #ifdef ASSERT
>        fatal("unknown action %d: %s", action, Deoptimization::trap_action_name(action));
>    #endif
>        break;
> 
>    The compiler doesn’t complain about Action_none, Action_make_not_compilable or default anymore. In the non-ASSERT case, the result is ‘break;’ for all three, same as for the old code. In the ASSERT case, Action_none and Action_make_not_compilable result in ‘break;’, and in the default case ‘fatal(); break;’, again same as for the old code.
> 
>    Thanks,
> 
>    Paul
> 
>    On 6/28/17, 10:36 AM, "jesper.wilhelmsson at oracle.com" <jesper.wilhelmsson at oracle.com> wrote:
> 
>        Hi Paul,
> 
>        Thanks for doing this change! In general everything looks really good, there are a lot of really nice cleanups here. I just have two minor questions/nits:
> 
>        * In hotspot/cpu/x86/vm/nativeInst_x86.hpp it seems the expression already have parenthesis around the & operations and the change here is "only" cleaning up the layout of the code which is not a bad thing in it self, but you move the logical operators to the beginning of each line which is a quite different style than the rest of the code in the same function where the operators are at the end of the line.
> 
>        * In hotspot/share/vm/opto/graphKit.cpp you moved the #ifdef ASSERT so that Action_none and Action_make_not_compilable are available also when ASSERT is not defined. I don't see this mentioned in your description of the change. Was this change intentional?
> 
>        Thanks,
>        /Jesper
> 
> 
>> On 27 Jun 2017, at 21:34, Hohensee, Paul <hohensee at amazon.com> wrote:
>> 
>> An attempt at better formatting.
>> 
>> https://bugs.openjdk.java.net/browse/JDK-8182299
>> http://cr.openjdk.java.net/~jwilhelm/8182299/webrev_jdk.00/
>> http://cr.openjdk.java.net/~jwilhelm/8182299/webrev_hotspot.00/
>> 
>> Jesper has been kind enough to host the webrevs while I get my cr.openjdk.net account set up, and to be the sponsor.
>> 
>> This rfe a combination of enabling disabled clang warnings and getting jdk10 to build on OSX 10 and Xcode 8. At least one enabled warning (delete-non-virtual-dtor) detected what seems to me a real potential bug, with the rest enforcing good code hygiene.
>> 
>> These changes are only in OpenJDK, so I’m looking for a volunteer to make the closed changes.
>> 
>> Thanks,
>> 
>> Paul
>> 
>> 
>> Here are the jdk file-specific details:
>> 
>> java_md_macosx.c splashscreen_sys.m
>> 
>>       Removed objc_registerThreadWithCollector() since it's obsolete and of questionable value in any case.
>> 
>> NSApplicationAWT.m
>> 
>>      Use the correct NSEventMask rather than NSUInteger.
>> 
>> jdhuff.c jdphuff.c
>> 
>>      Shifting a negative signed value is undefined.
>> 
>> Here are the hotspot notes:
>> 
>> Here are the lists of files affected by enabling a given warning:
>> 
>> switch: all of these are lack of a default clause
>> 
>>       c1_LIRAssembler_x86.cpp c1_LIRGenerator_x86.cpp c1_LinearScan_x86.hpp
>>       jniFastGetField_x86_64.cpp assembler.cpp c1_Canonicalizer.cpp
>>       c1_GraphBuilder.cpp c1_Instruction.cpp c1_LIR.cpp c1_LIRGenerator.cpp
>>       c1_LinearScan.cpp c1_ValueStack.hpp c1_ValueType.cpp
>>       bcEscapeAnalyzer.cpp ciArray.cpp ciEnv.cpp ciInstance.cpp ciMethod.cpp
>>       ciMethodBlocks.cpp ciMethodData.cpp ciTypeFlow.cpp
>>       compiledMethod.cpp dependencies.cpp nmethod.cpp compileTask.hpp
>>       heapRegionType.cpp abstractInterpreter.cpp bytecodes.cpp
>>       invocationCounter.cpp linkResolver.cpp rewriter.cpp jvmciCompilerToVM.cpp
>>       jvmciEnv.cpp universe.cpp cpCache.cpp generateOopMap.cpp
>>       method.cpp methodData.cpp compile.cpp connode.cpp gcm.cpp graphKit.cpp
>>       ifnode.cpp library_call.cpp memnode.cpp parse1.cpp
>>       parse2.cpp phaseX.cpp superword.cpp type.cpp vectornode.cpp
>>       jvmtiClassFileReconstituter.cpp jvmtiEnter.xsl jvmtiEventController.cpp
>>       jvmtiImpl.cpp jvmtiRedefineClasses.cpp methodComparator.cpp methodHandles.cpp
>>       advancedThresholdPolicy.cpp reflection.cpp relocator.cpp sharedRuntime.cpp
>>       simpleThresholdPolicy.cpp writeableFlags.cpp globalDefinitions.hpp
>> 
>> delete-non-virtual-dtor: these may be real latent bugs due to possible failure to execute destructor(s)
>> 
>>       decoder_aix.hpp decoder_machO.hpp classLoader.hpp g1RootClosures.hpp
>>       jvmtiImpl.hpp perfData.hpp decoder.hpp decoder_elf.hpp
>> 
>> dynamic-class-memaccess: obscure use of memcpy
>> 
>>       method.cpp
>> 
>> empty-body: ‘;’ isn’t good enough for clang, it prefers {}
>> 
>>       objectMonitor.cpp mallocSiteTable.cpp
>> 
>> format: matches printf format strings against arguments. debug output will be affected by
>>              incorrect code changes to these.
>> 
>>       macroAssembler_x86.cpp os_bsd.cpp os_bsd_x86.cpp ciMethodData.cpp javaClasses.cpp
>>       debugInfo.cpp logFileOutput.cpp constantPool.cpp jvmtiEnter.xsl jvmtiRedefineClasses.cpp
>>       safepoint.cpp thread.cpp
>> 
>> logical-op-parentheses: can be tricky to get correct. There are a few very long-winded predicates.
>> 
>>       nativeInst_x86.hpp archDesc.cpp output_c.cpp output_h.cpp c1_GraphBuilder.cpp
>>       c1_LIRGenerator.cpp c1_LinearScan.cpp bcEscapeAnalyzer.cpp ciMethod.cpp
>>       stackMapTableFormat.hpp compressedStream.cpp dependencies.cpp heapRegion.cpp
>>       ptrQueue.cpp psPromotionManager.cpp jvmciCompilerToVM.cpp cfgnode.cpp
>>       chaitin.cpp compile.cpp compile.hpp escape.cpp graphKit.cpp lcm.cpp
>>       loopTransform.cpp loopnode.cpp loopopts.cpp macro.cpp memnode.cpp
>>       output.cpp parse1.cpp parseHelper.cpp reg_split.cpp superword.cpp
>>       superword.hpp jniCheck.cpp jvmtiEventController.cpp arguments.cpp
>>       javaCalls.cpp sharedRuntime.cpp
>> 
>> parentheses
>> 
>>       adlparse.cpp
>> 
>> parentheses-equality
>> 
>>       output_c.cpp javaAssertions.cpp gcm.cpp
>> 
>> File-specific details:
>> 
>>       GensrcAdlc.gmk CompileJvm.gmk
>>               Left tautological-compare in place to allow null 'this' pointer checks in methods
>>               intended to be called from a debugger.
>> 
>>       CompileGTest.gmk
>>               Just an enhanced comment.
>> 
>>       MacosxDebuggerLocal.m
>>              PT_ATTACH has been replaced by PT_ATTACHEXC
>> 
>>       ciMethodData.cp
>>              " 0x%" FORMAT64_MODIFIER "x"  reduces to  "0x%llx", whereas
>>              " " INTPTRNZ_FORMAT  reduces to  "0x%lx", which latter is what clang want.
>> 
>>       generateOopMap.cpp
>>              Refactored duplicate code in print_current_state().
>> 
>>       binaryTreeDictionary.cpp/hpp, hashtable.cpp/hpp
>>               These provoked “instantiation of variable <static class variable> required here,
>>               but no definition is available”.
>> 
>>       globalDefinitions_gcc.hpp
>>               Define FORMAT64_MODIFIER properly for Apple, needed by os.cpp.
>> 
>>       globalDefinitions.hpp
>>              Add INTPTRNZ_FORMAT, needed by ciMethodData.cpp.
> 
> 
> 
> 
> 



More information about the hotspot-dev mailing list