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

Hohensee, Paul hohensee at amazon.com
Tue Jun 27 19:34:00 UTC 2017

An attempt at better formatting.


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.



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.


       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


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




        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.

                Just an enhanced comment.

               PT_ATTACH has been replaced by PT_ATTACHEXC

               " 0x%" FORMAT64_MODIFIER "x"  reduces to  "0x%llx", whereas
               " " INTPTRNZ_FORMAT  reduces to  "0x%lx", which latter is what clang want.

               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”.

                Define FORMAT64_MODIFIER properly for Apple, needed by os.cpp.

               Add INTPTRNZ_FORMAT, needed by ciMethodData.cpp.

More information about the hotspot-dev mailing list