]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Stop autoderef of raw pointer types
authorPhilip Herron <herron.philip@googlemail.com>
Sun, 25 Jun 2023 20:36:32 +0000 (21:36 +0100)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 16 Jan 2024 17:46:30 +0000 (18:46 +0100)
It is unsafe to deref raw pointers during autoderef this adds a check to
stop autoderef early when we are about to try and deref pointers.

Fixes #2015

gcc/rust/ChangeLog:

* typecheck/rust-autoderef.cc (AutoderefCycle::cycle): add check for pointers

Signed-off-by: Philip Herron <herron.philip@googlemail.com>
gcc/rust/typecheck/rust-autoderef.cc

index 9450cfaa068bae054bc8ff264031e19cdd2ce856..c70420a7c3010ac27ec5b72b5ea5d8ff8c8de35f 100644 (file)
@@ -336,7 +336,6 @@ AutoderefCycle::cycle (TyTy::BaseType *receiver)
        return false;
 
       // try unsize
-
       Adjustment unsize = Adjuster::try_unsize_type (r);
       if (!unsize.is_error ())
        {
@@ -351,6 +350,13 @@ AutoderefCycle::cycle (TyTy::BaseType *receiver)
          adjustments.pop_back ();
        }
 
+      bool is_ptr = receiver->get_kind () == TyTy::TypeKind::POINTER;
+      if (is_ptr)
+       {
+         // deref of raw pointers is unsafe
+         return false;
+       }
+
       Adjustment deref
        = Adjuster::try_deref_type (r, Analysis::RustLangItem::ItemType::DEREF);
       if (!deref.is_error ())