Fix ICE due to incorrectly tightening a JsVarargs parameter.

Avoid tightening JsVarargs parameters.

Change-Id: Ieea8953bca082c74e6088d0d82b3151907717f0e
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/TypeTightener.java b/dev/core/src/com/google/gwt/dev/jjs/impl/TypeTightener.java
index 6227e40..4b2b068 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/TypeTightener.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/TypeTightener.java
@@ -563,8 +563,12 @@
     public void endVisit(JParameter x, Context ctx) {
       JMethod currentMethod = getCurrentMethod();
       if (program.codeGenTypes.contains(currentMethod.getEnclosingType())
-          || currentMethod.canBeReferencedExternally()) {
-        // We cannot tighten this parameter as we don't know all callers.
+          // We cannot tighten this parameter as we don't know all callers.
+          || currentMethod.canBeReferencedExternally()
+          // And do not tighten JsVararg parameters because the implementation of the JsVarargs
+          // calling convention creates an array of the parameter type hence requires that it is
+          // preserved.
+          || x.isVarargs() && currentMethod.isJsMethodVarargs()) {
         return;
       }
       tighten(x);
diff --git a/user/test/com/google/gwt/core/interop/JsTypeVarargsTest.java b/user/test/com/google/gwt/core/interop/JsTypeVarargsTest.java
index 68322a7..81b95c6 100644
--- a/user/test/com/google/gwt/core/interop/JsTypeVarargsTest.java
+++ b/user/test/com/google/gwt/core/interop/JsTypeVarargsTest.java
@@ -301,11 +301,12 @@
   }
 
   @JsMethod(namespace = JsPackage.GLOBAL)
-  public static UninstantiatedClass[] varargJsMethodUninstantiatedVararg(UninstantiatedClass... varargs) {
-    return varargs;
+  public static int varargJsMethodUninstantiatedVararg(
+      UninstantiatedClass... varargs) {
+    return varargs.length;
   }
 
   public native void testVarargsCall_uninstantiatedVararg() /*-{
-    @GWTTestCase::assertEquals(II)(0, $global.varargJsMethodUninstantiatedVararg().length);
+    @GWTTestCase::assertEquals(II)(0, $global.varargJsMethodUninstantiatedVararg());
   }-*/;
 }