use crate::placeholders::{placeholder, PlaceholderExpander};
use crate::proc_macro::collect_derives;
+use rustc_ast_pretty::pprust;
use rustc_attr::{self as attr, is_builtin_attr, HasAttrs};
use rustc_data_structures::sync::Lrc;
use rustc_errors::{Applicability, FatalError, PResult};
use rustc_parse::parser::Parser;
use rustc_parse::validate_attr;
use rustc_parse::DirectoryOwnership;
+use rustc_session::parse::{feature_err, ParseSess};
use rustc_span::source_map::respan;
use rustc_span::symbol::{sym, Symbol};
use rustc_span::{FileName, Span, DUMMY_SP};
use syntax::ast::{self, AttrItem, Block, Ident, LitKind, NodeId, PatKind, Path};
use syntax::ast::{ItemKind, MacArgs, MacStmtStyle, StmtKind};
use syntax::mut_visit::*;
-use syntax::print::pprust;
use syntax::ptr::P;
-use syntax::sess::{feature_err, ParseSess};
use syntax::token;
use syntax::tokenstream::{TokenStream, TokenTree};
use syntax::util::map_in_place::MapInPlace;
krate.attrs = vec![];
krate.module = ast::Mod { inner: orig_mod_span, items: vec![], inline: true };
}
- _ => unreachable!(),
+ Some(ast::Item { span, kind, .. }) => {
+ krate.attrs = vec![];
+ krate.module = ast::Mod { inner: orig_mod_span, items: vec![], inline: true };
+ self.cx.span_err(
+ span,
+ &format!(
+ "expected crate top-level item to be a module after macro expansion, found a {}",
+ kind.descriptive_variant()
+ ),
+ );
+ }
};
self.cx.trace_macros_diag();
krate