From af874e4bcd601e2fac3598c122641db6f3b1d95c Mon Sep 17 00:00:00 2001 From: Owen Avery Date: Sun, 7 May 2023 20:29:15 -0400 Subject: [PATCH] gccrs: Fix "default unsafe fn ..." parsing gcc/rust/ChangeLog: * parse/rust-parse-impl.h (Parser::parse_trait_impl_function_or_method): Parse function/method qualifiers after "default". gcc/testsuite/ChangeLog: * rust/compile/parse_specialization.rs: Add "default unsafe" coverage. Signed-off-by: Owen Avery --- gcc/rust/parse/rust-parse-impl.h | 6 +++--- gcc/testsuite/rust/compile/parse_specialization.rs | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h index 042018de9a22..1addbe95176d 100644 --- a/gcc/rust/parse/rust-parse-impl.h +++ b/gcc/rust/parse/rust-parse-impl.h @@ -5686,9 +5686,6 @@ Parser::parse_trait_impl_function_or_method ( // - template? Location locus = lexer.peek_token ()->get_locus (); - // parse function or method qualifiers - AST::FunctionQualifiers qualifiers = parse_function_qualifiers (); - auto is_default = false; auto t = lexer.peek_token (); if (t->get_id () == IDENTIFIER && t->get_str () == "default") @@ -5697,6 +5694,9 @@ Parser::parse_trait_impl_function_or_method ( lexer.skip_token (); } + // parse function or method qualifiers + AST::FunctionQualifiers qualifiers = parse_function_qualifiers (); + skip_token (FN_TOK); // parse function or method name diff --git a/gcc/testsuite/rust/compile/parse_specialization.rs b/gcc/testsuite/rust/compile/parse_specialization.rs index 5de1f6a6f96a..de50b5bedff4 100644 --- a/gcc/testsuite/rust/compile/parse_specialization.rs +++ b/gcc/testsuite/rust/compile/parse_specialization.rs @@ -2,10 +2,12 @@ trait Foo { fn bar(); + unsafe fn bar_u(); } struct S; impl Foo for S { default fn bar() {} + default unsafe fn bar_u() {} } -- 2.47.2