gccrs: Desugar double borrows into two HIR:BorrowExpr's
authorPhilip Herron <philip.herron@embecosm.com>
Thu, 25 Aug 2022 14:33:02 +0000 (15:33 +0100)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 31 Jan 2023 13:16:49 +0000 (14:16 +0100)
commitff8a56950776dae4fbae6b42eb79b9798dad76e3
tree4e24f312ea3d5f2071bca9d265fcf0df0e332c39
parente66fec8e6ba35edf01f86c2bf6514109aba4ded2
gccrs: Desugar double borrows into two HIR:BorrowExpr's

We simply hit a gcc_unreachable() on double borrows but it seems reasonable
to just desugar the AST into a borrow of a borrow to foo. Instead of a
borrow expression with a flag to be respected.

Fixes #1506

gcc/rust/ChangeLog:

* hir/rust-ast-lower-expr.h: Lower double borrow expressions to two
`HIR::BorrowExpr`s.
* hir/tree/rust-hir-expr.h: Remove `is_double_borrow` field from
`HIR::BorrowExpr`.
* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): Remove
call to `gcc_unreachable` on double borrow expressions.

gcc/testsuite/ChangeLog:

* rust/compile/torture/issue-1506.rs: New test.
gcc/rust/hir/rust-ast-lower-expr.h
gcc/rust/hir/tree/rust-hir-expr.h
gcc/rust/typecheck/rust-hir-type-check-expr.cc
gcc/testsuite/rust/compile/torture/issue-1506.rs [new file with mode: 0644]