google / closure-compiler

A JavaScript checker and optimizer.
https://developers.google.com/closure/compiler/
Apache License 2.0
7.4k stars 1.15k forks source link

Internal Compiler Error #2364

Closed aavrane closed 7 years ago

aavrane commented 7 years ago

I am receiving the following error when compiling a JS script using the online compiler at http://closure-compiler.appspot.com/

The same script compiled OK last November.

` Error(23): java.lang.RuntimeException: INTERNAL COMPILER ERROR. Please report this problem.

Unexpected variable msg Node(NAME msg): Input_0:15054:65 if(!z2) return alert(II.msg('trigger','parse',Array(trigDef,err,msg,err.line,script))); Parent(ARRAYLIT): Input_0:15054:47 if(!z2) return alert(II.msg('trigger','parse',Array(trigDef,err,msg,err.line,script)));

at com.google.javascript.jscomp.VarCheck.visit(VarCheck.java:208)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:643)
at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:715)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:639)
at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:715)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:639)
at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:715)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:639)
at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:715)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:639)
at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:715)
at com.google.javascript.jscomp.NodeTraversal.traverseBlockScope(NodeTraversal.java:730)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:637)
at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:715)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:639)
at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:715)
at com.google.javascript.jscomp.NodeTraversal.traverseBlockScope(NodeTraversal.java:730)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:637)
at com.google.javascript.jscomp.NodeTraversal.traverseFunction(NodeTraversal.java:674)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:631)
at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:715)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:639)
at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:715)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:639)
at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:715)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:639)
at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:715)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:639)
at com.google.javascript.jscomp.NodeTraversal.traverseRoots(NodeTraversal.java:333)
at com.google.javascript.jscomp.VarCheck.process(VarCheck.java:146)
at com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process(PhaseOptimizer.java:296)
at com.google.javascript.jscomp.PhaseOptimizer.process(PhaseOptimizer.java:228)
at com.google.javascript.jscomp.Compiler.optimize(Compiler.java:2239)
at com.google.javascript.jscomp.Compiler.compileInternal(Compiler.java:797)
at com.google.javascript.jscomp.Compiler.access$000(Compiler.java:90)
at com.google.javascript.jscomp.Compiler$2.call(Compiler.java:736)
at com.google.javascript.jscomp.Compiler$2.call(Compiler.java:733)
at com.google.javascript.jscomp.CompilerExecutor.runInCompilerThread(CompilerExecutor.java:116)
at com.google.javascript.jscomp.Compiler.runInCompilerThread(Compiler.java:763)
at com.google.javascript.jscomp.Compiler.compile(Compiler.java:733)
at com.google.javascript.jscomp.Compiler.compile(Compiler.java:703)
at com.google.javascript.jscomp.webservice.backend.CompilerInvokerImpl.compile(CompilerInvokerImpl.java:46)
at com.google.javascript.jscomp.webservice.backend.ServerController.executeRequest(ServerController.java:179)
at com.google.javascript.jscomp.webservice.backend.CompilationRequestHandler.serviceParsedRequest(CompilationRequestHandler.java:178)
at com.google.javascript.jscomp.webservice.backend.CompilationRequestHandler.service(CompilationRequestHandler.java:160)
at com.google.javascript.jscomp.webservice.frontend.CompilationServlet.doPost(CompilationServlet.java:83)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:37)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:48)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:257)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:145)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchServletRequest(JavaRuntime.java:559)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchRequest(JavaRuntime.java:519)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:489)
at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:453)
at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:460)
at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:293)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:319)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:311)
at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:457)
at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:238)
at java.lang.Thread.run(Thread.java:745)

Caused by: java.lang.IllegalStateException: Unexpected variable msg ... 82 more

`

The script can be found at http://aavrane.nerim.net/test/m_appl.js

Thx.

MatrixFrog commented 7 years ago

If you can find a smaller repro that would be greatly appreciated. By the way, passing already-compiled code through Closure Compiler is unlikely to be useful, generally.

dimvar commented 7 years ago

Small repro [here](https://closure-compiler-debugger.appspot.com/#input0%3Dfunction%2520foo()%2520%257B%250A%2520%2520var%2520msg%253B%250A%257D%250A%250Afunction%2520bar()%2520%257B%250A%2520%2520msg%253B%250A%2520%2520try%2520%257B%257D%250A%2520%2520catch(err)%2520%257B%250A%2520%2520%2520%2520var%2520msg%253B%250A%2520%2520%257D%250A%257D%26input1%26conformanceConfig%26externs%26refasterjs-template%26includeDefaultExterns%3D1%26CHECK_SYMBOLS%3D1%26MISSING_PROPERTIES%3D1%26TRANSPILE%3D1%26CHECK_TYPES%3D1%26CLOSURE_PASS%3D1%26PRESERVE_TYPE_ANNOTATIONS%3D1%26PRETTY_PRINT%3D1).

function foo() {
  var msg;
}

function bar() {
  msg;
  try {}
  catch(err) {
    var msg;
  }
}
MatrixFrog commented 7 years ago

Ah yes, we've seen something similar to this a few weeks ago I think. The normalize pass is messing things up here by renaming 'msg' inconsistently. I have a change that I've been working on but has sort of gone dormant, which should fix this.

aavrane commented 7 years ago

The original script had an undeclared variable 'msg' but there was a declared anonymous function with the same name (ie. II.msg=function() { .. } ). Fixing this solved the issue in my side. Thanks.

MatrixFrog commented 7 years ago

This should be fixed now, after ecdfdd0bed05907305f0b5652aae2705aafe1bc1 -- I'll add a test too.