From 82d4f4288f6f4bd7320d60b7693c3e877965122e Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 2 May 2016 09:22:04 -0700 Subject: [PATCH] Adding regression test --- .../reference/controlFlowWhileStatement.js | 46 ++++++++++++++ .../controlFlowWhileStatement.symbols | 53 ++++++++++++++++ .../reference/controlFlowWhileStatement.types | 62 +++++++++++++++++++ .../controlFlow/controlFlowWhileStatement.ts | 23 +++++++ 4 files changed, 184 insertions(+) diff --git a/tests/baselines/reference/controlFlowWhileStatement.js b/tests/baselines/reference/controlFlowWhileStatement.js index d9faf9bd0ea..c9299330082 100644 --- a/tests/baselines/reference/controlFlowWhileStatement.js +++ b/tests/baselines/reference/controlFlowWhileStatement.js @@ -105,6 +105,29 @@ function h3() { } x; // string | number } +// Repro for #8418 +function foo(x: number): number { return 1; } +function test1() { + let x: number | undefined; + while (cond) { + while (cond) { + while (cond) { + x = foo(x); + } + } + x = 1; + } +} +// Repro for #8418 +function test2() { + let x: number | undefined; + x = 1; + while (cond) { + while (cond) { + x = foo(x); + } + } +} //// [controlFlowWhileStatement.js] @@ -214,3 +237,26 @@ function h3() { } x; // string | number } +// Repro for #8418 +function foo(x) { return 1; } +function test1() { + var x; + while (cond) { + while (cond) { + while (cond) { + x = foo(x); + } + } + x = 1; + } +} +// Repro for #8418 +function test2() { + var x; + x = 1; + while (cond) { + while (cond) { + x = foo(x); + } + } +} diff --git a/tests/baselines/reference/controlFlowWhileStatement.symbols b/tests/baselines/reference/controlFlowWhileStatement.symbols index 3b4def93b45..c38908240ee 100644 --- a/tests/baselines/reference/controlFlowWhileStatement.symbols +++ b/tests/baselines/reference/controlFlowWhileStatement.symbols @@ -254,4 +254,57 @@ function h3() { x; // string | number >x : Symbol(x, Decl(controlFlowWhileStatement.ts, 98, 7)) } +// Repro for #8418 +function foo(x: number): number { return 1; } +>foo : Symbol(foo, Decl(controlFlowWhileStatement.ts, 105, 1)) +>x : Symbol(x, Decl(controlFlowWhileStatement.ts, 107, 13)) + +function test1() { +>test1 : Symbol(test1, Decl(controlFlowWhileStatement.ts, 107, 45)) + + let x: number | undefined; +>x : Symbol(x, Decl(controlFlowWhileStatement.ts, 109, 7)) + + while (cond) { +>cond : Symbol(cond, Decl(controlFlowWhileStatement.ts, 0, 3)) + + while (cond) { +>cond : Symbol(cond, Decl(controlFlowWhileStatement.ts, 0, 3)) + + while (cond) { +>cond : Symbol(cond, Decl(controlFlowWhileStatement.ts, 0, 3)) + + x = foo(x); +>x : Symbol(x, Decl(controlFlowWhileStatement.ts, 109, 7)) +>foo : Symbol(foo, Decl(controlFlowWhileStatement.ts, 105, 1)) +>x : Symbol(x, Decl(controlFlowWhileStatement.ts, 109, 7)) + } + } + x = 1; +>x : Symbol(x, Decl(controlFlowWhileStatement.ts, 109, 7)) + } +} +// Repro for #8418 +function test2() { +>test2 : Symbol(test2, Decl(controlFlowWhileStatement.ts, 118, 1)) + + let x: number | undefined; +>x : Symbol(x, Decl(controlFlowWhileStatement.ts, 121, 7)) + + x = 1; +>x : Symbol(x, Decl(controlFlowWhileStatement.ts, 121, 7)) + + while (cond) { +>cond : Symbol(cond, Decl(controlFlowWhileStatement.ts, 0, 3)) + + while (cond) { +>cond : Symbol(cond, Decl(controlFlowWhileStatement.ts, 0, 3)) + + x = foo(x); +>x : Symbol(x, Decl(controlFlowWhileStatement.ts, 121, 7)) +>foo : Symbol(foo, Decl(controlFlowWhileStatement.ts, 105, 1)) +>x : Symbol(x, Decl(controlFlowWhileStatement.ts, 121, 7)) + } + } +} diff --git a/tests/baselines/reference/controlFlowWhileStatement.types b/tests/baselines/reference/controlFlowWhileStatement.types index a17c084228b..48af317e2ec 100644 --- a/tests/baselines/reference/controlFlowWhileStatement.types +++ b/tests/baselines/reference/controlFlowWhileStatement.types @@ -307,4 +307,66 @@ function h3() { x; // string | number >x : string | number } +// Repro for #8418 +function foo(x: number): number { return 1; } +>foo : (x: number) => number +>x : number +>1 : number + +function test1() { +>test1 : () => void + + let x: number | undefined; +>x : number + + while (cond) { +>cond : boolean + + while (cond) { +>cond : boolean + + while (cond) { +>cond : boolean + + x = foo(x); +>x = foo(x) : number +>x : number +>foo(x) : number +>foo : (x: number) => number +>x : number + } + } + x = 1; +>x = 1 : number +>x : number +>1 : number + } +} +// Repro for #8418 +function test2() { +>test2 : () => void + + let x: number | undefined; +>x : number + + x = 1; +>x = 1 : number +>x : number +>1 : number + + while (cond) { +>cond : boolean + + while (cond) { +>cond : boolean + + x = foo(x); +>x = foo(x) : number +>x : number +>foo(x) : number +>foo : (x: number) => number +>x : number + } + } +} diff --git a/tests/cases/conformance/controlFlow/controlFlowWhileStatement.ts b/tests/cases/conformance/controlFlow/controlFlowWhileStatement.ts index 7bf49dd7224..61c09094e56 100644 --- a/tests/cases/conformance/controlFlow/controlFlowWhileStatement.ts +++ b/tests/cases/conformance/controlFlow/controlFlowWhileStatement.ts @@ -104,3 +104,26 @@ function h3() { } x; // string | number } +// Repro for #8418 +function foo(x: number): number { return 1; } +function test1() { + let x: number | undefined; + while (cond) { + while (cond) { + while (cond) { + x = foo(x); + } + } + x = 1; + } +} +// Repro for #8418 +function test2() { + let x: number | undefined; + x = 1; + while (cond) { + while (cond) { + x = foo(x); + } + } +}