Skip to content

Commit e7bafde

Browse files
Polygonalrphilberty
authored andcommitted
Implement missing read-only checker case for TuplePatternItemsHasRest
gcc/rust/ChangeLog: * checks/errors/rust-readonly-check.cc (collect_assignment_tuple): Implement read-only checker for tuple patterns with rest pattern. Signed-off-by: Yap Zhi Heng <[email protected]>
1 parent 8fb83bb commit e7bafde

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

gcc/rust/checks/errors/rust-readonly-check.cc

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,14 +144,24 @@ ReadonlyChecker::collect_assignment_tuple (TuplePattern &tuple_pattern,
144144
{
145145
case HIR::TuplePatternItems::ItemType::NO_REST:
146146
{
147-
auto &items = static_cast<HIR::TuplePatternItemsNoRest &> (
147+
auto &items_no_rest = static_cast<HIR::TuplePatternItemsNoRest &> (
148148
tuple_pattern.get_items ());
149-
for (auto &sub : items.get_patterns ())
149+
for (auto &sub : items_no_rest.get_patterns ())
150150
{
151151
collect_assignment (*sub, has_init_expr);
152152
}
153153
}
154154
break;
155+
case HIR::TuplePatternItems::ItemType::HAS_REST:
156+
{
157+
auto &items_has_rest = static_cast<HIR::TuplePatternItemsHasRest &> (
158+
tuple_pattern.get_items ());
159+
for (auto &sub : items_has_rest.get_lower_patterns ())
160+
collect_assignment (*sub, has_init_expr);
161+
for (auto &sub : items_has_rest.get_upper_patterns ())
162+
collect_assignment (*sub, has_init_expr);
163+
}
164+
break;
155165
default:
156166
break;
157167
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
fn main() {
2+
let (a, .., b) = (1, 1);
3+
a = 2; // { dg-error "assignment of read-only variable .a." }
4+
b = 2; // { dg-error "assignment of read-only variable .b." }
5+
}

0 commit comments

Comments
 (0)