diff options
author | Owen Avery <powerboat9.gamer@gmail.com> | 2023-03-03 20:05:59 -0500 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-01-16 18:21:08 +0100 |
commit | 234e7176a5d337af632b67380163d7bbd3526f3a (patch) | |
tree | dd3fd6e772883f0d636a81503d1a29406695cb6d /gcc | |
parent | 1e1bcabf1c6aabb5b5eb5abf6689b88313dbb736 (diff) | |
download | gcc-234e7176a5d337af632b67380163d7bbd3526f3a.zip gcc-234e7176a5d337af632b67380163d7bbd3526f3a.tar.gz gcc-234e7176a5d337af632b67380163d7bbd3526f3a.tar.bz2 |
gccrs: Resolve closure parameters without given type
gcc/rust/ChangeLog:
* resolve/rust-early-name-resolver.cc
(EarlyNameResolver::visit):
Check for closure parameter without given type.
gcc/testsuite/ChangeLog:
* rust/compile/closure_no_type_anno.rs: Extend test.
Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/resolve/rust-early-name-resolver.cc | 3 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/closure_no_type_anno.rs | 9 |
2 files changed, 9 insertions, 3 deletions
diff --git a/gcc/rust/resolve/rust-early-name-resolver.cc b/gcc/rust/resolve/rust-early-name-resolver.cc index 6dc11c4..c6cbdb0 100644 --- a/gcc/rust/resolve/rust-early-name-resolver.cc +++ b/gcc/rust/resolve/rust-early-name-resolver.cc @@ -326,7 +326,8 @@ EarlyNameResolver::visit (AST::ClosureExprInner &expr) expr.get_definition_expr ()->accept_vis (*this); for (auto ¶m : expr.get_params ()) - param.get_type ()->accept_vis (*this); + if (param.has_type_given ()) + param.get_type ()->accept_vis (*this); } void diff --git a/gcc/testsuite/rust/compile/closure_no_type_anno.rs b/gcc/testsuite/rust/compile/closure_no_type_anno.rs index beade76..ff2c8b8 100644 --- a/gcc/testsuite/rust/compile/closure_no_type_anno.rs +++ b/gcc/testsuite/rust/compile/closure_no_type_anno.rs @@ -1,5 +1,10 @@ -// { dg-additional-options "-fsyntax-only" } +#[lang = "fn_once"] +trait FnOnce<Args> { + type Output; + + fn call_once(self, args: Args) -> Self::Output; +} pub fn foo() { - let a = |_| 15; + let a = |_| 15; // { dg-error "type annotations needed" } } |