]> git.lizzy.rs Git - rust.git/commitdiff
don't issue "expected statement after outer attr." after inner attr.
authorZack M. Davis <code@zackmdavis.net>
Mon, 16 Oct 2017 02:02:45 +0000 (19:02 -0700)
committerZack M. Davis <code@zackmdavis.net>
Mon, 16 Oct 2017 02:41:12 +0000 (19:41 -0700)
While an inner attribute here is in fact erroneous, that error ("inner
attribute is not permitted in this context") successfully gets set earlier;
this further admonition is nonsensical.

Resolves #45296.

src/libsyntax/parse/parser.rs
src/test/ui/issue-45296.rs [new file with mode: 0644]
src/test/ui/issue-45296.stderr [new file with mode: 0644]

index bd400ef6dd6dab9ecdbb0fd960171bc9c13ec94a..8fd2bad4e44a6e38947f917add4638e4d699fa43 100644 (file)
@@ -4088,11 +4088,11 @@ fn parse_stmt_without_recovery(&mut self,
                     node: StmtKind::Item(i),
                 },
                 None => {
-                    let unused_attrs = |attrs: &[_], s: &mut Self| {
+                    let unused_attrs = |attrs: &[Attribute], s: &mut Self| {
                         if !attrs.is_empty() {
                             if s.prev_token_kind == PrevTokenKind::DocComment {
                                 s.span_fatal_err(s.prev_span, Error::UselessDocComment).emit();
-                            } else {
+                            } else if attrs.iter().any(|a| a.style == AttrStyle::Outer) {
                                 s.span_err(s.span, "expected statement after outer attribute");
                             }
                         }
diff --git a/src/test/ui/issue-45296.rs b/src/test/ui/issue-45296.rs
new file mode 100644 (file)
index 0000000..7a2b4e5
--- /dev/null
@@ -0,0 +1,15 @@
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+fn main() {
+    let unused = ();
+
+    #![allow(unused_variables)]
+}
diff --git a/src/test/ui/issue-45296.stderr b/src/test/ui/issue-45296.stderr
new file mode 100644 (file)
index 0000000..7bfcac9
--- /dev/null
@@ -0,0 +1,11 @@
+error: an inner attribute is not permitted in this context
+  --> $DIR/issue-45296.rs:14:7
+   |
+14 |     #![allow(unused_variables)]
+   |       ^
+   |
+   = note: inner attributes and doc comments, like `#![no_std]` or `//! My crate`, annotate the item enclosing them, and are usually found at the beginning of source files. Outer attributes and doc comments, like `#[test]` and
+                                              `/// My function`, annotate the item following them.
+
+error: aborting due to previous error
+