Commit 0007616
committed
Fix ICE with continue/break/return in while condition
Fixes #3977
The predicate expression must be evaluated before type checking
to ensure side effects occur even when the predicate has never type.
This prevents skipping function calls, panics, or other side effects
in diverging predicates.
gcc/rust/ChangeLog:
* backend/rust-compile-expr.cc (CompileExpr::visit): Always
evaluate predicate expression before checking for never type
to preserve side effects in while loop conditions.
gcc/testsuite/ChangeLog:
* rust/compile/issue-3977.rs: New test.
Signed-off-by: Harishankar <harishankarpp7@gmail.com>1 parent e90c207 commit 0007616
File tree
3 files changed
+53
-66
lines changed- gcc
- rust
- backend
- typecheck
- testsuite/rust/compile
3 files changed
+53
-66
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
803 | 803 | | |
804 | 804 | | |
805 | 805 | | |
806 | | - | |
| 806 | + | |
| 807 | + | |
| 808 | + | |
| 809 | + | |
| 810 | + | |
| 811 | + | |
| 812 | + | |
| 813 | + | |
| 814 | + | |
| 815 | + | |
| 816 | + | |
| 817 | + | |
| 818 | + | |
| 819 | + | |
| 820 | + | |
| 821 | + | |
| 822 | + | |
807 | 823 | | |
808 | 824 | | |
809 | 825 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1543 | 1543 | | |
1544 | 1544 | | |
1545 | 1545 | | |
1546 | | - | |
1547 | | - | |
1548 | | - | |
1549 | | - | |
1550 | | - | |
1551 | | - | |
1552 | | - | |
1553 | | - | |
1554 | | - | |
1555 | | - | |
1556 | | - | |
1557 | | - | |
1558 | | - | |
1559 | | - | |
1560 | | - | |
| 1546 | + | |
| 1547 | + | |
1561 | 1548 | | |
1562 | 1549 | | |
1563 | 1550 | | |
1564 | | - | |
1565 | 1551 | | |
1566 | 1552 | | |
1567 | 1553 | | |
| |||
1571 | 1557 | | |
1572 | 1558 | | |
1573 | 1559 | | |
1574 | | - | |
1575 | | - | |
1576 | | - | |
1577 | | - | |
1578 | | - | |
1579 | | - | |
1580 | | - | |
1581 | 1560 | | |
1582 | 1561 | | |
1583 | 1562 | | |
| |||
1630 | 1609 | | |
1631 | 1610 | | |
1632 | 1611 | | |
1633 | | - | |
1634 | 1612 | | |
1635 | 1613 | | |
1636 | 1614 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
2 | | - | |
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
3 | 6 | | |
4 | 7 | | |
5 | 8 | | |
6 | | - | |
| 9 | + | |
7 | 10 | | |
8 | 11 | | |
9 | 12 | | |
10 | | - | |
| 13 | + | |
11 | 14 | | |
12 | | - | |
| 15 | + | |
13 | 16 | | |
14 | 17 | | |
15 | 18 | | |
16 | 19 | | |
17 | | - | |
18 | | - | |
19 | | - | |
20 | | - | |
21 | | - | |
22 | | - | |
23 | | - | |
24 | | - | |
25 | | - | |
26 | | - | |
27 | | - | |
28 | | - | |
29 | 20 | | |
30 | | - | |
31 | | - | |
32 | | - | |
| 21 | + | |
33 | 22 | | |
34 | 23 | | |
35 | 24 | | |
36 | 25 | | |
37 | 26 | | |
38 | | - | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
39 | 30 | | |
40 | 31 | | |
41 | 32 | | |
42 | 33 | | |
43 | 34 | | |
44 | | - | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
45 | 38 | | |
46 | 39 | | |
47 | 40 | | |
48 | | - | |
49 | | - | |
50 | | - | |
51 | | - | |
52 | | - | |
53 | | - | |
54 | | - | |
55 | | - | |
56 | | - | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
57 | 45 | | |
58 | 46 | | |
59 | | - | |
60 | | - | |
61 | | - | |
62 | | - | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
63 | 52 | | |
64 | 53 | | |
65 | 54 | | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | | - | |
70 | | - | |
71 | | - | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
72 | 65 | | |
0 commit comments