]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Remove non-leaf item in crate parsing failure error
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Wed, 26 Nov 2025 14:46:04 +0000 (15:46 +0100)
committerArthur Cohen <arthur.cohen@embecosm.com>
Wed, 3 Dec 2025 12:25:46 +0000 (13:25 +0100)
gcc/rust/ChangeLog:

* parse/rust-parse-impl.h (Parser::parse_items): Remove item parsing
error.

gcc/testsuite/ChangeLog:

* rust/compile/braced_macro_arm.rs: Remove superfluous error message
matching.
* rust/compile/decl_macro6.rs: Likewise.
* rust/compile/decl_macro7.rs: Likewise.
* rust/compile/extern_type_item_missing_semi.rs: Likewise.
* rust/compile/issue-2187.rs: Likewise.
* rust/compile/issue-407-2.rs: Likewise.
* rust/compile/issue-407.rs: Likewise.
* rust/compile/issue-4162.rs: Likewise.
* rust/compile/issue-867.rs: Likewise.
* rust/compile/macros/mbe/macro-issue1053-2.rs: Likewise.
* rust/compile/macros/mbe/macro-issue1395-2.rs: Likewise.
* rust/compile/macros/mbe/macro-issue3608.rs: Likewise.
* rust/compile/macros/mbe/macro27.rs: Likewise.
* rust/compile/macros/mbe/macro28.rs: Likewise.
* rust/compile/macros/mbe/macro29.rs: Likewise.
* rust/compile/macros/mbe/macro30.rs: Likewise.
* rust/compile/macros/mbe/macro31.rs: Likewise.
* rust/compile/macros/mbe/macro33.rs: Likewise.
* rust/compile/macros/mbe/macro35.rs: Likewise.
* rust/compile/macros/mbe/macro37.rs: Likewise.
* rust/compile/macros/mbe/macro38.rs: Likewise.
* rust/compile/macros/mbe/macro39.rs: Likewise.
* rust/compile/macros/mbe/macro48.rs: Likewise.
* rust/compile/parse_invalid_specialization.rs: Likewise.
* rust/compile/parse_simple_path_fail_1.rs: Likewise.
* rust/compile/parse_simple_path_fail_2.rs: Likewise.
* rust/compile/raw-string-loc.rs: Likewise.
* rust/compile/raw-byte-string-loc.rs: Likewise.
* rust/compile/self_const_ptr.rs: Likewise.
* rust/compile/self_mut_ptr.rs: Likewise.
* rust/compile/static_var1.rs: Likewise.
* rust/compile/self_ptr.rs: Likewise.
* rust/compile/torture/identifier-missing-impl-1.rs: Likewise.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
34 files changed:
gcc/rust/parse/rust-parse-impl.h
gcc/testsuite/rust/compile/braced_macro_arm.rs
gcc/testsuite/rust/compile/decl_macro6.rs
gcc/testsuite/rust/compile/decl_macro7.rs
gcc/testsuite/rust/compile/extern_type_item_missing_semi.rs
gcc/testsuite/rust/compile/issue-2187.rs
gcc/testsuite/rust/compile/issue-407-2.rs
gcc/testsuite/rust/compile/issue-407.rs
gcc/testsuite/rust/compile/issue-4162.rs
gcc/testsuite/rust/compile/issue-867.rs
gcc/testsuite/rust/compile/macros/mbe/macro-issue1053-2.rs
gcc/testsuite/rust/compile/macros/mbe/macro-issue1395-2.rs
gcc/testsuite/rust/compile/macros/mbe/macro-issue3608.rs
gcc/testsuite/rust/compile/macros/mbe/macro27.rs
gcc/testsuite/rust/compile/macros/mbe/macro28.rs
gcc/testsuite/rust/compile/macros/mbe/macro29.rs
gcc/testsuite/rust/compile/macros/mbe/macro30.rs
gcc/testsuite/rust/compile/macros/mbe/macro31.rs
gcc/testsuite/rust/compile/macros/mbe/macro33.rs
gcc/testsuite/rust/compile/macros/mbe/macro35.rs
gcc/testsuite/rust/compile/macros/mbe/macro37.rs
gcc/testsuite/rust/compile/macros/mbe/macro38.rs
gcc/testsuite/rust/compile/macros/mbe/macro39.rs
gcc/testsuite/rust/compile/macros/mbe/macro48.rs
gcc/testsuite/rust/compile/parse_invalid_specialization.rs
gcc/testsuite/rust/compile/parse_simple_path_fail_1.rs
gcc/testsuite/rust/compile/parse_simple_path_fail_2.rs
gcc/testsuite/rust/compile/raw-byte-string-loc.rs
gcc/testsuite/rust/compile/raw-string-loc.rs
gcc/testsuite/rust/compile/self_const_ptr.rs
gcc/testsuite/rust/compile/self_mut_ptr.rs
gcc/testsuite/rust/compile/self_ptr.rs
gcc/testsuite/rust/compile/static_var1.rs
gcc/testsuite/rust/compile/torture/identifier-missing-impl-1.rs

index afc70123095162abd7f40c2ecbd00670ca092010..1ffddabf74d69e568dbf21f48e21d13f9aed6c95 100644 (file)
@@ -431,10 +431,6 @@ Parser<ManagedTokenSource>::parse_items ()
       std::unique_ptr<AST::Item> item = parse_item (false);
       if (item == nullptr)
        {
-         Error error (lexer.peek_token ()->get_locus (),
-                      "failed to parse item in crate");
-         add_error (std::move (error));
-
          // TODO: should all items be cleared?
          items = std::vector<std::unique_ptr<AST::Item>> ();
          break;
index 14468786f50968a7074ea758e6cbac662b4ea936..9bcd1a69c9fb5ebf071bc02a16f9613cd3c7ef13 100644 (file)
@@ -12,7 +12,6 @@ fn h(c: bool) {
         false => ()
         // { dg-error "exprwithoutblock requires comma after match case expression in match arm \\(if not final case\\)" "" { target *-*-* } .-1 }
         // { dg-error "unrecognised token .false. for start of item" "" { target *-*-* } .-2 }
-        // { dg-error "failed to parse item in crate" "" { target *-*-* } .-3 }
     };
 }
 
index 5c5e7002a98041adb551b2fdc99a0c81041fad8c..b290b4c98204176144b168db1514000fb416fbad 100644 (file)
@@ -2,4 +2,3 @@
 macro m {}
 // { dg-error "unexpected token .\}. - expecting delimiters .for a macro matcher." "" { target *-*-* } .-1 }
 // { dg-error "required first macro rule in declarative macro definition could not be parsed" "" { target *-*-* } .-2 }
-// { dg-error "failed to parse item in crate" "" { target *-*-* } .-3 }
index 7327fb5678216316483f5e49b971b49c2f8a0b60..80075444184023abd23d33be38be3abde5ebf321 100644 (file)
@@ -1,4 +1,3 @@
 #![feature(decl_macro)]
 pub macro hello() [ "Hello" ]
 // { dg-error "only braces can be used for a macro transcriber in declarative macro definition" "" { target *-*-* } .-1 }
-// { dg-error "failed to parse item in crate" }
\ No newline at end of file
index a42af02210fa0a3df4b7ac52439d255c9123a0ac..cd4d4e2cd5407ae950c1502c671ff89e640b4b01 100644 (file)
@@ -4,4 +4,3 @@ extern "C" {
     type F;
     type E // { dg-error "failed to parse" }
 } // { dg-error "expecting" }
-// { dg-error "failed to parse item in crate" ""  { target *-*-* } .-1 }
index deef417a668bcecd2d293f19dcce73355a3de5dd..78d843ec83290bab7d9a5f44a0c21052c0781625 100644 (file)
@@ -8,4 +8,3 @@ const D: &'static str = "
 ";
 ERROR_TIME
 // { dg-error "unrecognised token" "" { target *-*-* } .-1 }
-// { dg-error "failed to parse item in crate" "" { target *-*-* } .-2 }
index 2d60d6d72b89ae02056e3635084e958e58e10475..002d998a95eb0bdf955855dd828f6577ec815085 100644 (file)
@@ -10,7 +10,6 @@ pub fn loopy()  {
             // { dg-error {failed to parse if body block expression in if expression} "" { target *-*-* } .-2 }
             // { dg-error {could not parse loop body in \(infinite\) loop expression} "" { target *-*-* } .-3 }
             // { dg-error {unrecognised token 'integer literal' for start of item} "" { target *-*-* } .-4 }
-            // { dg-error {failed to parse item in crate} "" { target *-*-* } .-5 }
         } else {
             break;
         }
index bd0d3069b10993942ba7aa7de9e77aba9a0ea1bc..9188c2c6b07de3512fffec50fd944ad67473fd88 100644 (file)
@@ -4,5 +4,4 @@ fn test()  {
     a + = 1; // { dg-error "found unexpected token '=' in null denotation" }
     // { dg-error {failed to parse statement or expression in block expression} "" { target *-*-* } .-1 }
     // { dg-error {unrecognised token 'integer literal' for start of item} "" { target *-*-* } .-2 }
-    // { dg-error {failed to parse item in crate} "" { target *-*-* } .-3 }
 }
index c82bac611d3e9b2cf3f97292afa2377844d05d9c..7caf8870c05d37a36660ddbc43dd2fc6e632022b 100644 (file)
@@ -3,7 +3,6 @@ pub fn main() {
     // { dg-error "should be at least 1 pattern" "" { target *-*-* } .-1 }
     // { dg-error "failed to parse statement or expression in block expression" "" { target *-*-* } .-2 }
     // { dg-error "unrecognised token .=. for start of item" "" { target *-*-* } .-3 }
-    // { dg-error "failed to parse item in crate" "" { target *-*-* } .-4 }
     {}
 }
 
index e5f9b29bd59550f96dbbef6d193506b48672ee1f..c61de09d8abbc69198fa3012eb0ea22089857dad 100644 (file)
@@ -3,6 +3,5 @@ fn main() {
     let a = _ + 123; // { dg-error "use of '_' is not allowed on the right-side of an assignment" }
                      // { dg-error {failed to parse expression in let statement} "" { target *-*-* } .-1  }
                      // { dg-error {failed to parse statement or expression in block expression} "" { target *-*-* } .-2 }
-                     // { dg-error {unrecognised token '\}' for start of item} "" { target *-*-* } .+2 }
-                     // { dg-error {failed to parse item in crate} "" { target *-*-* } .+1 }
+                     // { dg-error {unrecognised token '\}' for start of item} "" { target *-*-* } .+1 }
 }
index 31459907c08f9888a1fee9ba3d4234fcf57820a0..fc96caa1b4ea4af61e9cb770a57f19b090f18045 100644 (file)
@@ -1,5 +1,4 @@
 macro_rules! m {
     ($e:expr $(forbidden)*) => {{}}; // { dg-error "token .identifier. is not allowed after .expr. fragment" }
                                      // { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .-1 }
-                                     // { dg-error "failed to parse item in crate" "" { target *-*-* } .-2 }
 }
index 1df6a3a0038496fc7ed61d37e5b71d028c554ee0..7ff380d891dfe0f882b6e62c93f313878a2a5717 100644 (file)
@@ -2,6 +2,5 @@
 
 macro_rules! try {
     // { dg-error "expecting .identifier. but .try. found" "" { target *-*-* } .-1 }
-    // { dg-error "failed to parse item in crate" "" { target *-*-* } .-2 }
     () => {};
 }
index 15207992ad27b8fed38fc350de725834fbb3c4c9..381f1210afdfb507732cbf250b3d037b300fbf54 100644 (file)
@@ -7,6 +7,5 @@ impl Bar for
 
 fn main() { )// { dg-error "unexpected closing delimiter .\\). - token tree requires either paired delimiters or non-delimiter tokens" }
              // { dg-error "failed to parse token tree in delimited token tree - found .\\)." "" { target *-*-* } .-1 }
-             // { dg-error "unexpected token .end of file. - expecting closing delimiter .\}. .for a delimited token tree." "" { target *-*-* } .+3 }
-             // { dg-error "unexpected token .end of file. - expecting closing delimiter .\\). .for a macro invocation semi." "" { target *-*-* } .+2 }
-             // { dg-error "failed to parse item in crate" "" { target *-*-* } .+1 }
+             // { dg-error "unexpected token .end of file. - expecting closing delimiter .\}. .for a delimited token tree." "" { target *-*-* } .+2 }
+             // { dg-error "unexpected token .end of file. - expecting closing delimiter .\\). .for a macro invocation semi." "" { target *-*-* } .+1 }
index ee7833be0a6e5cab4d0cba5d8cef535f43863269..b9f392f64023d2ffa535c718dc1e4667f59a2d7c 100644 (file)
@@ -2,7 +2,6 @@ macro_rules! m {
     ($a:expr tok) => {
         // { dg-error "token .identifier. is not allowed after .expr. fragment" "" { target *-*-* } .-1 }
         // { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .-2 }
-        // { dg-error "failed to parse item in crate" "" { target *-*-* } .-3 }
         $a
     };
 }
index 8002f284ecfff9ecaf69ffe58c529a0b34a7d91b..bbe55a76c29dd82dc76ecc91b4a2b3795f705ec1 100644 (file)
@@ -2,7 +2,6 @@ macro_rules! m {
     ($a:expr $(tok $es:expr)*) => {
         // { dg-error "token .identifier. is not allowed after .expr. fragment" "" { target *-*-* } .-1 }
         // { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .-2 }
-        // { dg-error "failed to parse item in crate" "" { target *-*-* } .-3 }
         $a
     };
 }
index 39f5021b74f7a527e3f4b1b1c1e48306c5ce8c3d..a6c9eb5271d3e87114697040a0cb96d2634ba073 100644 (file)
@@ -2,7 +2,6 @@ macro_rules! m {
     ($($es:expr)* tok) => {
         // { dg-error "token .identifier. is not allowed after .expr. fragment" "" { target *-*-* } .-1 }
         // { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .-2 }
-        // { dg-error "failed to parse item in crate" "" { target *-*-* } .-3 }
         $a
     };
 }
index 35064bc0ee58bb1867e063921250c6ba54e7678f..097272edcb78c0c9a6738a952a169f97e4e2f084 100644 (file)
@@ -2,7 +2,6 @@ macro_rules! m {
     ($e:expr $f:expr) => {
         // { dg-error "fragment is not allowed after .expr. fragment" "" { target *-*-* } .-1 }
         // { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .-2 }
-        // { dg-error "failed to parse item in crate" "" { target *-*-* } .-3 }
         $e
     };
 }
index 6674a5fe554b24d072fa92fefe43e9e68ac17474..30fae48f91f3518e69550f8161a2dcf9bf4779ec 100644 (file)
@@ -2,7 +2,6 @@ macro_rules! m {
     ($($e:expr)* $($f:expr)*) => {
         // { dg-error "fragment is not allowed after .expr. fragment" "" { target *-*-* } .-1 }
         // { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .-2 }
-        // { dg-error "failed to parse item in crate" "" { target *-*-* } .-3 }
         $e
     };
 }
index 2ccd33e50d3a49e31852f2fbb3b3cfb1174e0201..a73d245a5426b98a216aea383cd54c4879e94305 100644 (file)
@@ -1,5 +1,4 @@
 macro_rules! forbidden_frag {
     ($t:ty $not_block:ident) => {{}}; // { dg-error "fragment specifier .ident. is not allowed after .ty. fragments" }
                                       // { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .-1 }
-                                      // { dg-error "failed to parse item in crate" "" { target *-*-* } .-2 }
 }
index 07b157b53c2fd958a418e988dda456c8bf68e205..8c295d4ffeb0cc53d13fef159b6d57e662e5df52 100644 (file)
@@ -3,5 +3,4 @@ macro_rules! inside_matcher {
                                  // { dg-error "failed to parse macro matcher" "" { target *-*-* } .-1 }
                                  // { dg-error "failed to parse macro match" "" { target *-*-* } .-2 }
                                  // { dg-error "required first macro rule" "" { target *-*-* } .-3 }
-                                 // { dg-error "failed to parse item in crate" "" { target *-*-* } .-4 }
 }
index 5713d90130aaa1cc79988a9094756ac609d8c2d0..26f79d88ef18e7c92f4b01e6a28417ab4234a0bf 100644 (file)
@@ -1,5 +1,4 @@
 macro_rules! invalid_after_zeroable {
     ($e:expr $(,)* forbidden) => {{}}; // { dg-error "token .identifier. is not allowed after .expr. fragment" }
                                        // { dg-error "required first macro rule" "" { target *-*-* } .-1 }
-                                       // { dg-error "failed to parse item in crate" "" { target *-*-* } .-2 }
 }
index eb294aec83bb87d0a2020cada58fd3cd0f6b55e4..e297492721e06f4c1b2321b42f770847258739a8 100644 (file)
@@ -1,5 +1,4 @@
 macro_rules! invalid_after_zeroable_multi {
     ($e:expr $(,)? $(;)* $(=>)? forbidden) => {{}}; // { dg-error "token .identifier. is not allowed after .expr. fragment" }
                                                     // { dg-error "required first macro rule" "" { target *-*-* } .-1 }
-                                                    // { dg-error "failed to parse item in crate" "" { target *-*-* } .-2 }
 }
index f5c498cc8ef3328e63680921b73622431e92a840..867ec21c3837a62b9b0f2c87f553a25b5d8f671f 100644 (file)
@@ -1,5 +1,4 @@
 macro_rules! m {
     ($e:expr (, parenthesis_forbidden)) => {{}}; // { dg-error "token .\\(. at start of matcher is not allowed after .expr. fragment" }
                                                  // { dg-error "required first macro rule" "" { target *-*-* } .-1 }
-                                                 // { dg-error "failed to parse item in crate" "" { target *-*-* } .-2 }
 }
index 6b3b369bc3a0eba20fa41eb2e6dcd015d244d75e..aff5d199c4738c6045c3a965eb2e7526a83d8290 100644 (file)
@@ -1,8 +1,7 @@
 // Check that "priv" is not in the follow set of :vis.
 
-// { dg-error "token .priv. is not allowed after .vis. fragment" "#359" { target *-*-* } .+4 }
-// { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .+3 }
-// { dg-error "failed to parse item in crate" "" { target *-*-* } .+2 }
+// { dg-error "token .priv. is not allowed after .vis. fragment" "#359" { target *-*-* } .+3 }
+// { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .+2 }
 macro_rules! my_mac {
     ($v:vis priv) => {
         $v struct Foo(i32);
index 1ce73848d0a38569e71cb6d466625d3700e8dcab..68e2120a2f9b14bc7a0396050817bdbdb65c8c6c 100644 (file)
@@ -1,4 +1,3 @@
 default fn f() {
     // { dg-error ".default. is only allowed on items within .impl. blocks" "" { target *-*-* } .-1 }
-    // { dg-error "failed to parse item in crate" "" { target *-*-* } .-2 }
 }
index c112e4048ed076803c04e0206e3121f7a92206c3..1d52abbd648845048ecf44536bbc58dc5545b7a0 100644 (file)
@@ -1,3 +1,2 @@
 pub(in crate::) struct S;
 // { dg-error "expecting ... but .::. found" "" { target *-*-* } .-1 }
-// { dg-error "failed to parse item in crate" "" { target *-*-* } .-2 }
index 94c49c381b25e2d073d403af236d66f68f9329a9..1205f1936a5edcb67efb23a710c93f16a0b1fb95 100644 (file)
@@ -5,5 +5,3 @@ mod A {
 use A{B};
 // { dg-error "unexpected token" "" { target *-*-* } .-1 }
 // { dg-error "could not parse use tree" "" { target *-*-* } .-2 }
-// { dg-error "failed to parse item in crate" "" { target *-*-* } 10 }
-// ^^^ TODO: should the above error happen at line 10?
index b71b6e5adedce29289c907bd984c95d7439d6031..6082118d4e42ddcaa66749cf7a758cd6ac33be9b 100644 (file)
@@ -3,4 +3,3 @@ const X: &'static u8 = br#"12
 
 BREAK
 // { dg-error "unrecognised token" "" { target *-*-* } .-1 }
-// { dg-error "failed to parse item" "" { target *-*-* } .-2 }
index 26331eafa44a7451e4400ffd23a8b6292fad39e0..9e32790427db0022cd5b445ea87bb1e686fec1de 100644 (file)
@@ -3,4 +3,3 @@ const X: &'static str = r#"12
 
 BREAK
 // { dg-error "unrecognised token" "" { target *-*-* } .-1 }
-// { dg-error "failed to parse item" "" { target *-*-* } .-2 }
index 014fe1b63d84c36960557bf4acfcd543ed63e962..51e339eaa5e298a9ae6ac66e9c382e52734677e2 100644 (file)
@@ -4,5 +4,4 @@ impl MyStruct {
     pub fn do_something(*const self) {}
     // { dg-error "cannot pass .self. by raw pointer" "" { target *-*-* } .-1 }
     // { dg-error "failed to parse inherent impl item in inherent impl" "" { target *-*-* } .-2 }
-    // { dg-error "failed to parse item in crate" "" { target *-*-* } .-3 }
 }
index 2a127b7dcb2c570348456e24cd803d97a606de2b..c986ef6e5118fafa8a5995bcf9e515e7f1935c9e 100644 (file)
@@ -4,5 +4,4 @@ impl MyStruct {
     pub fn do_something(*mut self) {}
     // { dg-error "cannot pass .self. by raw pointer" "" { target *-*-* } .-1 }
     // { dg-error "failed to parse inherent impl item in inherent impl" "" { target *-*-* } .-2 }
-    // { dg-error "failed to parse item in crate" "" { target *-*-* } .-3 }
 }
index fd7ff6ce5d2fbc0c7a30373a9c18c965c4be4946..2b3128cd853b475d05473a70c142b730137ff4e9 100644 (file)
@@ -4,5 +4,4 @@ impl MyStruct {
     pub fn do_something(*self) {}
     // { dg-error "cannot pass .self. by raw pointer" "" { target *-*-* } .-1 }
     // { dg-error "failed to parse inherent impl item in inherent impl" "" { target *-*-* } .-2 }
-    // { dg-error "failed to parse item in crate" "" { target *-*-* } .-3 }
 }
index b3b5751c93227f4c933f3b22b7618f3d9bc89531..fdd287679d18b2746c8d10d8303bfc7bb25baa5a 100644 (file)
@@ -1,5 +1,5 @@
 static x = 3; // { dg-error "expecting ':' but '=' found" }
 
-fn main() {// { dg-error "failed to parse item in crate" }
+fn main() {
     let y = x +1;
 }
index 2389fa52bfd1d83dedb1e6c9210b60b0911f7dc8..8a9b03163efda48934dea3e8e5ebd5d1a77acf70 100644 (file)
@@ -4,7 +4,6 @@ impl I {
     fn () {
         // { dg-error {expecting 'identifier' but '\(' found} "" { target *-*-* } .-1 }
         // { dg-error {failed to parse inherent impl item in inherent impl} "" { target *-*-* } .-2 }
-        // { dg-error {failed to parse item in crate} "" { target *-*-* } .-3 }
     }
 }