| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- function foo0(o,i)
- {
- if (o==10 && i++,o)
- {
- }
- else
- {
- WScript.Echo("FAILED");
- }
- }
- foo0(9, 0);
- // - At 'o.p && 1', 'BrTrue 1' is const-folded to 'Br' to the loop exit block with the 'break'
- // - 'a' becomes live as a float on the right side of '||' and is only live as an int on the left side
- // - Since both of those blocks are predecessors to the loop exit block with the 'break', 'a' is kept live as a float on exit
- // out of the loop
- // - When compensating in the 'BrTrue 1' block, we don't need an airlock block to convert 'a' to a float only on exit out of the
- // loop because that branch was already const-folded into 'Br' and always flows into the exit block
- function foo1() {
- var o = { p: 0 };
- var a = 0;
- for(var i = 0; i < 2; ++i) {
- a = 1;
- if(o.p && 1 || (a /= 2))
- break;
- }
- }
- foo1();
- foo1();
- function foo2(){
- var ary = new Array(10);
- var c = -1;
- var e = 1;
- var g = 1;
- ary[ary.length-1] = 1;
- ary.length = 100;
- g =((e < c)||(g < c));
- if(g)
- c=((e < c));
- c =((e < c)) + g;
- ary[ary.length-1];
- };
- foo2();
- foo2();
- foo2();
- WScript.Echo("Passed");
|