aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2021-08-17 08:01:46 +0000
committerGitHub <noreply@github.com>2021-08-17 08:01:46 +0000
commitd9082b50a98168b766cfc5136f50a3497c14897d (patch)
tree43d75121ca9c9b69b3baf9ca04271d39b73e3b0b
parent52c1cdc9c63baeb090680daf6762c02362f2c6cd (diff)
parent5b229ddbf41c9e74fcce930c26101c1d34a5c9d1 (diff)
downloadgcc-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.h6
-rw-r--r--gcc/testsuite/rust/compile/torture/bools_eq.rs18
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 (); } }
+}