gccrs: rust: add bound parsing in parse_generic_arg.

gcc/rust/ChangeLog:

	* parse/rust-parse-impl.h (Parser::parse_generic_arg): Add proper bound parsing.

gcc/testsuite/ChangeLog:

	* rust/compile/bounds.rs: New test.

Signed-off-by: Xiao Ma <mxlol233@outlook.com>
This commit is contained in:
mxlol233
2023-01-04 21:21:59 +08:00
committed by Arthur Cohen
parent d9e05700ac
commit ef792b9658
2 changed files with 27 additions and 0 deletions

View File

@@ -6198,6 +6198,23 @@ Parser<ManagedTokenSource>::parse_generic_arg ()
else
return AST::GenericArg::create_error ();
}
else if (next_tok->get_id () == COLON)
{
lexer.skip_token (); // skip ident
lexer.skip_token (); // skip colon
auto tok = lexer.peek_token ();
std::vector<std::unique_ptr<AST::TypeParamBound>> bounds
= parse_type_param_bounds ();
auto type = std::unique_ptr<AST::TraitObjectType> (
new AST::TraitObjectType (std::move (bounds), tok->get_locus (),
false));
if (type)
return AST::GenericArg::create_type (std::move (type));
else
return AST::GenericArg::create_error ();
}
lexer.skip_token ();
return AST::GenericArg::create_ambiguous (tok->get_str (),
tok->get_locus ());

View File

@@ -0,0 +1,10 @@
trait Foo {
type Bar;
}
trait Copy {}
fn c<F: Foo<Bar: Foo>>() where F::Bar: Copy { // { dg-warning "function is never used: 'c'" }
}