From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1643) id F333B3858D38; Sun, 5 Mar 2023 11:40:58 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F333B3858D38 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1678016459; bh=noQm7I6AKIguKX/cgsz3cZ8NA/SzwxN6asfE9dGxP38=; h=From:To:Subject:Date:From; b=Yc7M2kNTn9I8MAUveqtdf6QRznpQQDDU40sqnk95XSAlcDYdd8eriWgA0veQIfw6O XT8WTF1dXIwCEodx0Ev6/XFgE4Eau0kZRk+JghmLSoReiz6u3MEhB7nxVaUntnJkBj nqcK60IH77r2Rgr5whGCkqJQR89DB7YJmCC77xso= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Thomas Schwinge To: gcc-cvs@gcc.gnu.org Subject: [gcc/devel/rust/master] typecheck: Fix casting error behind generics X-Act-Checkin: gcc X-Git-Author: bl7awy X-Git-Refname: refs/heads/devel/rust/master X-Git-Oldrev: 9284e20b6542bad3ac2330b8ac6d41826d6c893b X-Git-Newrev: 193c21c85b4b3f603b1b6280779c758d35570446 Message-Id: <20230305114058.F333B3858D38@sourceware.org> Date: Sun, 5 Mar 2023 11:40:58 +0000 (GMT) List-Id: https://gcc.gnu.org/g:193c21c85b4b3f603b1b6280779c758d35570446 commit 193c21c85b4b3f603b1b6280779c758d35570446 Author: bl7awy Date: Tue Feb 28 20:53:01 2023 +0300 typecheck: Fix casting error behind generics gcc/rust/ChangeLog: * typecheck/rust-casts.cc (TypeCastRules::cast_rules): Perform destructure on `from` type. gcc/testsuite/ChangeLog: * rust/compile/cast_generics.rs: New test. Signed-off-by: Mahmoud Mohamed Diff: --- gcc/rust/typecheck/rust-casts.cc | 11 ++++++----- gcc/testsuite/rust/compile/cast_generics.rs | 8 ++++++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/gcc/rust/typecheck/rust-casts.cc b/gcc/rust/typecheck/rust-casts.cc index 0ecb50f7d1d..f41c7134a75 100644 --- a/gcc/rust/typecheck/rust-casts.cc +++ b/gcc/rust/typecheck/rust-casts.cc @@ -60,15 +60,16 @@ TypeCastRules::cast_rules () // https://github.com/rust-lang/rust/blob/7eac88abb2e57e752f3302f02be5f3ce3d7adfb4/compiler/rustc_typeck/src/check/cast.rs#L596 // https://github.com/rust-lang/rust/blob/7eac88abb2e57e752f3302f02be5f3ce3d7adfb4/compiler/rustc_typeck/src/check/cast.rs#L654 - rust_debug ("cast_rules from={%s} to={%s}", - from.get_ty ()->debug_str ().c_str (), + TyTy::BaseType *from_type = from.get_ty ()->destructure (); + + rust_debug ("cast_rules from={%s} to={%s}", from_type->debug_str ().c_str (), to.get_ty ()->debug_str ().c_str ()); - switch (from.get_ty ()->get_kind ()) + switch (from_type->get_kind ()) { case TyTy::TypeKind::INFER: { TyTy::InferType *from_infer - = static_cast (from.get_ty ()); + = static_cast (from_type); switch (from_infer->get_infer_kind ()) { case TyTy::InferType::InferTypeKind::GENERAL: @@ -290,4 +291,4 @@ TypeCastRules::emit_cast_error () const } } // namespace Resolver -} // namespace Rust +} // namespace Rust \ No newline at end of file diff --git a/gcc/testsuite/rust/compile/cast_generics.rs b/gcc/testsuite/rust/compile/cast_generics.rs new file mode 100644 index 00000000000..7d185964e50 --- /dev/null +++ b/gcc/testsuite/rust/compile/cast_generics.rs @@ -0,0 +1,8 @@ +fn test(a: T) -> T { + a +} + +fn main() { + let t: i32 = test(123 as i32) as i32; + // { dg-warning "unused name" "" { target *-*-* } .-1 } +}