Skip to content

Unable to destructure let assignments #2012

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
arciisine opened this issue Sep 15, 2016 · 8 comments
Closed

Unable to destructure let assignments #2012

arciisine opened this issue Sep 15, 2016 · 8 comments
Assignees

Comments

@arciisine
Copy link

I'm working on compiling some generated code, and I seem to be running into an unexpected error when attempting to destructure an array using a let declaration. Changing the let to a var resolves the issue. It looks like the issue could be related to #1124.

The sample code:

(function() {
      'use strict';

      return function _gen82026814(_gen12526804, _gen51426798, _gen59126807) {
    var _gen43726760 = _gen59126807[0], _zzx8_exec = _gen59126807[1], k = _gen59126807[2], x = _gen59126807[3];
    var _gen33726797 = 0, _gen31026800 = null, _gen31926806 = _gen12526804.length;
    _gen21426802:
        for (var _gen71326803 = 0; _gen71326803 < _gen31926806; _gen71326803 += 1) {
            var _gen58026799 = _gen12526804[_gen71326803];
            let [ops_83626812, fn_98826813] = _gen58026799;
            _zzx8_exec(ops_83626812, '__key6326761', _gen43726760, [[
                    function _gen99626759(x, op, i) {
                        let j = (3 - i % 4 + 1) % 4;
                        x[j] = fn_98826813(x[j], x[(j + 1) % 4], x[(j + 2) % 4], x[(j + 3) % 4], k[op[0]], op[1], op[2]);
                        return x;
                    },
                    x
                ]], [
                fn_98826813,
                k
            ]);
            _gen33726797 += 1;
        }
    return {
        value: _gen31026800,
        assigned: []
    };
};
    })()

With running this with the closure compiler, I received the following error:

23: java.lang.RuntimeException: INTERNAL COMPILER ERROR.
Please report this problem.

Invalid attempt to remove node: VAR 9 [length: 699] [source_file: Input_0] of LABEL 8 [length: 13] [source_file: Input_0]
  Node(VAR): Input_0:9:8
        for (var _gen71326803 = 0; _gen71326803 < _gen31926806; _gen71326803 += 1) {
  Parent(LABEL): Input_0:8:4
    _gen21426802:

    at com.google.javascript.jscomp.NodeUtil.removeChild(NodeUtil.java:2680)
    at com.google.javascript.jscomp.UnreachableCodeElimination$EliminationPass.removeNode(UnreachableCodeElimination.java:262)
    at com.google.javascript.jscomp.UnreachableCodeElimination$EliminationPass.removeDeadExprStatementSafely(UnreachableCodeElimination.java:252)
    at com.google.javascript.jscomp.UnreachableCodeElimination$EliminationPass.visit(UnreachableCodeElimination.java:103)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:650)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:722)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:646)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:722)
    at com.google.javascript.jscomp.NodeTraversal.traverseBlockScope(NodeTraversal.java:737)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:644)
    at com.google.javascript.jscomp.NodeTraversal.traverse(NodeTraversal.java:332)
    at com.google.javascript.jscomp.NodeTraversal.traverseEs6(NodeTraversal.java:595)
    at com.google.javascript.jscomp.UnreachableCodeElimination$1.enterFunction(UnreachableCodeElimination.java:80)
    at com.google.javascript.jscomp.NodeTraversal$1.shouldTraverse(NodeTraversal.java:572)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:633)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:722)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:646)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:722)
    at com.google.javascript.jscomp.NodeTraversal.traverseBlockScope(NodeTraversal.java:737)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:644)
    at com.google.javascript.jscomp.NodeTraversal.traverseFunction(NodeTraversal.java:681)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:638)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:722)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:646)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:722)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:646)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:722)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:646)
    at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:722)
    at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:646)
    at com.google.javascript.jscomp.NodeTraversal.traverse(NodeTraversal.java:332)
    at com.google.javascript.jscomp.NodeTraversal.traverseEs6(NodeTraversal.java:595)
    at com.google.javascript.jscomp.NodeTraversal.traverseChangedFunctions(NodeTraversal.java:567)
    at com.google.javascript.jscomp.UnreachableCodeElimination.process(UnreachableCodeElimination.java:65)
    at com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process(PhaseOptimizer.java:285)
    at com.google.javascript.jscomp.PhaseOptimizer$Loop.process(PhaseOptimizer.java:458)
    at com.google.javascript.jscomp.PhaseOptimizer.process(PhaseOptimizer.java:217)
    at com.google.javascript.jscomp.Compiler.optimize(Compiler.java:2049)
    at com.google.javascript.jscomp.Compiler.compileInternal(Compiler.java:759)
    at com.google.javascript.jscomp.Compiler.access$000(Compiler.java:85)
    at com.google.javascript.jscomp.Compiler$2.call(Compiler.java:701)
    at com.google.javascript.jscomp.Compiler$2.call(Compiler.java:698)
    at com.google.javascript.jscomp.CompilerExecutor.runInCompilerThread(CompilerExecutor.java:118)
    at com.google.javascript.jscomp.Compiler.runInCompilerThread(Compiler.java:728)
    at com.google.javascript.jscomp.Compiler.compile(Compiler.java:698)
    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:178)
    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:50)
    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:260)
    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:78)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:148)
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:504)
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:446)
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:453)
    at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:276)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:312)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:304)
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:450)
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:235)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalStateException: Invalid attempt to remove node: VAR 9 [length: 699] [source_file: Input_0] of LABEL 8 [length: 13] [source_file: Input_0]
    ... 85 more
@Dominator008
Copy link
Contributor

Can you try removing the label _gen21426802: and see if that fixes the problem?

@arciisine
Copy link
Author

Removing the label also resolved the issue. So it does appear to be the combination of the label and the let statement together.

@Dominator008 Dominator008 self-assigned this Sep 15, 2016
@brad4d
Copy link
Contributor

brad4d commented Sep 15, 2016

I would guess that it works with 'var' because the UnreachableCodeElimination pass knows that 'var's are hoisted making it unsafe to remove them.

@Dominator008 do you think UnreachableCodeElimination is assuming that code after a label that is never mentioned is automatically unreachable?

@Dominator008
Copy link
Contributor

Dominator008 commented Sep 15, 2016

@brad4d I think this might be a bug with Es6RewriteBlockScopedDeclarations.

@Dominator008
Copy link
Contributor

@arciisine Did you use SIMPLE_OPTIMIZATIONS?

@arciisine
Copy link
Author

For the above, yeah

@Dominator008
Copy link
Contributor

@arciisine Cool thanks. I have a fix for this internally. It will be pushed out soon :)

@arciisine
Copy link
Author

Awesome @Dominator008, looking forward to it.

alexeykomov pushed a commit to alexeykomov/closure-compiler that referenced this issue Feb 8, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants