diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2021-08-17 08:01:46 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-17 08:01:46 +0000 |
commit | d9082b50a98168b766cfc5136f50a3497c14897d (patch) | |
tree | 43d75121ca9c9b69b3baf9ca04271d39b73e3b0b | |
parent | 52c1cdc9c63baeb090680daf6762c02362f2c6cd (diff) | |
parent | 5b229ddbf41c9e74fcce930c26101c1d34a5c9d1 (diff) | |
download | gcc-d9082b50a98168b766cfc5136f50a3497c14897d.zip gcc-d9082b50a98168b766cfc5136f50a3497c14897d.tar.gz gcc-d9082b50a98168b766cfc5136f50a3497c14897d.tar.bz2 |
Merge #631
631: Use builtin bool instead of creating new bool types for ComparisonExpr r=dkm a=dkm
From Mark Wielaard : https://gcc.gnu.org/pipermail/gcc-rust/2021-August/000141.html
> The TypeCheckExpr creates a new TyTy::BoolType for a
> ComparisonExpr. This new BoolType is unknown to TyTyResolveCompile
> which causes a crash when trying to compile the inferred new
> BoolType. Resolve this by looking up the builtin bool type.
> The new "bools_eq.rs" testcase uses several bools which show
> this issue.
>
> Also the lhs and rhs types need to be compatible, but don't
> need to be bool type themselves. So don't append the reference
> to the inferred type. The existing "ifunaryexpr.rs" testcase
> will fail without this fix.
Co-authored-by: Mark Wielaard <mark@klomp.org>
-rw-r--r-- | gcc/rust/typecheck/rust-hir-type-check-expr.h | 6 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/torture/bools_eq.rs | 18 |
2 files changed, 20 insertions, 4 deletions
diff --git a/gcc/rust/typecheck/rust-hir-type-check-expr.h b/gcc/rust/typecheck/rust-hir-type-check-expr.h index d88cb0b..a833822 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-expr.h +++ b/gcc/rust/typecheck/rust-hir-type-check-expr.h @@ -630,10 +630,8 @@ public: if (result == nullptr || result->get_kind () == TyTy::TypeKind::ERROR) return; - // we expect this to be - infered = new TyTy::BoolType (expr.get_mappings ().get_hirid ()); - infered->append_reference (lhs->get_ref ()); - infered->append_reference (rhs->get_ref ()); + bool ok = context->lookup_builtin ("bool", &infered); + rust_assert (ok); } void visit (HIR::LazyBooleanExpr &expr) override diff --git a/gcc/testsuite/rust/compile/torture/bools_eq.rs b/gcc/testsuite/rust/compile/torture/bools_eq.rs new file mode 100644 index 0000000..965127b --- /dev/null +++ b/gcc/testsuite/rust/compile/torture/bools_eq.rs @@ -0,0 +1,18 @@ +extern "C" +{ + fn abort (); +} + +fn beq (a: bool, b: bool) -> bool +{ + let bools_eq = a == b; + bools_eq +} + +pub fn main () +{ + let a = true; + let b = false; + let r = beq (a, b); + if r { unsafe { abort (); } } +} |