aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Herron <herron.philip@googlemail.com>2024-11-26 15:33:35 +0000
committerPhilip Herron <philip.herron@embecosm.com>2024-11-27 22:41:12 +0000
commit2aff74974ec2400dbccc103d8f05d9e14def87b3 (patch)
tree307f99a5bd97932f00a419dc9b0f3261435b02a5
parentc11ee4f56266512171fb77d6bcaf37f390e5ad30 (diff)
downloadgcc-2aff74974ec2400dbccc103d8f05d9e14def87b3.zip
gcc-2aff74974ec2400dbccc103d8f05d9e14def87b3.tar.gz
gcc-2aff74974ec2400dbccc103d8f05d9e14def87b3.tar.bz2
gccrs: allow casts from numeric types to floats
Fixes Rust-GCC#3261 gcc/rust/ChangeLog: * typecheck/rust-casts.cc (TypeCastRules::cast_rules): allow casts to float gcc/testsuite/ChangeLog: * rust/compile/issue-3261.rs: New test. Signed-off-by: Philip Herron <herron.philip@googlemail.com>
-rw-r--r--gcc/rust/typecheck/rust-casts.cc10
-rw-r--r--gcc/testsuite/rust/compile/issue-3261.rs18
2 files changed, 28 insertions, 0 deletions
diff --git a/gcc/rust/typecheck/rust-casts.cc b/gcc/rust/typecheck/rust-casts.cc
index 87b31b5..fb79510 100644
--- a/gcc/rust/typecheck/rust-casts.cc
+++ b/gcc/rust/typecheck/rust-casts.cc
@@ -200,6 +200,16 @@ TypeCastRules::cast_rules ()
}
break;
+ case TyTy::TypeKind::FLOAT: {
+ // can only do this for number types not char
+ bool from_char
+ = from.get_ty ()->get_kind () == TyTy::TypeKind::CHAR;
+ if (!from_char)
+ return TypeCoercionRules::CoercionResult{{},
+ to.get_ty ()->clone ()};
+ }
+ break;
+
case TyTy::TypeKind::INFER:
case TyTy::TypeKind::USIZE:
case TyTy::TypeKind::ISIZE:
diff --git a/gcc/testsuite/rust/compile/issue-3261.rs b/gcc/testsuite/rust/compile/issue-3261.rs
new file mode 100644
index 0000000..37e974d
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3261.rs
@@ -0,0 +1,18 @@
+// { dg-options "-w" }
+fn main() {
+ let a: i8 = 50;
+ let b = a as f32;
+ let c = a as f64;
+
+ let a: i16 = 1337;
+ let b = a as f32;
+ let c = a as f64;
+
+ let a: i32 = 1337;
+ let b = a as f32;
+ let c = a as f64;
+
+ let a: i64 = 1337;
+ let b = a as f32;
+ let c = a as f64;
+}