From: Philip Herron Date: Sun, 25 Jun 2023 20:36:32 +0000 (+0100) Subject: gccrs: Stop autoderef of raw pointer types X-Git-Tag: basepoints/gcc-15~2445 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b3b3de1082eeeee73fec1d27ad732b8369ee1d27;p=thirdparty%2Fgcc.git gccrs: Stop autoderef of raw pointer types 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 --- diff --git a/gcc/rust/typecheck/rust-autoderef.cc b/gcc/rust/typecheck/rust-autoderef.cc index 9450cfaa068b..c70420a7c301 100644 --- a/gcc/rust/typecheck/rust-autoderef.cc +++ b/gcc/rust/typecheck/rust-autoderef.cc @@ -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 ())