diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JProgram.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JProgram.java
index 4e37f8b..2811ac4 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JProgram.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JProgram.java
@@ -816,7 +816,7 @@
 
   public JField getClassLiteralField(JType type) {
     return classLiteralFieldsByType.get(
-        type.isJsoType() ? getJavaScriptObject() : type);
+        (type.isJsNative() || type.isJsoType()) ? getJavaScriptObject() : type);
   }
 
   public List<JDeclaredType> getDeclaredTypes() {
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/ImplementJsVarargs.java b/dev/core/src/com/google/gwt/dev/jjs/impl/ImplementJsVarargs.java
index 0938544..9c86dc0 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/ImplementJsVarargs.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/ImplementJsVarargs.java
@@ -282,9 +282,15 @@
     private VarargsReplacer replacer;
     private JLocal argumentsCopyVariable;
 
+    private boolean needsVarArgsPrologue(JMethod x) {
+      // Native methods in general do not have bodies except for constructors; no code is generated
+      // from them, safe and convenient to skip here.
+      return x.isJsNative() || !x.isJsMethodVarargs();
+    }
+
     @Override
     public boolean visit(JMethod x, Context ctx) {
-      if (!x.isJsMethodVarargs()) {
+      if (needsVarArgsPrologue(x)) {
         return false;
       }
       varargsParameter = Iterables.getLast(x.getParams());
@@ -334,7 +340,7 @@
 
     @Override
     public void endVisit(JMethod x, Context ctx) {
-      if (!x.isJsMethodVarargs()) {
+      if (needsVarArgsPrologue(x)) {
         return;
       }
       // rename the varargs variable to _arguments_.
diff --git a/user/test/com/google/gwt/core/interop/JsTypeVarargsTest.java b/user/test/com/google/gwt/core/interop/JsTypeVarargsTest.java
index 1b72674..36d5172 100644
--- a/user/test/com/google/gwt/core/interop/JsTypeVarargsTest.java
+++ b/user/test/com/google/gwt/core/interop/JsTypeVarargsTest.java
@@ -103,14 +103,20 @@
 
   @JsType(isNative = true, namespace = GLOBAL, name = "Object")
   static class NativeJsType {
+    NativeJsType() { }
+    NativeJsType(int j, NativeJsType... args) { }
   }
 
   @JsType(isNative = true, namespace = GLOBAL,
       name = "JsTypeVarargsTest_MyNativeJsTypeVarargsConstructor")
-  static class NativeJsTypeWithVarargsConstructor {
+  static class NativeJsTypeWithVarargsConstructor extends NativeJsType {
     public Object a;
     public int b;
     NativeJsTypeWithVarargsConstructor(int i, Object... args) { }
+
+    NativeJsTypeWithVarargsConstructor(int i, NativeJsType... args) {
+      super(1, args);
+    }
   }
 
   static class SubclassNativeWithVarargsConstructor extends NativeJsTypeWithVarargsConstructor {
@@ -127,7 +133,7 @@
   static class SubSubclassNativeWithVarargsConstructor
       extends SubclassNativeWithVarargsConstructor {
     SubSubclassNativeWithVarargsConstructor() {
-      super(0, new Object[0]);
+      super(0, new NativeJsType[0]);
     }
 
     Object varargsMethod(int i, Object... args) {
@@ -288,6 +294,21 @@
     assertSame(1, sideEffectCount);
   }
 
+  static class SubclassNativeWithNativeVarargsConstructor
+      extends NativeJsTypeWithVarargsConstructor {
+    public NativeJsType[] ctorargs;
+    SubclassNativeWithNativeVarargsConstructor(int i, NativeJsType... args) {
+      super(i, args);
+      ctorargs = args;
+    }
+  }
+
+  public void testVarargsCall_nativeVarargs() {
+    SubclassNativeWithNativeVarargsConstructor object =
+        new SubclassNativeWithNativeVarargsConstructor(0, new NativeJsType[0]);
+    assertEquals(0, object.ctorargs.length);
+  }
+
   static class UninstantiatedClass {
   }
 
