diff options
author | Mark Wielaard <mark@klomp.org> | 2021-08-16 18:44:47 +0200 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2021-08-16 18:44:47 +0200 |
commit | 4f02b38f6ab17a49d9f6a681b1fefb89c12304d9 (patch) | |
tree | 8457babd13a32a3be52c049149978034e4892345 /gcc/rust | |
parent | 52c1cdc9c63baeb090680daf6762c02362f2c6cd (diff) | |
download | gcc-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.h | 12 |
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; } |