mirror of
https://gcc.gnu.org/git/gcc.git
synced 2026-02-23 12:13:08 -05:00
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:
@@ -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 ());
|
||||
|
||||
10
gcc/testsuite/rust/compile/bounds.rs
Normal file
10
gcc/testsuite/rust/compile/bounds.rs
Normal 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'" }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user