From 91a86375d9869c8652734ce28dd30c2cdb21656e Mon Sep 17 00:00:00 2001 From: Philip Herron Date: Thu, 20 Apr 2023 12:33:55 +0100 Subject: [PATCH] gccrs: fix ICE with recursive function calls Fixes #2136 gcc/rust/ChangeLog: * backend/rust-compile-item.cc (CompileItem::visit): remove bad checks gcc/testsuite/ChangeLog: * rust/compile/issue-2136-1.rs: New test. * rust/compile/issue-2136-2.rs: New test. Signed-off-by: Philip Herron --- gcc/rust/backend/rust-compile-item.cc | 14 ++------------ gcc/testsuite/rust/compile/issue-2136-1.rs | 14 ++++++++++++++ gcc/testsuite/rust/compile/issue-2136-2.rs | 13 +++++++++++++ 3 files changed, 29 insertions(+), 12 deletions(-) create mode 100644 gcc/testsuite/rust/compile/issue-2136-1.rs create mode 100644 gcc/testsuite/rust/compile/issue-2136-2.rs diff --git a/gcc/rust/backend/rust-compile-item.cc b/gcc/rust/backend/rust-compile-item.cc index 4b37b15f87eb..d953e4b13672 100644 --- a/gcc/rust/backend/rust-compile-item.cc +++ b/gcc/rust/backend/rust-compile-item.cc @@ -147,18 +147,8 @@ CompileItem::visit (HIR::Function &function) if (ctx->lookup_function_decl (fntype->get_ty_ref (), &lookup, fntype->get_id (), fntype, asm_name)) { - // has this been added to the list then it must be finished - if (ctx->function_completed (lookup)) - { - tree dummy = NULL_TREE; - if (!ctx->lookup_function_decl (fntype->get_ty_ref (), &dummy)) - { - ctx->insert_function_decl (fntype, lookup); - } - - reference = address_expression (lookup, ref_locus); - return; - } + reference = address_expression (lookup, ref_locus); + return; } if (fntype->has_subsititions_defined ()) diff --git a/gcc/testsuite/rust/compile/issue-2136-1.rs b/gcc/testsuite/rust/compile/issue-2136-1.rs new file mode 100644 index 000000000000..fcf1efcd171c --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-2136-1.rs @@ -0,0 +1,14 @@ +pub trait Foo { + fn foo(); +} + +impl Foo for u16 { + fn foo() { + // { dg-warning "infinite recursion detected" "" { target *-*-* } .-1 } + ::foo() + } +} + +fn main() { + ::foo(); +} diff --git a/gcc/testsuite/rust/compile/issue-2136-2.rs b/gcc/testsuite/rust/compile/issue-2136-2.rs new file mode 100644 index 000000000000..7317f3f5151b --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-2136-2.rs @@ -0,0 +1,13 @@ +struct S; + +impl S { + fn foo(self) { + // { dg-warning "infinite recursion detected" "" { target *-*-* } .-1 } + self.foo(); + } +} + +fn main() { + let a = S; + a.foo(); +} -- 2.47.2