From: Nobel <[email protected]>
gccrs now should be able to cast float types as numeric.
gcc/rust/ChangeLog:
* typecheck/rust-casts.cc (TypeCastRules::cast_rules): Add rule.
gcc/testsuite/ChangeLog:
* rust/compile/cast_float_as_integer.rs: New test.
Signed-off-by: Nobel Singh <[email protected]>
---
gcc/rust/typecheck/rust-casts.cc | 6 ++++++
gcc/testsuite/rust/compile/cast_float_as_integer.rs | 10 ++++++++++
2 files changed, 16 insertions(+)
create mode 100644 gcc/testsuite/rust/compile/cast_float_as_integer.rs
diff --git a/gcc/rust/typecheck/rust-casts.cc b/gcc/rust/typecheck/rust-casts.cc
index 694cbaa5db6..90bdef1fd3c 100644
--- a/gcc/rust/typecheck/rust-casts.cc
+++ b/gcc/rust/typecheck/rust-casts.cc
@@ -235,6 +235,12 @@ TypeCastRules::cast_rules ()
case TyTy::TypeKind::FLOAT:
switch (to.get_ty ()->get_kind ())
{
+ case TyTy::TypeKind::USIZE:
+ case TyTy::TypeKind::ISIZE:
+ case TyTy::TypeKind::UINT:
+ case TyTy::TypeKind::INT:
+ return TypeCoercionRules::CoercionResult{{}, to.get_ty ()->clone ()};
+
case TyTy::TypeKind::FLOAT:
return TypeCoercionRules::CoercionResult{{}, to.get_ty ()->clone ()};
diff --git a/gcc/testsuite/rust/compile/cast_float_as_integer.rs
b/gcc/testsuite/rust/compile/cast_float_as_integer.rs
new file mode 100644
index 00000000000..e6b86db8a66
--- /dev/null
+++ b/gcc/testsuite/rust/compile/cast_float_as_integer.rs
@@ -0,0 +1,10 @@
+// { dg-options "-w" }
+fn main(){
+ let foo:f64 = 13.37;
+ let _ = foo as i64;
+ let _ = foo as u64;
+ let _ = foo as isize;
+ let _ = foo as usize;
+ let _ = foo as i8;
+ let _ = foo as u8;
+}
--
2.45.2