google / google/closure-compiler
ExpressionDecomposer throws IllegalStateException: Object method calls can not be decomposed
- Dominant language
- JavaScript
- Stars
- 7.7k
- Forks
- 1.2k
- Avg merge
- 2d 12h
- Merged PRs (30d)
- 6
Description
Fuzzing with [JQF](https://github.com/rohanpadhye/jqf) led to the following discovery:
```
o_0 => i_1 &= (undefined[(i_1 => { i_1 })(y_3)])(true)
```
Compiling with `SIMPLE_OPTIMIZATIONS` throws:
```
java.lang.IllegalStateException: Object method calls can not be decomposed.
at com.google.common.base.Preconditions.checkState(Preconditions.java:507)
at com.google.javascript.jscomp.ExpressionDecomposer.exposeExpression(ExpressionDecomposer.java:187)
at com.google.javascript.jscomp.ExpressionDecomposer.exposeExpression(ExpressionDecomposer.java:127)
at com.google.javascript.jscomp.ExpressionDecomposer.maybeExposeExpression(ExpressionDecomposer.java:109)
at com.google.javascript.jscomp.FunctionInjector$CallSiteType$6.prepare(FunctionInjector.java:421)
at com.google.javascript.jscomp.FunctionInjector.maybePrepareCall(FunctionInjector.java:498)
at com.google.javascript.jscomp.InlineFunctions.decomposeExpressions(InlineFunctions.java:785)
at com.google.javascript.jscomp.InlineFunctions.process(InlineFunctions.java:142)
at com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process(PhaseOptimizer.java:310)
at com.google.javascript.jscomp.PhaseOptimizer$Loop.process(PhaseOptimizer.java:455)
at com.google.javascript.jscomp.PhaseOptimizer.process(PhaseOptimizer.java:231)
at com.google.javascript.jscomp.Compiler.performOptimizations(Compiler.java:2384)
at com.google.javascript.jscomp.Compiler.lambda$stage2Passes$1(Compiler.java:795)
at com.google.javascript.jscomp.CompilerExecutor$2.call(CompilerExecutor.java:102
...
```
[Repro link](https://closure-compiler.appspot.com/home#code%3D%252F%252F%2520%253D%253DClosureCompiler%253D%253D%250A%252F%252F%2520%2540output_file_name%2520default.js%250A%252F%252F%2520%2540compilation_level%2520SIMPLE_OPTIMIZATIONS%250A%252F%252F%2520%253D%253D%252FClosureCompiler%253D%253D%250A%250A%250Ao_0%2520%253D%253E%2520i_1%2520%2526%253D%2520(undefined%255B(i_1%2520%253D%253E%2520%257B%2520i_1%2520%257D)(y_3)%255D)(true))
Contributor guide
Assessment
This issue has not been assessed yet.