If you qualify a static field reference with a side-effect causing expression, and the field reference doesn't generate a clinit call, you will reference an undefined field at run time.  I fixed this by explicitly qualifying the field reference with "window" in this particular case, but a general solution is needed when we generate JS inside of an anonymous function body, because neither window nor clinit referencing will work then.
Review by: mmendez
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@616 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
index 10c8306..340dd9d 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
@@ -631,12 +631,23 @@
       }
 
       JField field = x.getField();
-      JsInvocation jsInvocation = maybeCreateClinitCall(field);
-      if (jsInvocation != null) {
-        qualifier = createCommaExpression(qualifier, jsInvocation);
+      if (field.isStatic()) {
+        JsExpression realQualifier = maybeCreateClinitCall(field);
+        if (qualifier != null) {
+          // There is an unused qualifier. We must create a comma expression
+          // since there's no way to reference the field from the qualifier.
+          if (realQualifier == null) {
+            // ugh, must synthesize a call to window to be the real qualifier
+            // TODO: this will BREAK when we use inline JS
+            realQualifier = topScope.findExistingUnobfuscatableName("window").makeRef();
+          }
+          realQualifier = createCommaExpression(qualifier, realQualifier);
+        }
+        // the name ref's qualifier is either a clinit, or nothing
+        nameRef.setQualifier(realQualifier);
+      } else {
+        nameRef.setQualifier(qualifier); // instance
       }
-
-      nameRef.setQualifier(qualifier); // instance
       push(nameRef);
     }