From: Owen Avery Date: Mon, 8 May 2023 00:29:15 +0000 (-0400) Subject: gccrs: Fix "default unsafe fn ..." parsing X-Git-Tag: basepoints/gcc-15~2580 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=af874e4bcd601e2fac3598c122641db6f3b1d95c;p=thirdparty%2Fgcc.git 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 --- 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() {} }