Skip to content
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

fix(42678): detect access to uninitialized variable in IIFE #42776

Merged
merged 6 commits into from Dec 6, 2021

Conversation

Zzzen
Copy link
Contributor

@Zzzen Zzzen commented Feb 12, 2021

Fixes #42678

@typescript-bot typescript-bot added the For Backlog Bug PRs that fix a backlog bug label Feb 12, 2021
@sandersn sandersn added this to Not started in PR Backlog Mar 2, 2021
src/compiler/checker.ts Outdated Show resolved Hide resolved
PR Backlog automation moved this from Not started to Waiting on author Mar 9, 2021
@jakebailey jakebailey moved this from Waiting on author to Waiting on reviewers in PR Backlog Nov 30, 2021
src/compiler/checker.ts Outdated Show resolved Hide resolved
@jakebailey

This comment has been minimized.

@typescript-bot

This comment has been minimized.

@typescript-bot

This comment has been minimized.

@typescript-bot

This comment has been minimized.

@jakebailey

This comment has been minimized.

@typescript-bot
Copy link
Collaborator

typescript-bot commented Nov 30, 2021

Heya @jakebailey, I've started to run the extended test suite on this PR at cce614e. You can monitor the build here.

@typescript-bot

This comment has been minimized.

@typescript-bot

This comment has been minimized.

@jakebailey
Copy link
Member

I've gone and merged main into this and fixed the one coding style thing to move this forward.

@andrewbranch

This comment has been minimized.

@typescript-bot

This comment has been minimized.

@jakebailey
Copy link
Member

@typescript-bot perf test this

@typescript-bot
Copy link
Collaborator

typescript-bot commented Dec 1, 2021

Heya @jakebailey, I've started to run the perf test suite on this PR at cce614e. You can monitor the build here.

Update: The results are in!

@typescript-bot
Copy link
Collaborator

@jakebailey
The results of the perf run you requested are in!

Here they are:

Comparison Report - main..42776

Metric main 42776 Delta Best Worst
Angular - node (v10.16.3, x64)
Memory used 354,508k (± 0.02%) 354,921k (± 0.02%) +413k (+ 0.12%) 354,688k 355,049k
Parse Time 1.95s (± 0.32%) 1.95s (± 0.43%) +0.00s (+ 0.10%) 1.93s 1.97s
Bind Time 0.84s (± 0.89%) 0.84s (± 0.79%) 0.00s ( 0.00%) 0.83s 0.86s
Check Time 5.47s (± 0.45%) 5.51s (± 0.54%) +0.04s (+ 0.73%) 5.46s 5.60s
Emit Time 5.86s (± 0.33%) 5.89s (± 0.41%) +0.03s (+ 0.53%) 5.84s 5.96s
Total Time 14.12s (± 0.26%) 14.19s (± 0.16%) +0.07s (+ 0.53%) 14.15s 14.25s
Compiler-Unions - node (v10.16.3, x64)
Memory used 204,059k (± 0.03%) 203,755k (± 0.29%) -303k (- 0.15%) 201,398k 204,106k
Parse Time 0.78s (± 0.87%) 0.79s (± 0.66%) +0.01s (+ 0.64%) 0.78s 0.80s
Bind Time 0.52s (± 1.11%) 0.52s (± 1.11%) +0.00s (+ 0.58%) 0.51s 0.54s
Check Time 7.81s (± 0.50%) 7.85s (± 0.56%) +0.05s (+ 0.60%) 7.76s 7.94s
Emit Time 2.46s (± 0.78%) 2.48s (± 0.83%) +0.02s (+ 0.81%) 2.45s 2.52s
Total Time 11.56s (± 0.33%) 11.64s (± 0.46%) +0.07s (+ 0.64%) 11.53s 11.76s
Monaco - node (v10.16.3, x64)
Memory used 342,426k (± 0.02%) 342,448k (± 0.01%) +22k (+ 0.01%) 342,364k 342,609k
Parse Time 1.48s (± 0.44%) 1.48s (± 0.40%) +0.01s (+ 0.41%) 1.47s 1.50s
Bind Time 0.74s (± 0.66%) 0.74s (± 0.49%) 0.00s ( 0.00%) 0.74s 0.75s
Check Time 5.47s (± 0.70%) 5.47s (± 0.57%) -0.00s (- 0.05%) 5.43s 5.54s
Emit Time 3.19s (± 0.69%) 3.21s (± 0.91%) +0.03s (+ 0.91%) 3.16s 3.30s
Total Time 10.88s (± 0.22%) 10.91s (± 0.37%) +0.03s (+ 0.31%) 10.83s 11.00s
TFS - node (v10.16.3, x64)
Memory used 305,439k (± 0.03%) 305,528k (± 0.02%) +88k (+ 0.03%) 305,416k 305,658k
Parse Time 1.20s (± 0.46%) 1.20s (± 0.50%) -0.00s (- 0.17%) 1.18s 1.21s
Bind Time 0.71s (± 0.66%) 0.71s (± 0.48%) -0.00s (- 0.42%) 0.70s 0.71s
Check Time 5.03s (± 0.43%) 5.01s (± 0.41%) -0.01s (- 0.28%) 4.99s 5.09s
Emit Time 3.34s (± 0.93%) 3.35s (± 1.25%) +0.01s (+ 0.36%) 3.29s 3.44s
Total Time 10.28s (± 0.35%) 10.27s (± 0.55%) -0.01s (- 0.06%) 10.17s 10.42s
material-ui - node (v10.16.3, x64)
Memory used 471,310k (± 0.01%) 471,313k (± 0.01%) +3k (+ 0.00%) 471,189k 471,399k
Parse Time 1.77s (± 0.40%) 1.77s (± 0.51%) 0.00s ( 0.00%) 1.75s 1.79s
Bind Time 0.65s (± 0.52%) 0.65s (± 0.56%) +0.00s (+ 0.15%) 0.65s 0.66s
Check Time 14.17s (± 0.38%) 14.16s (± 0.50%) -0.00s (- 0.00%) 14.01s 14.32s
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) 0.00s ( NaN%) 0.00s 0.00s
Total Time 16.59s (± 0.34%) 16.59s (± 0.45%) -0.00s (- 0.01%) 16.43s 16.76s
xstate - node (v10.16.3, x64)
Memory used 568,998k (± 0.02%) 569,059k (± 0.02%) +61k (+ 0.01%) 568,832k 569,253k
Parse Time 2.55s (± 0.30%) 2.55s (± 0.34%) +0.00s (+ 0.08%) 2.53s 2.56s
Bind Time 1.00s (± 0.55%) 1.01s (± 0.47%) +0.00s (+ 0.50%) 1.00s 1.02s
Check Time 1.49s (± 0.50%) 1.49s (± 0.52%) -0.00s (- 0.27%) 1.48s 1.51s
Emit Time 0.07s (± 0.00%) 0.07s (± 0.00%) 0.00s ( 0.00%) 0.07s 0.07s
Total Time 5.11s (± 0.19%) 5.11s (± 0.29%) +0.01s (+ 0.16%) 5.09s 5.16s
Angular - node (v12.1.0, x64)
Memory used 332,458k (± 0.02%) 332,646k (± 0.07%) +188k (+ 0.06%) 331,710k 332,947k
Parse Time 1.94s (± 0.56%) 1.95s (± 0.48%) +0.01s (+ 0.46%) 1.93s 1.97s
Bind Time 0.82s (± 0.91%) 0.82s (± 1.08%) +0.00s (+ 0.61%) 0.81s 0.85s
Check Time 5.30s (± 0.30%) 5.31s (± 0.46%) +0.01s (+ 0.21%) 5.28s 5.39s
Emit Time 6.15s (± 0.96%) 6.14s (± 0.70%) -0.01s (- 0.15%) 6.05s 6.24s
Total Time 14.21s (± 0.47%) 14.22s (± 0.38%) +0.01s (+ 0.09%) 14.12s 14.34s
Compiler-Unions - node (v12.1.0, x64)
Memory used 191,602k (± 0.03%) 191,518k (± 0.04%) -85k (- 0.04%) 191,304k 191,656k
Parse Time 0.78s (± 0.61%) 0.78s (± 1.15%) -0.01s (- 0.89%) 0.77s 0.81s
Bind Time 0.53s (± 0.89%) 0.53s (± 0.98%) -0.00s (- 0.75%) 0.52s 0.54s
Check Time 7.28s (± 0.39%) 7.32s (± 0.71%) +0.04s (+ 0.54%) 7.23s 7.43s
Emit Time 2.47s (± 0.81%) 2.46s (± 0.95%) -0.01s (- 0.36%) 2.41s 2.52s
Total Time 11.07s (± 0.38%) 11.08s (± 0.60%) +0.02s (+ 0.14%) 10.94s 11.21s
Monaco - node (v12.1.0, x64)
Memory used 325,493k (± 0.04%) 325,483k (± 0.02%) -11k (- 0.00%) 325,328k 325,627k
Parse Time 1.46s (± 0.72%) 1.47s (± 0.60%) +0.02s (+ 1.10%) 1.45s 1.49s
Bind Time 0.73s (± 0.61%) 0.72s (± 0.51%) -0.00s (- 0.41%) 0.72s 0.73s
Check Time 5.34s (± 0.48%) 5.37s (± 0.62%) +0.03s (+ 0.56%) 5.26s 5.43s
Emit Time 3.21s (± 0.55%) 3.24s (± 0.97%) +0.03s (+ 0.78%) 3.19s 3.32s
Total Time 10.74s (± 0.36%) 10.81s (± 0.47%) +0.07s (+ 0.66%) 10.69s 10.91s
TFS - node (v12.1.0, x64)
Memory used 290,301k (± 0.03%) 290,256k (± 0.02%) -45k (- 0.02%) 290,106k 290,369k
Parse Time 1.21s (± 0.48%) 1.22s (± 0.82%) +0.00s (+ 0.33%) 1.20s 1.24s
Bind Time 0.68s (± 0.54%) 0.69s (± 1.16%) +0.01s (+ 1.02%) 0.68s 0.71s
Check Time 4.94s (± 0.47%) 4.92s (± 0.39%) -0.01s (- 0.24%) 4.90s 4.98s
Emit Time 3.40s (± 1.27%) 3.40s (± 0.45%) +0.01s (+ 0.18%) 3.37s 3.45s
Total Time 10.23s (± 0.63%) 10.23s (± 0.22%) +0.01s (+ 0.05%) 10.19s 10.29s
material-ui - node (v12.1.0, x64)
Memory used 450,083k (± 0.02%) 449,865k (± 0.08%) -219k (- 0.05%) 448,900k 450,212k
Parse Time 1.78s (± 0.33%) 1.78s (± 0.56%) +0.00s (+ 0.06%) 1.75s 1.80s
Bind Time 0.64s (± 1.14%) 0.64s (± 0.97%) +0.00s (+ 0.16%) 0.63s 0.65s
Check Time 12.69s (± 0.40%) 12.79s (± 0.76%) +0.10s (+ 0.80%) 12.64s 13.09s
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) 0.00s ( NaN%) 0.00s 0.00s
Total Time 15.10s (± 0.33%) 15.20s (± 0.62%) +0.10s (+ 0.66%) 15.05s 15.49s
xstate - node (v12.1.0, x64)
Memory used 535,055k (± 0.02%) 535,050k (± 0.02%) -6k (- 0.00%) 534,852k 535,269k
Parse Time 2.48s (± 0.47%) 2.50s (± 0.51%) +0.02s (+ 0.89%) 2.48s 2.53s
Bind Time 1.04s (± 0.75%) 1.03s (± 0.66%) -0.00s (- 0.48%) 1.02s 1.05s
Check Time 1.43s (± 0.56%) 1.43s (± 0.73%) +0.00s (+ 0.14%) 1.41s 1.45s
Emit Time 0.07s (± 0.00%) 0.07s (± 0.00%) 0.00s ( 0.00%) 0.07s 0.07s
Total Time 5.02s (± 0.27%) 5.02s (± 0.34%) +0.01s (+ 0.18%) 4.99s 5.06s
Angular - node (v14.15.1, x64)
Memory used 330,820k (± 0.01%) 331,201k (± 0.01%) +381k (+ 0.12%) 331,121k 331,245k
Parse Time 1.94s (± 0.53%) 1.94s (± 0.50%) 0.00s ( 0.00%) 1.92s 1.96s
Bind Time 0.86s (± 0.55%) 0.86s (± 0.75%) +0.00s (+ 0.23%) 0.85s 0.88s
Check Time 5.38s (± 0.48%) 5.38s (± 0.44%) +0.01s (+ 0.11%) 5.34s 5.44s
Emit Time 6.15s (± 0.33%) 6.19s (± 0.57%) +0.05s (+ 0.78%) 6.14s 6.29s
Total Time 14.32s (± 0.26%) 14.38s (± 0.35%) +0.06s (+ 0.41%) 14.28s 14.49s
Compiler-Unions - node (v14.15.1, x64)
Memory used 192,757k (± 0.49%) 191,181k (± 0.57%) -1,576k (- 0.82%) 190,163k 193,466k
Parse Time 0.81s (± 1.01%) 0.81s (± 0.80%) +0.00s (+ 0.12%) 0.80s 0.83s
Bind Time 0.55s (± 0.73%) 0.55s (± 0.54%) +0.00s (+ 0.18%) 0.55s 0.56s
Check Time 7.34s (± 0.34%) 7.37s (± 0.86%) +0.03s (+ 0.44%) 7.29s 7.58s
Emit Time 2.48s (± 0.90%) 2.47s (± 0.84%) -0.01s (- 0.28%) 2.43s 2.52s
Total Time 11.18s (± 0.30%) 11.20s (± 0.73%) +0.02s (+ 0.21%) 11.09s 11.47s
Monaco - node (v14.15.1, x64)
Memory used 324,294k (± 0.00%) 324,323k (± 0.01%) +29k (+ 0.01%) 324,288k 324,382k
Parse Time 1.50s (± 0.56%) 1.51s (± 0.48%) +0.01s (+ 0.47%) 1.49s 1.52s
Bind Time 0.76s (± 0.59%) 0.76s (± 1.24%) +0.00s (+ 0.26%) 0.74s 0.79s
Check Time 5.29s (± 0.43%) 5.29s (± 0.62%) +0.00s (+ 0.09%) 5.21s 5.35s
Emit Time 3.25s (± 0.78%) 3.24s (± 0.74%) -0.00s (- 0.06%) 3.17s 3.31s
Total Time 10.80s (± 0.35%) 10.80s (± 0.54%) +0.01s (+ 0.07%) 10.64s 10.94s
TFS - node (v14.15.1, x64)
Memory used 289,141k (± 0.00%) 289,143k (± 0.00%) +2k (+ 0.00%) 289,114k 289,164k
Parse Time 1.22s (± 0.82%) 1.23s (± 0.76%) +0.00s (+ 0.41%) 1.21s 1.25s
Bind Time 0.73s (± 0.55%) 0.73s (± 0.41%) +0.00s (+ 0.14%) 0.73s 0.74s
Check Time 4.91s (± 0.33%) 4.92s (± 0.36%) +0.01s (+ 0.24%) 4.89s 4.97s
Emit Time 3.51s (± 0.53%) 3.50s (± 1.41%) -0.01s (- 0.17%) 3.31s 3.56s
Total Time 10.38s (± 0.26%) 10.38s (± 0.62%) +0.01s (+ 0.09%) 10.15s 10.48s
material-ui - node (v14.15.1, x64)
Memory used 448,276k (± 0.01%) 448,215k (± 0.06%) -61k (- 0.01%) 447,126k 448,390k
Parse Time 1.82s (± 0.34%) 1.83s (± 0.51%) +0.01s (+ 0.49%) 1.80s 1.85s
Bind Time 0.67s (± 0.54%) 0.68s (± 0.95%) +0.00s (+ 0.59%) 0.67s 0.69s
Check Time 12.77s (± 0.39%) 12.87s (± 0.94%) +0.10s (+ 0.78%) 12.67s 13.24s
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) 0.00s ( NaN%) 0.00s 0.00s
Total Time 15.26s (± 0.33%) 15.37s (± 0.80%) +0.11s (+ 0.73%) 15.18s 15.74s
xstate - node (v14.15.1, x64)
Memory used 532,756k (± 0.01%) 532,856k (± 0.01%) +100k (+ 0.02%) 532,782k 532,933k
Parse Time 2.55s (± 0.63%) 2.56s (± 0.42%) +0.00s (+ 0.20%) 2.54s 2.59s
Bind Time 1.15s (± 1.10%) 1.15s (± 0.86%) +0.00s (+ 0.26%) 1.13s 1.18s
Check Time 1.48s (± 0.52%) 1.48s (± 0.47%) +0.00s (+ 0.27%) 1.47s 1.50s
Emit Time 0.07s (± 0.00%) 0.07s (± 0.00%) 0.00s ( 0.00%) 0.07s 0.07s
Total Time 5.25s (± 0.50%) 5.26s (± 0.34%) +0.01s (+ 0.19%) 5.23s 5.31s
System
Machine Namets-ci-ubuntu
Platformlinux 4.4.0-210-generic
Architecturex64
Available Memory16 GB
Available Memory10 GB
CPUs4 × Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Hosts
  • node (v10.16.3, x64)
  • node (v12.1.0, x64)
  • node (v14.15.1, x64)
Scenarios
  • Angular - node (v10.16.3, x64)
  • Angular - node (v12.1.0, x64)
  • Angular - node (v14.15.1, x64)
  • Compiler-Unions - node (v10.16.3, x64)
  • Compiler-Unions - node (v12.1.0, x64)
  • Compiler-Unions - node (v14.15.1, x64)
  • Monaco - node (v10.16.3, x64)
  • Monaco - node (v12.1.0, x64)
  • Monaco - node (v14.15.1, x64)
  • TFS - node (v10.16.3, x64)
  • TFS - node (v12.1.0, x64)
  • TFS - node (v14.15.1, x64)
  • material-ui - node (v10.16.3, x64)
  • material-ui - node (v12.1.0, x64)
  • material-ui - node (v14.15.1, x64)
  • xstate - node (v10.16.3, x64)
  • xstate - node (v12.1.0, x64)
  • xstate - node (v14.15.1, x64)
Benchmark Name Iterations
Current 42776 10
Baseline main 10

Developer Information:

Download Benchmark

@jakebailey

This comment has been minimized.

@typescript-bot

This comment has been minimized.

@jakebailey

This comment has been minimized.

@typescript-bot

This comment has been minimized.

@jakebailey
Copy link
Member

@typescript-bot user test this

@typescript-bot
Copy link
Collaborator

typescript-bot commented Dec 2, 2021

Heya @jakebailey, I've started to run the parallelized community code test suite on this PR at 02123f7. You can monitor the build here.

@jakebailey
Copy link
Member

Sorry about the noise on this; lots of build issues. 🙂

@typescript-bot
Copy link
Collaborator

The user suite test run you requested has finished and failed. I've opened a PR with the baseline diff from master.

* Return false if 'stopAt' node is reached or isFunctionLike(current) === true.
*/
function isSameScopeDescendentOf(initial: Node, parent: Node | undefined, stopAt: Node): boolean {
return !!parent && !!findAncestor(initial, n => n === stopAt || isFunctionLike(n) ? "quit" : n === parent);
return !!parent && !!findAncestor(initial, n => {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't this equivalent? I think I like it better simply because it's so much shorter, although I'm not 100% sure.

Suggested change
return !!parent && !!findAncestor(initial, n => {
return !!parent && !!findAncestor(initial, n => n === stopAt || isFunctionLike(n) && !getImmediatelyInvokedFunctionExpression() : n === parent);

Copy link
Contributor Author

@Zzzen Zzzen Dec 4, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, it works. But I wonder if we should have n === parent before isFunctionLike(n) && !getImmediatelyInvokedFunctionExpression() because parent might be a function.

PR Backlog automation moved this from Waiting on reviewers to Needs merge Dec 6, 2021
@sandersn sandersn merged commit 7a1687d into microsoft:main Dec 6, 2021
PR Backlog automation moved this from Needs merge to Done Dec 6, 2021
mprobst pushed a commit to mprobst/TypeScript that referenced this pull request Jan 10, 2022
…t#42776)

* fix(42678): detect access to uninitialized variable in IIFE

* improve performance

* Add missing space to match coding guidelines

* simplify the implementation

Co-authored-by: Jake Bailey <5341706+jakebailey@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
For Backlog Bug PRs that fix a backlog bug
Projects
PR Backlog
  
Done
Development

Successfully merging this pull request may close these issues.

Undetected access to uninitialized variable
5 participants