https://gcc.gnu.org/g:a2a66257457d368c999319b8d31e4d11367f8755

commit r15-8157-ga2a66257457d368c999319b8d31e4d11367f8755
Author: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>
Date:   Tue May 21 10:38:16 2024 +0200

    gccrs: Prevent raw reference from being lowered silently
    
    We do not handle those kind of references yet, we shall not let them
    pass as a regular reference.
    
    gcc/rust/ChangeLog:
    
            * ast/rust-expr.h: Add a getter for mutability.
            * hir/rust-ast-lower-expr.cc (ASTLoweringExpr::visit): Panic when a
            raw reference is met.
    
    Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>

Diff:
---
 gcc/rust/ast/rust-expr.h            |  2 ++
 gcc/rust/hir/rust-ast-lower-expr.cc | 13 +++++++------
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/gcc/rust/ast/rust-expr.h b/gcc/rust/ast/rust-expr.h
index 6609ad80b37e..a5afbffee99b 100644
--- a/gcc/rust/ast/rust-expr.h
+++ b/gcc/rust/ast/rust-expr.h
@@ -398,6 +398,8 @@ public:
 
   bool get_is_mut () const { return mutability == Mutability::Mut; }
 
+  Mutability get_mutability () const { return mutability; }
+
   bool get_is_double_borrow () const { return double_borrow; }
   bool is_raw_borrow () const { return raw_borrow; }
 
diff --git a/gcc/rust/hir/rust-ast-lower-expr.cc 
b/gcc/rust/hir/rust-ast-lower-expr.cc
index 515d36a839f3..a0eb5e32f25b 100644
--- a/gcc/rust/hir/rust-ast-lower-expr.cc
+++ b/gcc/rust/hir/rust-ast-lower-expr.cc
@@ -628,6 +628,9 @@ ASTLoweringExpr::visit (AST::ContinueExpr &expr)
 void
 ASTLoweringExpr::visit (AST::BorrowExpr &expr)
 {
+  if (expr.is_raw_borrow ())
+    rust_unreachable ();
+
   HIR::Expr *borrow_lvalue
     = ASTLoweringExpr::translate (expr.get_borrowed_expr ());
 
@@ -638,9 +641,8 @@ ASTLoweringExpr::visit (AST::BorrowExpr &expr)
 
   auto *borrow_expr
     = new HIR::BorrowExpr (mapping, std::unique_ptr<HIR::Expr> (borrow_lvalue),
-                          expr.get_is_mut () ? Mutability::Mut
-                                             : Mutability::Imm,
-                          expr.get_outer_attrs (), expr.get_locus ());
+                          expr.get_mutability (), expr.get_outer_attrs (),
+                          expr.get_locus ());
 
   if (expr.get_is_double_borrow ())
     {
@@ -652,9 +654,8 @@ ASTLoweringExpr::visit (AST::BorrowExpr &expr)
       borrow_expr
        = new HIR::BorrowExpr (mapping,
                               std::unique_ptr<HIR::Expr> (borrow_expr),
-                              expr.get_is_mut () ? Mutability::Mut
-                                                 : Mutability::Imm,
-                              expr.get_outer_attrs (), expr.get_locus ());
+                              expr.get_mutability (), expr.get_outer_attrs (),
+                              expr.get_locus ());
     }
 
   translated = borrow_expr;

Reply via email to