Skip to content

Commit

Permalink
Test constant folding of shift operators. (#38729)
Browse files Browse the repository at this point in the history
  • Loading branch information
Neal Gafter authored Sep 20, 2019
1 parent da63493 commit 5b95fa0
Showing 1 changed file with 318 additions and 0 deletions.
318 changes: 318 additions & 0 deletions src/Compilers/CSharp/Test/Semantic/Semantics/ConstantTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2443,6 +2443,324 @@ void M()
Assert.Equal(expected, actual);
}

[Fact]
public void TestUnspecifiedShifts()
{
var source =
@"class C
{
void M()
{
_ = 1487023104 == (-40490869 << 1176494346);
_ = 3405660160U == (385007504U << 1176494346);
_ = -5519616229445825536L == (2480596744084445603L << 1176494346);
_ = 12553477852066636800UL == (1183195158831237785UL << 1176494346);
_ = -39542 == (-40490869 >> 1176494346);
_ = 375983U == (385007504U >> 1176494346);
_ = 2422457757894966L == (2480596744084445603L >> 1176494346);
_ = 1155464022296130UL == (1183195158831237785UL >> 1176494346);
_ = 1026730496 == (1142856021 << 52258473);
_ = 3405730304U == (4167401385U << 52258473);
_ = 949749347979886592L == (-99642203025533160L << 52258473);
_ = 3870362293631975424UL == (5277240384921721637UL << 52258473);
_ = 2232140 == (1142856021 >> 52258473);
_ = 8139455U == (4167401385U >> 52258473);
_ = -45313L == (-99642203025533160L >> 52258473);
_ = 2399811UL == (5277240384921721637UL >> 52258473);
_ = 2146190848 == (1765799459 << -847584439);
_ = 746002432U == (1956002700U << -847584439);
_ = 8330086530681716224L == (-2649861279148095905L << -847584439);
_ = 11021680305799133184UL == (4633212737774651836UL << -847584439);
_ = 3448827 == (1765799459 >> -847584439);
_ = 3820317U == (1956002700U >> -847584439);
_ = -5175510310836125L == (-2649861279148095905L >> -847584439);
_ = 9049243628466116UL == (4633212737774651836UL >> -847584439);
_ = -147839246 == (-73919623 << -261666143);
_ = 434667096U == (2364817196U << -261666143);
_ = 5379847945883484160L == (8600028236070815642L << -261666143);
_ = 18250411927379378176UL == (9754066888939486842UL << -261666143);
_ = -36959812 == (-73919623 >> -261666143);
_ = 1182408598U == (2364817196U >> -261666143);
_ = 1001175054L == (8600028236070815642L >> -261666143);
_ = 1135522835UL == (9754066888939486842UL >> -261666143);
_ = -642990336 == (-575448706 << 1251164583);
_ = 101734912U == (2651594932U << 1251164583);
_ = -2477956711135051776L == (4397665286211975439L << 1251164583);
_ = 17177975275221155840UL == (3677188853080049883UL << 1251164583);
_ = -4495694 == (-575448706 >> 1251164583);
_ = 20715585U == (2651594932U >> 1251164583);
_ = 7999306L == (4397665286211975439L >> 1251164583);
_ = 6688767UL == (3677188853080049883UL >> 1251164583);
_ = -2147483648 == (1680903167 << -1931469441);
_ = 2147483648U == (1696031835U << -1931469441);
_ = 0L == (-5154426740587151092L << -1931469441);
_ = 9223372036854775808UL == (11340274989429123451UL << -1931469441);
_ = 0 == (1680903167 >> -1931469441);
_ = 0U == (1696031835U >> -1931469441);
_ = -1L == (-5154426740587151092L >> -1931469441);
_ = 1UL == (11340274989429123451UL >> -1931469441);
_ = -1073741824 == (466088311 << 664633406);
_ = 0U == (3367565272U << 664633406);
_ = 0L == (-9002257244105090536L << 664633406);
_ = 13835058055282163712UL == (16369162113479203207UL << 664633406);
_ = 0 == (466088311 >> 664633406);
_ = 3U == (3367565272U >> 664633406);
_ = -2L == (-9002257244105090536L >> 664633406);
_ = 3UL == (16369162113479203207UL >> 664633406);
_ = 1016170002 == (508085001 << 84049121);
_ = 3845222538U == (1922611269U << 84049121);
_ = -3053627404204376064L == (1789288808291740423L << 84049121);
_ = 9069021830043402240UL == (3140594490787352999UL << 84049121);
_ = 254042500 == (508085001 >> 84049121);
_ = 961305634U == (1922611269U >> 84049121);
_ = 208300632L == (1789288808291740423L >> 84049121);
_ = 365613318UL == (3140594490787352999UL >> 84049121);
_ = 1610612736 == (1704288204 << -639239173);
_ = 3758096384U == (2570458748U << -639239173);
_ = -1152921504606846976L == (7131876568822188702L << -639239173);
_ = 9799832789158199296UL == (5759179746966546129UL << -639239173);
_ = 12 == (1704288204 >> -639239173);
_ = 19U == (2570458748U >> -639239173);
_ = 12L == (7131876568822188702L >> -639239173);
_ = 9UL == (5759179746966546129UL >> -639239173);
_ = 1493172224 == (-177594791 << 232270776);
_ = 671088640U == (3656907048U << 232270776);
_ = 144115188075855872L == (5226244767915300354L << 232270776);
_ = 17005592192950992896UL == (16201604657234886124UL << 232270776);
_ = -11 == (-177594791 >> 232270776);
_ = 217U == (3656907048U >> 232270776);
_ = 72L == (5226244767915300354L >> 232270776);
_ = 224UL == (16201604657234886124UL >> 232270776);
}
}";
var actual = ParseAndGetConstantFoldingSteps(source);
var expected =
@"1487023104 == (-40490869 << 1176494346) --> True
-40490869 << 1176494346 --> 1487023104
-40490869 --> -40490869
3405660160U == (385007504U << 1176494346) --> True
385007504U << 1176494346 --> 3405660160
-5519616229445825536L == (2480596744084445603L << 1176494346) --> True
-5519616229445825536L --> -5519616229445825536
2480596744084445603L << 1176494346 --> -5519616229445825536
12553477852066636800UL == (1183195158831237785UL << 1176494346) --> True
1183195158831237785UL << 1176494346 --> 12553477852066636800
-39542 == (-40490869 >> 1176494346) --> True
-39542 --> -39542
-40490869 >> 1176494346 --> -39542
-40490869 --> -40490869
375983U == (385007504U >> 1176494346) --> True
385007504U >> 1176494346 --> 375983
2422457757894966L == (2480596744084445603L >> 1176494346) --> True
2480596744084445603L >> 1176494346 --> 2422457757894966
1155464022296130UL == (1183195158831237785UL >> 1176494346) --> True
1183195158831237785UL >> 1176494346 --> 1155464022296130
1026730496 == (1142856021 << 52258473) --> True
1142856021 << 52258473 --> 1026730496
3405730304U == (4167401385U << 52258473) --> True
4167401385U << 52258473 --> 3405730304
949749347979886592L == (-99642203025533160L << 52258473) --> True
-99642203025533160L << 52258473 --> 949749347979886592
-99642203025533160L --> -99642203025533160
3870362293631975424UL == (5277240384921721637UL << 52258473) --> True
5277240384921721637UL << 52258473 --> 3870362293631975424
2232140 == (1142856021 >> 52258473) --> True
1142856021 >> 52258473 --> 2232140
8139455U == (4167401385U >> 52258473) --> True
4167401385U >> 52258473 --> 8139455
-45313L == (-99642203025533160L >> 52258473) --> True
-45313L --> -45313
-99642203025533160L >> 52258473 --> -45313
-99642203025533160L --> -99642203025533160
2399811UL == (5277240384921721637UL >> 52258473) --> True
5277240384921721637UL >> 52258473 --> 2399811
2146190848 == (1765799459 << -847584439) --> True
1765799459 << -847584439 --> 2146190848
-847584439 --> -847584439
746002432U == (1956002700U << -847584439) --> True
1956002700U << -847584439 --> 746002432
-847584439 --> -847584439
8330086530681716224L == (-2649861279148095905L << -847584439) --> True
-2649861279148095905L << -847584439 --> 8330086530681716224
-2649861279148095905L --> -2649861279148095905
-847584439 --> -847584439
11021680305799133184UL == (4633212737774651836UL << -847584439) --> True
4633212737774651836UL << -847584439 --> 11021680305799133184
-847584439 --> -847584439
3448827 == (1765799459 >> -847584439) --> True
1765799459 >> -847584439 --> 3448827
-847584439 --> -847584439
3820317U == (1956002700U >> -847584439) --> True
1956002700U >> -847584439 --> 3820317
-847584439 --> -847584439
-5175510310836125L == (-2649861279148095905L >> -847584439) --> True
-5175510310836125L --> -5175510310836125
-2649861279148095905L >> -847584439 --> -5175510310836125
-2649861279148095905L --> -2649861279148095905
-847584439 --> -847584439
9049243628466116UL == (4633212737774651836UL >> -847584439) --> True
4633212737774651836UL >> -847584439 --> 9049243628466116
-847584439 --> -847584439
-147839246 == (-73919623 << -261666143) --> True
-147839246 --> -147839246
-73919623 << -261666143 --> -147839246
-73919623 --> -73919623
-261666143 --> -261666143
434667096U == (2364817196U << -261666143) --> True
2364817196U << -261666143 --> 434667096
-261666143 --> -261666143
5379847945883484160L == (8600028236070815642L << -261666143) --> True
8600028236070815642L << -261666143 --> 5379847945883484160
-261666143 --> -261666143
18250411927379378176UL == (9754066888939486842UL << -261666143) --> True
9754066888939486842UL << -261666143 --> 18250411927379378176
-261666143 --> -261666143
-36959812 == (-73919623 >> -261666143) --> True
-36959812 --> -36959812
-73919623 >> -261666143 --> -36959812
-73919623 --> -73919623
-261666143 --> -261666143
1182408598U == (2364817196U >> -261666143) --> True
2364817196U >> -261666143 --> 1182408598
-261666143 --> -261666143
1001175054L == (8600028236070815642L >> -261666143) --> True
8600028236070815642L >> -261666143 --> 1001175054
-261666143 --> -261666143
1135522835UL == (9754066888939486842UL >> -261666143) --> True
9754066888939486842UL >> -261666143 --> 1135522835
-261666143 --> -261666143
-642990336 == (-575448706 << 1251164583) --> True
-642990336 --> -642990336
-575448706 << 1251164583 --> -642990336
-575448706 --> -575448706
101734912U == (2651594932U << 1251164583) --> True
2651594932U << 1251164583 --> 101734912
-2477956711135051776L == (4397665286211975439L << 1251164583) --> True
-2477956711135051776L --> -2477956711135051776
4397665286211975439L << 1251164583 --> -2477956711135051776
17177975275221155840UL == (3677188853080049883UL << 1251164583) --> True
3677188853080049883UL << 1251164583 --> 17177975275221155840
-4495694 == (-575448706 >> 1251164583) --> True
-4495694 --> -4495694
-575448706 >> 1251164583 --> -4495694
-575448706 --> -575448706
20715585U == (2651594932U >> 1251164583) --> True
2651594932U >> 1251164583 --> 20715585
7999306L == (4397665286211975439L >> 1251164583) --> True
4397665286211975439L >> 1251164583 --> 7999306
6688767UL == (3677188853080049883UL >> 1251164583) --> True
3677188853080049883UL >> 1251164583 --> 6688767
-2147483648 == (1680903167 << -1931469441) --> True
1680903167 << -1931469441 --> -2147483648
-1931469441 --> -1931469441
2147483648U == (1696031835U << -1931469441) --> True
1696031835U << -1931469441 --> 2147483648
-1931469441 --> -1931469441
0L == (-5154426740587151092L << -1931469441) --> True
-5154426740587151092L << -1931469441 --> 0
-5154426740587151092L --> -5154426740587151092
-1931469441 --> -1931469441
9223372036854775808UL == (11340274989429123451UL << -1931469441) --> True
11340274989429123451UL << -1931469441 --> 9223372036854775808
-1931469441 --> -1931469441
0 == (1680903167 >> -1931469441) --> True
1680903167 >> -1931469441 --> 0
-1931469441 --> -1931469441
0U == (1696031835U >> -1931469441) --> True
1696031835U >> -1931469441 --> 0
-1931469441 --> -1931469441
-1L == (-5154426740587151092L >> -1931469441) --> True
-1L --> -1
-5154426740587151092L >> -1931469441 --> -1
-5154426740587151092L --> -5154426740587151092
-1931469441 --> -1931469441
1UL == (11340274989429123451UL >> -1931469441) --> True
11340274989429123451UL >> -1931469441 --> 1
-1931469441 --> -1931469441
-1073741824 == (466088311 << 664633406) --> True
-1073741824 --> -1073741824
466088311 << 664633406 --> -1073741824
0U == (3367565272U << 664633406) --> True
3367565272U << 664633406 --> 0
0L == (-9002257244105090536L << 664633406) --> True
-9002257244105090536L << 664633406 --> 0
-9002257244105090536L --> -9002257244105090536
13835058055282163712UL == (16369162113479203207UL << 664633406) --> True
16369162113479203207UL << 664633406 --> 13835058055282163712
0 == (466088311 >> 664633406) --> True
466088311 >> 664633406 --> 0
3U == (3367565272U >> 664633406) --> True
3367565272U >> 664633406 --> 3
-2L == (-9002257244105090536L >> 664633406) --> True
-2L --> -2
-9002257244105090536L >> 664633406 --> -2
-9002257244105090536L --> -9002257244105090536
3UL == (16369162113479203207UL >> 664633406) --> True
16369162113479203207UL >> 664633406 --> 3
1016170002 == (508085001 << 84049121) --> True
508085001 << 84049121 --> 1016170002
3845222538U == (1922611269U << 84049121) --> True
1922611269U << 84049121 --> 3845222538
-3053627404204376064L == (1789288808291740423L << 84049121) --> True
-3053627404204376064L --> -3053627404204376064
1789288808291740423L << 84049121 --> -3053627404204376064
9069021830043402240UL == (3140594490787352999UL << 84049121) --> True
3140594490787352999UL << 84049121 --> 9069021830043402240
254042500 == (508085001 >> 84049121) --> True
508085001 >> 84049121 --> 254042500
961305634U == (1922611269U >> 84049121) --> True
1922611269U >> 84049121 --> 961305634
208300632L == (1789288808291740423L >> 84049121) --> True
1789288808291740423L >> 84049121 --> 208300632
365613318UL == (3140594490787352999UL >> 84049121) --> True
3140594490787352999UL >> 84049121 --> 365613318
1610612736 == (1704288204 << -639239173) --> True
1704288204 << -639239173 --> 1610612736
-639239173 --> -639239173
3758096384U == (2570458748U << -639239173) --> True
2570458748U << -639239173 --> 3758096384
-639239173 --> -639239173
-1152921504606846976L == (7131876568822188702L << -639239173) --> True
-1152921504606846976L --> -1152921504606846976
7131876568822188702L << -639239173 --> -1152921504606846976
-639239173 --> -639239173
9799832789158199296UL == (5759179746966546129UL << -639239173) --> True
5759179746966546129UL << -639239173 --> 9799832789158199296
-639239173 --> -639239173
12 == (1704288204 >> -639239173) --> True
1704288204 >> -639239173 --> 12
-639239173 --> -639239173
19U == (2570458748U >> -639239173) --> True
2570458748U >> -639239173 --> 19
-639239173 --> -639239173
12L == (7131876568822188702L >> -639239173) --> True
7131876568822188702L >> -639239173 --> 12
-639239173 --> -639239173
9UL == (5759179746966546129UL >> -639239173) --> True
5759179746966546129UL >> -639239173 --> 9
-639239173 --> -639239173
1493172224 == (-177594791 << 232270776) --> True
-177594791 << 232270776 --> 1493172224
-177594791 --> -177594791
671088640U == (3656907048U << 232270776) --> True
3656907048U << 232270776 --> 671088640
144115188075855872L == (5226244767915300354L << 232270776) --> True
5226244767915300354L << 232270776 --> 144115188075855872
17005592192950992896UL == (16201604657234886124UL << 232270776) --> True
16201604657234886124UL << 232270776 --> 17005592192950992896
-11 == (-177594791 >> 232270776) --> True
-11 --> -11
-177594791 >> 232270776 --> -11
-177594791 --> -177594791
217U == (3656907048U >> 232270776) --> True
3656907048U >> 232270776 --> 217
72L == (5226244767915300354L >> 232270776) --> True
5226244767915300354L >> 232270776 --> 72
224UL == (16201604657234886124UL >> 232270776) --> True
16201604657234886124UL >> 232270776 --> 224";
Assert.Equal(expected, actual);
}

// Constant fields should be bound in the declaration phase.
[Fact]
public void TestConstantEvalAtDeclarationPhase()
Expand Down

0 comments on commit 5b95fa0

Please sign in to comment.