public inbox for gcc-rust@gcc.gnu.org
 help / color / mirror / Atom feed
From: Mark Wielaard <mark@klomp.org>
To: dkm@kataplop.net, gcc-rust@gcc.gnu.org
Subject: Re: [PATCH] Add support for const bool and const float
Date: Mon, 16 Aug 2021 23:44:39 +0200	[thread overview]
Message-ID: <YRrcR2KWL42WaOLT@wildebeest.org> (raw)
In-Reply-To: <YRrSlzk+lPmw+3bq@wildebeest.org>

[-- Attachment #1: Type: text/plain, Size: 1396 bytes --]

Hi,

On Mon, Aug 16, 2021 at 11:03:19PM +0200, Mark Wielaard wrote:
> Now having replicated it locally the rust.log shows:
> 
> /srv/gccrs/gccrs/gcc/testsuite/rust/compile/torture/ifunaryexpr.rs: In function 'main':
> /srv/gccrs/gccrs/gcc/testsuite/rust/compile/torture/ifunaryexpr.rs:8:5: error: mismatching comparison operand types
> const i32
> bool
> if (n != 0) goto <D.205>; else goto <D.206>;
> /srv/gccrs/gccrs/gcc/testsuite/rust/compile/torture/ifunaryexpr.rs:8:5: internal compiler error: 'verify
> _gimple' failed
> 0xf38fbd verify_gimple_in_seq(gimple*)
>         ../../gccrs/gcc/tree-cfg.c:5157
> 0xc72346 gimplify_body(tree_node*, bool)
>         ../../gccrs/gcc/gimplify.c:15401
> 0xc724cd gimplify_function_tree(tree_node*)
>         ../../gccrs/gcc/gimplify.c:15472
> 0xab0dc7 cgraph_node::analyze()
>         ../../gccrs/gcc/cgraphunit.c:670
> 0xab38b7 analyze_functions
>         ../../gccrs/gcc/cgraphunit.c:1236
> 0xab454d symbol_table::finalize_compilation_unit()
>         ../../gccrs/gcc/cgraphunit.c:2514
> 
> So, my patch created bad gimple. I'll try to track it down.

I figured it out. There was another bug in the ComparisonExpr type
checker the result is a bool type but the argument types only need to
have compatible types, they don't have to be bools.

Fixed patch attached. Also on
https://code.wildebeest.org/git/user/mjw/gccrs/commit/?h=bools_eq

Cheers,

Mark

[-- Attachment #2: 0001-Use-builtin-bool-instead-of-creating-new-bool-types-.patch --]
[-- Type: text/x-diff, Size: 2217 bytes --]

From 5b229ddbf41c9e74fcce930c26101c1d34a5c9d1 Mon Sep 17 00:00:00 2001
From: Mark Wielaard <mark@klomp.org>
Date: Sat, 14 Aug 2021 23:38:11 +0200
Subject: [PATCH] Use builtin bool instead of creating new bool types for
 ComparisonExpr

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.
---
 gcc/rust/typecheck/rust-hir-type-check-expr.h  |  6 ++----
 gcc/testsuite/rust/compile/torture/bools_eq.rs | 18 ++++++++++++++++++
 2 files changed, 20 insertions(+), 4 deletions(-)
 create mode 100644 gcc/testsuite/rust/compile/torture/bools_eq.rs

diff --git a/gcc/rust/typecheck/rust-hir-type-check-expr.h b/gcc/rust/typecheck/rust-hir-type-check-expr.h
index d88cb0b7f1d..a833822e9b3 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 00000000000..965127b5d54
--- /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 (); } }
+}
-- 
2.32.0


      reply	other threads:[~2021-08-16 21:44 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-15 19:55 Mark Wielaard
2021-08-16  7:48 ` dkm
2021-08-16  8:52   ` Mark Wielaard
2021-08-16 21:03     ` Mark Wielaard
2021-08-16 21:44       ` Mark Wielaard [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YRrcR2KWL42WaOLT@wildebeest.org \
    --to=mark@klomp.org \
    --cc=dkm@kataplop.net \
    --cc=gcc-rust@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).