diff options
author | Philip Herron <herron.philip@googlemail.com> | 2023-04-20 12:33:55 +0100 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-01-16 18:34:13 +0100 |
commit | 91a86375d9869c8652734ce28dd30c2cdb21656e (patch) | |
tree | 19657a6b8b14f656a4995851a7490f1df8722486 | |
parent | 50c549ef3db6276a6a89bead477bea5f74f07adc (diff) | |
download | gcc-91a86375d9869c8652734ce28dd30c2cdb21656e.zip gcc-91a86375d9869c8652734ce28dd30c2cdb21656e.tar.gz gcc-91a86375d9869c8652734ce28dd30c2cdb21656e.tar.bz2 |
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 <herron.philip@googlemail.com>
-rw-r--r-- | gcc/rust/backend/rust-compile-item.cc | 14 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/issue-2136-1.rs | 14 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/issue-2136-2.rs | 13 |
3 files changed, 29 insertions, 12 deletions
diff --git a/gcc/rust/backend/rust-compile-item.cc b/gcc/rust/backend/rust-compile-item.cc index 4b37b15..d953e4b 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 0000000..fcf1efc --- /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 } + <u16 as Foo>::foo() + } +} + +fn main() { + <u16>::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 0000000..7317f3f --- /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(); +} |