|
In mcs:
Fix #77869, #76148, #77755, #75255 and a host of other bugs.
This is still "wrong", but anything better would probably need a
multi-pass algorithm.
* flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
usage vector. Force current usage vector to be reachable, to
optimistically signify backward jumps.
(FlowBranchingLabeled.LookupLabel): Note if a backward jump is
detected.
(FlowBranchingLabeled.Merge): New. If no backward jump was
detected, return the original salted-away usage vector instead,
updated with appropriate changes. Print unreachable warning if
necessary.
* statement.cs (Block.Resolve): Don't print unreachable warning on
a labeled statement.
In gmcs:
Fix #77869, #76148, #77755, #75255 and a host of other bugs.
This is still "wrong", but anything better would probably need a
multi-pass algorithm.
* flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
usage vector. Force current usage vector to be reachable, to
optimistically signify backward jumps.
(FlowBranchingLabeled.LookupLabel): Note if a backward jump is
detected.
(FlowBranchingLabeled.Merge): New. If no backward jump was
detected, return the original salted-away usage vector instead,
updated with appropriate changes. Print unreachable warning if
necessary.
* statement.cs (Block.Resolve): Don't print unreachable warning on
a labeled statement.
In tests:
* test-514.cs: New test from #76148.
* test-515.cs, test-516.cs: New tests based on #77755.
* test-517.cs: New test based on #75255.
In errors:
* cs0162-6.cs, cs0162-7.cs: New tests for unreachable code.
Emitting the warning on cs0162-7.cs needs a multi-pass algorithm.
* cs0165-12.cs: New test from #77869.
svn path=/trunk/mcs/; revision=60813
|