aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen Avery <powerboat9.gamer@gmail.com>2023-05-07 20:29:15 -0400
committerPhilip Herron <philip.herron@embecosm.com>2023-05-08 13:57:14 +0000
commit85ca0ba82084a19707912009d713aa58ef775621 (patch)
tree9a2566c40573173f2ed45b2d5b2ba6c2366fa7d2
parentcae5140e9b5a74e09f3dd95a5ffe664f1eefc14c (diff)
downloadgcc-85ca0ba82084a19707912009d713aa58ef775621.zip
gcc-85ca0ba82084a19707912009d713aa58ef775621.tar.gz
gcc-85ca0ba82084a19707912009d713aa58ef775621.tar.bz2
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 <powerboat9.gamer@gmail.com>
-rw-r--r--gcc/rust/parse/rust-parse-impl.h6
-rw-r--r--gcc/testsuite/rust/compile/parse_specialization.rs2
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 1bb3a9a..cdcc8b8 100644
--- a/gcc/rust/parse/rust-parse-impl.h
+++ b/gcc/rust/parse/rust-parse-impl.h
@@ -5686,9 +5686,6 @@ Parser<ManagedTokenSource>::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<ManagedTokenSource>::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 5de1f6a..de50b5b 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() {}
}