diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2021-08-17 15:24:24 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-17 15:24:24 +0000 |
commit | 335cd53ddadbe43f2a1c2187fcbd28cf04fe911e (patch) | |
tree | dc24c1684e1bb2155729e50fdcf2a315922f0024 /gcc/rust | |
parent | d9082b50a98168b766cfc5136f50a3497c14897d (diff) | |
parent | 4f02b38f6ab17a49d9f6a681b1fefb89c12304d9 (diff) | |
download | gcc-335cd53ddadbe43f2a1c2187fcbd28cf04fe911e.zip gcc-335cd53ddadbe43f2a1c2187fcbd28cf04fe911e.tar.gz gcc-335cd53ddadbe43f2a1c2187fcbd28cf04fe911e.tar.bz2 |
Merge #633
633: Allow bool and char to be cast as any integer type r=philberty a=dkm
From Mark Wielaard : https://gcc.gnu.org/pipermail/gcc-rust/2021-August/000147.html
> 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
Co-authored-by: Mark Wielaard <mark@klomp.org>
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; } |