google / google/closure-compiler

ExpressionDecomposer throws IllegalStateException: Object method calls can not be decomposed

Open
#3,220 1 comment 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

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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.