Commit ac14120
authored
Optimizer: eliminate unused
* Fix EI_ilzero optimization: treat Unchecked.defaultof as effect-free for concrete types
Unchecked.defaultof<'T> (compiled as EI_ilzero) was unconditionally treated
as having an effect, preventing the optimizer from eliminating unused bindings
like `let _ = Unchecked.defaultof<decimal>`.
Fix: In ExprHasEffect and OptimizeExprOpFallback, EI_ilzero is now considered
effect-free when all type args are concrete (not type parameters). When type
variables are present (e.g. SRTP ^T), it is conservatively treated as having
an effect to prevent orphaned type variables during IL generation (FS0073).Unchecked.defaultof<'T> bindings (dotnet#19758)1 parent 4d1291a commit ac14120
6 files changed
Lines changed: 190 additions & 19 deletions
File tree
- docs/release-notes/.FSharp.Compiler.Service
- src/Compiler
- CodeGen
- Optimize
- tests/FSharp.Compiler.ComponentTests
- EmittedIL
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| 11 | + | |
11 | 12 | | |
12 | 13 | | |
13 | 14 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4708 | 4708 | | |
4709 | 4709 | | |
4710 | 4710 | | |
4711 | | - | |
| 4711 | + | |
4712 | 4712 | | |
4713 | 4713 | | |
4714 | 4714 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1617 | 1617 | | |
1618 | 1618 | | |
1619 | 1619 | | |
1620 | | - | |
1621 | | - | |
1622 | | - | |
| 1620 | + | |
| 1621 | + | |
| 1622 | + | |
1623 | 1623 | | |
1624 | 1624 | | |
1625 | | - | |
| 1625 | + | |
1626 | 1626 | | |
1627 | 1627 | | |
1628 | | - | |
| 1628 | + | |
| 1629 | + | |
| 1630 | + | |
| 1631 | + | |
| 1632 | + | |
| 1633 | + | |
| 1634 | + | |
| 1635 | + | |
| 1636 | + | |
| 1637 | + | |
| 1638 | + | |
| 1639 | + | |
| 1640 | + | |
| 1641 | + | |
| 1642 | + | |
| 1643 | + | |
| 1644 | + | |
| 1645 | + | |
| 1646 | + | |
| 1647 | + | |
| 1648 | + | |
| 1649 | + | |
| 1650 | + | |
| 1651 | + | |
| 1652 | + | |
| 1653 | + | |
| 1654 | + | |
| 1655 | + | |
| 1656 | + | |
| 1657 | + | |
| 1658 | + | |
| 1659 | + | |
| 1660 | + | |
1629 | 1661 | | |
1630 | 1662 | | |
1631 | 1663 | | |
1632 | 1664 | | |
1633 | 1665 | | |
1634 | 1666 | | |
1635 | 1667 | | |
1636 | | - | |
1637 | | - | |
1638 | | - | |
1639 | | - | |
| 1668 | + | |
| 1669 | + | |
| 1670 | + | |
| 1671 | + | |
1640 | 1672 | | |
1641 | 1673 | | |
1642 | 1674 | | |
1643 | | - | |
| 1675 | + | |
1644 | 1676 | | |
1645 | | - | |
| 1677 | + | |
1646 | 1678 | | |
1647 | | - | |
| 1679 | + | |
1648 | 1680 | | |
1649 | | - | |
| 1681 | + | |
1650 | 1682 | | |
1651 | 1683 | | |
1652 | 1684 | | |
| |||
1660 | 1692 | | |
1661 | 1693 | | |
1662 | 1694 | | |
1663 | | - | |
| 1695 | + | |
1664 | 1696 | | |
1665 | 1697 | | |
1666 | 1698 | | |
| |||
1687 | 1719 | | |
1688 | 1720 | | |
1689 | 1721 | | |
| 1722 | + | |
| 1723 | + | |
| 1724 | + | |
1690 | 1725 | | |
1691 | 1726 | | |
1692 | 1727 | | |
| |||
1717 | 1752 | | |
1718 | 1753 | | |
1719 | 1754 | | |
1720 | | - | |
| 1755 | + | |
1721 | 1756 | | |
1722 | 1757 | | |
1723 | 1758 | | |
| |||
2603 | 2638 | | |
2604 | 2639 | | |
2605 | 2640 | | |
2606 | | - | |
| 2641 | + | |
2607 | 2642 | | |
2608 | 2643 | | |
2609 | 2644 | | |
| |||
2680 | 2715 | | |
2681 | 2716 | | |
2682 | 2717 | | |
2683 | | - | |
| 2718 | + | |
2684 | 2719 | | |
2685 | 2720 | | |
2686 | 2721 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
110 | 110 | | |
111 | 111 | | |
112 | 112 | | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
113 | 121 | | |
114 | | - | |
| 122 | + | |
115 | 123 | | |
116 | 124 | | |
117 | 125 | | |
| |||
Lines changed: 126 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
Lines changed: 1 addition & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
252 | 252 | | |
253 | 253 | | |
254 | 254 | | |
| 255 | + | |
255 | 256 | | |
256 | 257 | | |
257 | 258 | | |
| |||
0 commit comments