This PR improves the CFG by adding support for cycles. It means that for loops, goto and selects (of channels) are supported.
There are 2 edge cases that don't work yet:
For loops without header (While true) and without break (see ForLoops/WhileLoopWithoutHeader/prog1.go)
Race on variables from the header of the for loop (see stdlibNoSuccess/TestRaceRange/prog1.go)
This PR improves the CFG by adding support for cycles. It means that for loops, goto and selects (of channels) are supported. There are 2 edge cases that don't work yet:
For loops without header (While true) and without break (see
ForLoops/WhileLoopWithoutHeader/prog1.go
)Race on variables from the header of the for loop (see
stdlibNoSuccess/TestRaceRange/prog1.go
)Fixes: https://github.com/amit-davidson/Chronos/issues/18 https://github.com/amit-davidson/Chronos/issues/12 https://github.com/amit-davidson/Chronos/issues/8 https://github.com/amit-davidson/Chronos/issues/2