| /* { dg-do compile } */ |
| /* { dg-options "-O1 -fdump-tree-optimized-blocks" } */ |
| |
| int c, d; |
| |
| int |
| bar (int a) |
| { |
| void *p; |
| int b; |
| |
| if (a!=0) |
| { |
| b = 3; |
| p = &&L0; |
| } |
| else |
| { |
| b = 5; |
| p = &&L1; |
| } |
| |
| goto *p; |
| |
| L0: |
| c = b; |
| return 1; |
| |
| L1: |
| d = b; |
| return 0; |
| } |
| |
| /* The both paths to the block containing the goto *p should |
| have been threaded, thus eliminating the need for the goto *p. */ |
| |
| /* { dg-final { scan-tree-dump-times "goto p" 0 "optimized" } } */ |
| |
| /* There should not be any abnormal edges as DOM removed the |
| computed goto. */ |
| |
| /* { dg-final { scan-tree-dump-times "ab" 0 "optimized" } } */ |