Summary
-------
Obsolete the broken -XX:-InsertMemBarAfterArraycopy C2 flag.
Problem
-------
The flag is enabled by default. Disabling the flag causes crashes during C2 compilation or generation of invalid code.
Solution
--------
The InsertMemBarAfterArraycopy flag will be obsoleted, meaning it will still be recognized but a warning will be generated at startup if it is specified on the command line.
Specification
-------------
Mark the flag as obsolete:
    diff -r bdc20ee1a68d src/hotspot/share/runtime/arguments.cpp
    --- a/src/hotspot/share/runtime/arguments.cpp   Fri Sep 04 23:51:26 2020 -0400
    +++ b/src/hotspot/share/runtime/arguments.cpp   Tue Sep 08 08:15:08 2020 +0200
    @@ -553,6 +553,7 @@
       { "UseNewFieldLayout",             JDK_Version::jdk(15), JDK_Version::jdk(16), JDK_Version::jdk(17) },
       { "UseSemaphoreGCThreadsSynchronization", JDK_Version::undefined(), JDK_Version::jdk(16), JDK_Version::jdk(17) },
       { "ForceNUMA",                     JDK_Version::jdk(15), JDK_Version::jdk(16), JDK_Version::jdk(17) },
    +  { "InsertMemBarAfterArraycopy",    JDK_Version::undefined(), JDK_Version::jdk(16), JDK_Version::jdk(17) },
     
     #ifdef TEST_VERIFY_SPECIAL_JVM_FLAGS
       // These entries will generate build errors.  Their purpose is to test the macros.
Remove it from C2 code:
    diff -r bdc20ee1a68d src/hotspot/share/opto/c2_globals.hpp
    --- a/src/hotspot/share/opto/c2_globals.hpp     Fri Sep 04 23:51:26 2020 -0400
    +++ b/src/hotspot/share/opto/c2_globals.hpp     Tue Sep 08 08:15:08 2020 +0200
    @@ -384,9 +384,6 @@
       product(bool, UseOnlyInlinedBimorphic, true,                              \
               "Don't use BimorphicInlining if can't inline a second method")    \
                                                                                 \
    -  product(bool, InsertMemBarAfterArraycopy, true,                           \
    -          "Insert memory barrier after arraycopy call")                     \
    -                                                                            \
       develop(bool, SubsumeLoads, true,                                         \
               "Attempt to compile while subsuming loads into machine "          \
               "instructions.")                                                  \