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 around accessing 'arguments' object #3259

Closed juj closed 5 years ago

juj commented 5 years ago
var Module = {};
if (typeof arguments != "undefined") {
  Module["arguments"] = arguments;
}

gives

23: java.lang.UnsupportedOperationException
    at com.google.common.collect.ImmutableCollection.add(ImmutableCollection.java:244)
    at com.google.javascript.jscomp.OptimizeArgumentsArray.visit(OptimizeArgumentsArray.java:142)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:894)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:1006)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:890)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:1006)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:890)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:1006)
    at com.google.javascript.jscomp.NodeTraversal.traverseBlockScope(NodeTraversal.java:1021)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:888)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:1006)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:890)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:1006)
    at com.google.javascript.jscomp.NodeTraversal.handleScript(NodeTraversal.java:844)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:869)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:1006)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:890)
    at com.google.javascript.jscomp.NodeTraversal.traverse(NodeTraversal.java:375)
    at com.google.javascript.jscomp.NodeTraversal.traverse(NodeTraversal.java:385)
    at com.google.javascript.jscomp.OptimizeArgumentsArray.process(OptimizeArgumentsArray.java:99)
    at com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process(PhaseOptimizer.java:328)
    at com.google.javascript.jscomp.PhaseOptimizer.process(PhaseOptimizer.java:237)
    at com.google.javascript.jscomp.Compiler.performOptimizations(Compiler.java:2361)
    at com.google.javascript.jscomp.Compiler.lambda$stage2Passes$1(Compiler.java:781)
    at com.google.javascript.jscomp.CompilerExecutor.runInCompilerThread(CompilerExecutor.java:129)
    at com.google.javascript.jscomp.Compiler.runInCompilerThread(Compiler.java:808)
    at com.google.javascript.jscomp.Compiler.stage2Passes(Compiler.java:778)
    at com.google.javascript.jscomp.Compiler.compile(Compiler.java:668)
    at com.google.javascript.jscomp.webservice.backend.CompilerInvokerImpl.compile(CompilerInvokerImpl.java:46)
    at com.google.javascript.jscomp.webservice.backend.ServerController.executeRequest(ServerController.java:181)
    at com.google.javascript.jscomp.webservice.backend.CompilationRequestHandler.serviceParsedRequest(CompilationRequestHandler.java:180)
    at com.google.javascript.jscomp.webservice.backend.CompilationRequestHandler.service(CompilationRequestHandler.java:162)
    at com.google.javascript.jscomp.webservice.frontend.CompilationServlet.doPost(CompilationServlet.java:85)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:848)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1772)
    at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:582)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
    at com.google.apphosting.runtime.jetty9.ParseBlobUploadHandler.handle(ParseBlobUploadHandler.java:119)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1182)
    at com.google.apphosting.runtime.jetty9.AppEngineWebAppContext.doHandle(AppEngineWebAppContext.java:183)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at com.google.apphosting.runtime.jetty9.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:293)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
    at org.eclipse.jetty.server.Server.handle(Server.java:539)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:333)
    at com.google.apphosting.runtime.jetty9.RpcConnection.handle(RpcConnection.java:212)
    at com.google.apphosting.runtime.jetty9.RpcConnector.serviceRequest(RpcConnector.java:81)
    at com.google.apphosting.runtime.jetty9.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:123)
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchServletRequest(JavaRuntime.java:692)
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchRequest(JavaRuntime.java:655)
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:625)
    at com.google.apphosting.runtime.JavaRuntime$NullSandboxRequestRunnable.run(JavaRuntime.java:817)
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:269)
    at java.lang.Thread.run(Thread.java:748)

Original Post Data: 
output_format=json&output_info=compiled_code&output_info=warnings&output_info=errors&output_info=statistics&compilation_level=SIMPLE_OPTIMIZATIONS&warning_level=default&output_file_name=default.js&js_code=var%20Module%20%3D%20%7B%7D%3B%0Aif%20(typeof%20arguments%20!%3D%20%22undefined%22)%20%7B%0A%20%20Module%5B%22arguments%22%5D%20%3D%20arguments%3B%0A%7D

occurs on both https://closure-compiler.appspot.com/home and cli.js with version 20190301.0.0.

juj commented 5 years ago

Further reducing,

if (typeof arguments != "undefined") {
  console.log(arguments);
}

does still crash, but

if (typeof arguments != "undefined") {
}

does not, and neither does a plain

console.log(arguments);
blickly commented 5 years ago

Created internal issue http://b/128460592