google / google/closure-compiler

INTERNAL COMPILER ERROR when compiling into ES6

Open
#3,284 2 comments 0 reactions 0 assignees View on GitHub
internal-issue-created triage-done
Dominant language
JavaScript
Stars
7.7k
Forks
1.2k
Avg merge
2d 12h
Merged PRs (30d)
6

Description

code:
```
const Message = {
/**
* @param {{
* text: (undefined|string),
* }} data
* @return {{
* text: string,
* }}
*/
create(data = {}) {
const {
text = '',
} = data
return {
text,
}
},
}

const Data = {
/**
* @param {{
* id: (undefined|string),
* message: (undefined|string),
* }=} config
*/
create(config = {}) {
const {
id = 'id',
message = Message.create(),
} = config
return {
id,
message,
}
},
}
console.log(Data)
```

command line:
```
java -jar closure-compiler-1.0-SNAPSHOT.jar --js index.js --compilation_level=ADVANCED --language_out=ECMASCRIPT6
```

compiler output:
```
java.lang.RuntimeException: INTERNAL COMPILER ERROR.
Please report this problem.

DEFAULT_VALUE 29 [length: 9] [source_file: index.js]
Node(RETURN): index.js:32:2
return {
Parent(BLOCK): index.js:27:21
create(config = {}) {

at com.google.common.base.Preconditions.checkState(Preconditions.java:507)
at com.google.javascript.rhino.IR.exprResult(IR.java:243)
at com.google.javascript.jscomp.DeadAssignmentsElimination.tryRemoveAssignment(DeadAssignmentsElimination.java:313)
at com.google.javascript.jscomp.DeadAssignmentsElimination.tryRemoveAssignment(DeadAssignmentsElimination.java:326)
at com.google.javascript.jscomp.DeadAssignmentsElimination.tryRemoveAssignment(DeadAssignmentsElimination.java:193)
at com.google.javascript.jscomp.DeadAssignmentsElimination.tryRemoveDeadAssignments(DeadAssignmentsElimination.java:187)
at com.google.javascript.jscomp.DeadAssignmentsElimination.eliminateDeadAssignments(DeadAssignmentsElimination.java:129)
at com.google.javascript.jscomp.DeadAssignmentsElimination.exitScope(DeadAssignmentsElimination.java:87)
at com.google.javascript.jscomp.NodeTraversal.popScope(NodeTraversal.java:1072)
at com.google.javascript.jscomp.NodeTraversal.popScope(NodeTraversal.java:1063)
at com.google.javascript.jscomp.NodeTraversal.traverseBlockScope(NodeTraversal.java:1015)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:881)
at com.google.javascript.jscomp.NodeTraversal.traverseFunction(NodeTraversal.java:926)
at com.google.javascript.jscomp.NodeTraversal.handleFunction(NodeTraversal.java:849)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:865)
at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:999)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:883)
at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:999)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:883)
at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:999)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:883)
at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:999)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:883)
at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:999)
at com.google.javascript.jscomp.NodeTraversal.handleScript(NodeTraversal.java:837)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:862)
at com.google.javascript.jscomp.NodeTraversal.traverseChildren(NodeTraversal.java:999)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:883)
at com.google.javascript.jscomp.NodeTraversal.traverse(NodeTraversal.java:371)
at com.google.javascript.jscomp.NodeTraversal.traverse(NodeTraversal.java:381)
at com.google.javascript.jscomp.DeadAssignmentsElimination.process(DeadAssignmentsElimination.java:62)
at com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process(PhaseOptimizer.java:328)
at com.google.javascript.jscomp.PhaseOptimizer$Loop.process(PhaseOptimizer.java:473)
at com.google.javascript.jscomp.PhaseOptimizer.process(PhaseOptimizer.java:237)
at com.google.javascript.jscomp.Compiler.performOptimizations(Compiler.java:2369)
at com.google.javascript.jscomp.Compiler.lambda$stage2Passes$1(Compiler.java:789)
at com.google.javascript.jscomp.CompilerExecutor$2.call(CompilerExecutor.java:102)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalStateException: DEFAULT_VALUE 29 [length: 9] [source_file: index.js]
... 41 more
```

Contributor guide

Open the contributing guide

Research direction

Start with the inline index.js reproducer and run the stated Java command using ADVANCED compilation and ECMASCRIPT6 output. Then inspect DeadAssignmentsElimination at the stack-trace location and add a regression case for this input; done means compilation no longer throws the INTERNAL COMPILER ERROR.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript
Domain
compilers
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.