aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2021-08-16 18:44:47 +0200
committerMark Wielaard <mark@klomp.org>2021-08-16 18:44:47 +0200
commit4f02b38f6ab17a49d9f6a681b1fefb89c12304d9 (patch)
tree8457babd13a32a3be52c049149978034e4892345 /gcc/rust
parent52c1cdc9c63baeb090680daf6762c02362f2c6cd (diff)
downloadgcc-4f02b38f6ab17a49d9f6a681b1fefb89c12304d9.zip
gcc-4f02b38f6ab17a49d9f6a681b1fefb89c12304d9.tar.gz
gcc-4f02b38f6ab17a49d9f6a681b1fefb89c12304d9.tar.bz2
Allow bool and char to be cast as any integer type
bools and chars can be cast to any integer type, but not to floats or each other. Adjust the BoolCastRule and CharCastRule to allow these casts. Add a postive test "as_bool_char.rs" and negative test "bad_as_bool_char.rs" to check the correct casts are accepted and the illegal casts produce errors. Resolves: https://github.com/Rust-GCC/gccrs/issues/629
Diffstat (limited to 'gcc/rust')
-rw-r--r--gcc/rust/typecheck/rust-tyty-cast.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/rust/typecheck/rust-tyty-cast.h b/gcc/rust/typecheck/rust-tyty-cast.h
index de59b32..c457931 100644
--- a/gcc/rust/typecheck/rust-tyty-cast.h
+++ b/gcc/rust/typecheck/rust-tyty-cast.h
@@ -779,6 +779,12 @@ public:
}
}
+ /* bools can be cast to any integer type (but not floats or chars). */
+ void visit (IntType &type) override { resolved = type.clone (); }
+ void visit (UintType &type) override { resolved = type.clone (); }
+ void visit (USizeType &type) override { resolved = type.clone (); }
+ void visit (ISizeType &type) override { resolved = type.clone (); }
+
private:
BaseType *get_base () override { return base; }
@@ -1078,6 +1084,12 @@ public:
void visit (CharType &type) override { resolved = type.clone (); }
+ /* chars can be cast to any integer type (but not floats or bools). */
+ void visit (IntType &type) override { resolved = type.clone (); }
+ void visit (UintType &type) override { resolved = type.clone (); }
+ void visit (USizeType &type) override { resolved = type.clone (); }
+ void visit (ISizeType &type) override { resolved = type.clone (); }
+
private:
BaseType *get_base () override { return base; }