Merge
diff --git a/.hgtags-top-repo b/.hgtags-top-repo
index 32d5998..ac1df26 100644
--- a/.hgtags-top-repo
+++ b/.hgtags-top-repo
@@ -594,3 +594,4 @@
 534d4e07c81fc8656cdb0856e22aafbdc54e474a jdk8u101-b01
 18e1f0ee965b0565514027543546348ed99bf4a4 jdk8u101-b02
 fe138c6f5aa8455ee704e58d7d7ffc90fdd230c3 jdk8u101-b03
+fe901996777f50198be2c785cd7e3b8198692bbe jdk8u101-b04
diff --git a/corba/.hgtags b/corba/.hgtags
index 992074c..ceddbbd 100644
--- a/corba/.hgtags
+++ b/corba/.hgtags
@@ -630,3 +630,4 @@
 8674aec1be6459f33451690fb106eec314964116 jdk8u101-b01
 96a43945cb6a69989294b511ecdfc0493ea09bf1 jdk8u101-b02
 371b0c5477d8613c06fd1206deed27759f18e42e jdk8u101-b03
+52cca1ce8b473ecd751da2350d4b3ef111b5676e jdk8u101-b04
diff --git a/hotspot/.hgtags b/hotspot/.hgtags
index 2f26101..bba6860 100644
--- a/hotspot/.hgtags
+++ b/hotspot/.hgtags
@@ -860,3 +860,4 @@
 ead07188d11107e877e8e4ad215ff6cb238a8a92 jdk8u101-b01
 34429bad9986677f4991c80aeb22665842881cba jdk8u101-b02
 b41d5faaf1d32ed1bf9592f65f2f94ddd4c60fc4 jdk8u101-b03
+ceecf88e5c2c09bfabf5926581e6d0b0f65f5148 jdk8u101-b04
diff --git a/jaxp/.hgtags b/jaxp/.hgtags
index 2309bb5..b045890 100644
--- a/jaxp/.hgtags
+++ b/jaxp/.hgtags
@@ -599,3 +599,4 @@
 fb5e0a18ad7d49134616879d1a500b1356e12fd4 jdk8u101-b01
 c7aeb4e55b0f7de8c5bd2a6e41dc5c54c4239271 jdk8u101-b02
 c678c1a31a553ebe7a8fd3888acc282dbd975e3b jdk8u101-b03
+a6a032a5490f4000bdfb25a2f604b22bcdf95ecf jdk8u101-b04
diff --git a/jaxws/.hgtags b/jaxws/.hgtags
index a8ce50b..7fc21d3 100644
--- a/jaxws/.hgtags
+++ b/jaxws/.hgtags
@@ -588,3 +588,4 @@
 0bff22fbd91f48c37f7c5a4544929231b92bd9bf jdk8u101-b01
 31e437ae0354e628a675bc4eb6b9ca67af552fc2 jdk8u101-b02
 2a5ea5a78ae7332b3d13af5580418ca9d186cda7 jdk8u101-b03
+d3b054313ed2d29f9dbbdfd71a7ab3c4ad4eb5b6 jdk8u101-b04
diff --git a/jdk/.hgtags b/jdk/.hgtags
index a4dbc67..61583b9 100644
--- a/jdk/.hgtags
+++ b/jdk/.hgtags
@@ -592,3 +592,4 @@
 00f8f39308687cde45f23282871c46cc6c2f10b3 jdk8u101-b01
 6042757c329b1b96fa6bc931e09306794f5c50c0 jdk8u101-b02
 25934d0d38fe10383ff22eb3f39bf5e8b9e73ac9 jdk8u101-b03
+ebc56c2e803597ef409a5296addc986b390d934d jdk8u101-b04
diff --git a/jdk/src/share/classes/java/lang/invoke/DirectMethodHandle.java b/jdk/src/share/classes/java/lang/invoke/DirectMethodHandle.java
index cabd071..df3c2be 100644
--- a/jdk/src/share/classes/java/lang/invoke/DirectMethodHandle.java
+++ b/jdk/src/share/classes/java/lang/invoke/DirectMethodHandle.java
@@ -158,7 +158,7 @@
     private static LambdaForm preparedLambdaForm(MemberName m) {
         assert(m.isInvocable()) : m;  // call preparedFieldLambdaForm instead
         MethodType mtype = m.getInvocationType().basicType();
-        assert(!m.isMethodHandleInvoke() || "invokeBasic".equals(m.getName())) : m;
+        assert(!m.isMethodHandleInvoke()) : m;
         int which;
         switch (m.getReferenceKind()) {
         case REF_invokeVirtual:    which = LF_INVVIRTUAL;    break;
diff --git a/jdk/src/share/classes/java/lang/invoke/LambdaForm.java b/jdk/src/share/classes/java/lang/invoke/LambdaForm.java
index 09a742f..9420d3b 100644
--- a/jdk/src/share/classes/java/lang/invoke/LambdaForm.java
+++ b/jdk/src/share/classes/java/lang/invoke/LambdaForm.java
@@ -1034,7 +1034,7 @@
             this.member = member;
             this.resolvedHandle = resolvedHandle;
              // The following assert is almost always correct, but will fail for corner cases, such as PrivateInvokeTest.
-             //assert(!isInvokeBasic());
+             //assert(!isInvokeBasic(member));
         }
         NamedFunction(MethodType basicInvokerType) {
             assert(basicInvokerType == basicInvokerType.basicType()) : basicInvokerType;
@@ -1045,13 +1045,13 @@
                 // necessary to pass BigArityTest
                 this.member = Invokers.invokeBasicMethod(basicInvokerType);
             }
-            assert(isInvokeBasic());
+            assert(isInvokeBasic(member));
         }
 
-        private boolean isInvokeBasic() {
+        private static boolean isInvokeBasic(MemberName member) {
             return member != null &&
-                   member.isMethodHandleInvoke() &&
-                   "invokeBasic".equals(member.getName());
+                   member.getDeclaringClass() == MethodHandle.class &&
+                  "invokeBasic".equals(member.getName());
         }
 
         // The next 3 constructors are used to break circular dependencies on MH.invokeStatic, etc.
@@ -1191,7 +1191,7 @@
             assert(mh.type().basicType() == MethodType.genericMethodType(arity).changeReturnType(rtype))
                     : Arrays.asList(mh, rtype, arity);
             MemberName member = mh.internalMemberName();
-            if (member != null && member.getName().equals("invokeBasic") && member.isMethodHandleInvoke()) {
+            if (isInvokeBasic(member)) {
                 assert(arity > 0);
                 assert(a[0] instanceof MethodHandle);
                 MethodHandle mh2 = (MethodHandle) a[0];
diff --git a/jdk/src/share/classes/java/lang/invoke/MemberName.java b/jdk/src/share/classes/java/lang/invoke/MemberName.java
index bcc08e7..b2fc757 100644
--- a/jdk/src/share/classes/java/lang/invoke/MemberName.java
+++ b/jdk/src/share/classes/java/lang/invoke/MemberName.java
@@ -341,7 +341,6 @@
     }
 
     /** Utility method to query if this member is a method handle invocation (invoke or invokeExact).
-     *  Also returns true for the non-public MH.invokeBasic.
      */
     public boolean isMethodHandleInvoke() {
         final int bits = MH_INVOKE_MODS &~ Modifier.PUBLIC;
@@ -356,7 +355,6 @@
         switch (name) {
         case "invoke":
         case "invokeExact":
-        case "invokeBasic":  // internal sig-poly method
             return true;
         default:
             return false;
diff --git a/jdk/src/share/classes/java/lang/invoke/MethodHandles.java b/jdk/src/share/classes/java/lang/invoke/MethodHandles.java
index 8511890..4e8494a 100644
--- a/jdk/src/share/classes/java/lang/invoke/MethodHandles.java
+++ b/jdk/src/share/classes/java/lang/invoke/MethodHandles.java
@@ -864,8 +864,6 @@
                 return invoker(type);
             if ("invokeExact".equals(name))
                 return exactInvoker(type);
-            if ("invokeBasic".equals(name))
-                return basicInvoker(type);
             assert(!MemberName.isMethodHandleInvokeName(name));
             return null;
         }
diff --git a/langtools/.hgtags b/langtools/.hgtags
index 0d99981..630ec06 100644
--- a/langtools/.hgtags
+++ b/langtools/.hgtags
@@ -596,3 +596,4 @@
 a93c1e57407944362e05c79d756425e8c1274d9a jdk8u101-b01
 86a9d99ffadaf26b3d8417666a3600ea1ce7560f jdk8u101-b02
 6a0df041e6c9b0756f1cbc9e1fcb6f519b80d767 jdk8u101-b03
+90f493bfe1faca0573844fdd2497070c8b224d76 jdk8u101-b04
diff --git a/nashorn/.hgtags b/nashorn/.hgtags
index 83ab834..b743cce 100644
--- a/nashorn/.hgtags
+++ b/nashorn/.hgtags
@@ -576,3 +576,4 @@
 793156da7cc9c74489ab5fa5f5598bba172846e2 jdk8u101-b01
 79fc469a68bbe03f69919f4cebe0381df1b1d2a3 jdk8u101-b02
 d93088bdd15d507b35bc4ced85c6c748705511fc jdk8u101-b03
+9bd5aadd8e739d4ad4bb2e30741cdbe9ae2bae66 jdk8u101-b04