Remove #[main] attribute.
This commit is contained in:
parent
9c3b66cff7
commit
fc357039f9
29 changed files with 59 additions and 214 deletions
|
@ -366,16 +366,6 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
|
|||
over time"
|
||||
);
|
||||
}
|
||||
if self.sess.contains_name(&i.attrs[..], sym::main) {
|
||||
gate_feature_post!(
|
||||
&self,
|
||||
main,
|
||||
i.span,
|
||||
"declaration of a non-standard `#[main]` \
|
||||
function may change over time, for now \
|
||||
a top-level `fn main()` is required"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
ast::ItemKind::Struct(..) => {
|
||||
|
|
|
@ -142,7 +142,7 @@ fn entry_point_type(sess: &Session, item: &ast::Item, depth: usize) -> EntryPoin
|
|||
ast::ItemKind::Fn(..) => {
|
||||
if sess.contains_name(&item.attrs, sym::start) {
|
||||
EntryPointType::Start
|
||||
} else if sess.contains_name(&item.attrs, sym::main) {
|
||||
} else if sess.contains_name(&item.attrs, sym::rustc_main) {
|
||||
EntryPointType::MainAttr
|
||||
} else if item.ident.name == sym::main {
|
||||
if depth == 1 {
|
||||
|
@ -187,7 +187,7 @@ impl<'a> MutVisitor for EntryPointCleaner<'a> {
|
|||
let attrs = attrs
|
||||
.into_iter()
|
||||
.filter(|attr| {
|
||||
!self.sess.check_name(attr, sym::main)
|
||||
!self.sess.check_name(attr, sym::rustc_main)
|
||||
&& !self.sess.check_name(attr, sym::start)
|
||||
})
|
||||
.chain(iter::once(allow_dead_code))
|
||||
|
@ -220,7 +220,7 @@ fn generate_test_harness(
|
|||
let expn_id = ext_cx.resolver.expansion_for_ast_pass(
|
||||
DUMMY_SP,
|
||||
AstPass::TestHarness,
|
||||
&[sym::main, sym::test, sym::rustc_attrs],
|
||||
&[sym::test, sym::rustc_attrs],
|
||||
None,
|
||||
);
|
||||
let def_site = DUMMY_SP.with_def_site_ctxt(expn_id);
|
||||
|
@ -247,7 +247,7 @@ fn generate_test_harness(
|
|||
/// By default this expands to
|
||||
///
|
||||
/// ```
|
||||
/// #[main]
|
||||
/// #[rustc_main]
|
||||
/// pub fn main() {
|
||||
/// extern crate test;
|
||||
/// test::test_main_static(&[
|
||||
|
@ -297,8 +297,8 @@ fn mk_main(cx: &mut TestCtxt<'_>) -> P<ast::Item> {
|
|||
let test_extern_stmt =
|
||||
ecx.stmt_item(sp, ecx.item(sp, test_id, vec![], ast::ItemKind::ExternCrate(None)));
|
||||
|
||||
// #[main]
|
||||
let main_meta = ecx.meta_word(sp, sym::main);
|
||||
// #[rustc_main]
|
||||
let main_meta = ecx.meta_word(sp, sym::rustc_main);
|
||||
let main_attr = ecx.attribute(main_meta);
|
||||
|
||||
// pub fn main() { ... }
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
#### Note: this error code is no longer emitted by the compiler.
|
||||
|
||||
More than one function was declared with the `#[main]` attribute.
|
||||
|
||||
Erroneous code example:
|
||||
|
||||
```compile_fail,E0137
|
||||
```compile_fail
|
||||
#![feature(main)]
|
||||
|
||||
#[main]
|
||||
|
@ -16,7 +18,7 @@ This error indicates that the compiler found multiple functions with the
|
|||
`#[main]` attribute. This is an error because there must be a unique entry
|
||||
point into a Rust program. Example:
|
||||
|
||||
```
|
||||
```compile_fail
|
||||
#![feature(main)]
|
||||
|
||||
#[main]
|
||||
|
|
|
@ -134,9 +134,6 @@ declare_features! (
|
|||
/// Allows using the `box $expr` syntax.
|
||||
(active, box_syntax, "1.0.0", Some(49733), None),
|
||||
|
||||
/// Allows using `#[main]` to replace the entrypoint `#[lang = "start"]` calls.
|
||||
(active, main, "1.0.0", Some(29634), None),
|
||||
|
||||
/// Allows using `#[start]` on a function indicating that it is the program entrypoint.
|
||||
(active, start, "1.0.0", Some(29633), None),
|
||||
|
||||
|
|
|
@ -536,6 +536,10 @@ pub const BUILTIN_ATTRIBUTES: &[BuiltinAttribute] = &[
|
|||
rustc_specialization_trait, Normal, template!(Word),
|
||||
"the `#[rustc_specialization_trait]` attribute is used to check specializations"
|
||||
),
|
||||
rustc_attr!(
|
||||
rustc_main, Normal, template!(Word),
|
||||
"the `#[rustc_main]` attribute is used internally to specify test entry point function",
|
||||
),
|
||||
|
||||
// ==========================================================================
|
||||
// Internal attributes, Testing:
|
||||
|
|
|
@ -132,6 +132,8 @@ declare_features! (
|
|||
(removed, link_args, "1.53.0", Some(29596), None,
|
||||
Some("removed in favor of using `-C link-arg=ARG` on command line, \
|
||||
which is available from cargo build scripts with `cargo:rustc-link-arg` now")),
|
||||
/// Allows using `#[main]` to replace the entrypoint `#[lang = "start"]` calls.
|
||||
(removed, main, "1.53.0", Some(29634), None, None),
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// feature-group-end: removed features
|
||||
|
|
|
@ -1489,7 +1489,7 @@ fn check_invalid_crate_level_attr(tcx: TyCtxt<'_>, attrs: &[Attribute]) {
|
|||
sym::path,
|
||||
sym::automatically_derived,
|
||||
sym::start,
|
||||
sym::main,
|
||||
sym::rustc_main,
|
||||
];
|
||||
|
||||
for attr in attrs {
|
||||
|
|
|
@ -84,7 +84,7 @@ fn entry_point_type(ctxt: &EntryContext<'_, '_>, item: &Item<'_>, at_root: bool)
|
|||
let attrs = ctxt.map.attrs(item.hir_id());
|
||||
if ctxt.session.contains_name(attrs, sym::start) {
|
||||
EntryPointType::Start
|
||||
} else if ctxt.session.contains_name(attrs, sym::main) {
|
||||
} else if ctxt.session.contains_name(attrs, sym::rustc_main) {
|
||||
EntryPointType::MainAttr
|
||||
} else if item.ident.name == sym::main {
|
||||
if at_root {
|
||||
|
@ -111,8 +111,8 @@ fn find_item(item: &Item<'_>, ctxt: &mut EntryContext<'_, '_>, at_root: bool) {
|
|||
if let Some(attr) = ctxt.session.find_by_name(attrs, sym::start) {
|
||||
throw_attr_err(&ctxt.session, attr.span, "start");
|
||||
}
|
||||
if let Some(attr) = ctxt.session.find_by_name(attrs, sym::main) {
|
||||
throw_attr_err(&ctxt.session, attr.span, "main");
|
||||
if let Some(attr) = ctxt.session.find_by_name(attrs, sym::rustc_main) {
|
||||
throw_attr_err(&ctxt.session, attr.span, "rustc_main");
|
||||
}
|
||||
}
|
||||
EntryPointType::MainNamed => {
|
||||
|
@ -193,10 +193,7 @@ fn no_main_err(tcx: TyCtxt<'_>, visitor: &EntryContext<'_, '_>) {
|
|||
err.span_note(span, "here is a function named `main`");
|
||||
}
|
||||
err.note("you have one or more functions named `main` not defined at the crate level");
|
||||
err.help(
|
||||
"either move the `main` function definitions or attach the `#[main]` attribute \
|
||||
to one of them",
|
||||
);
|
||||
err.help("consider moving the `main` function definitions");
|
||||
// There were some functions named `main` though. Try to give the user a hint.
|
||||
format!(
|
||||
"the main function must be defined at the crate level{}",
|
||||
|
|
|
@ -1008,6 +1008,7 @@ symbols! {
|
|||
rustc_layout_scalar_valid_range_start,
|
||||
rustc_legacy_const_generics,
|
||||
rustc_macro_transparency,
|
||||
rustc_main,
|
||||
rustc_mir,
|
||||
rustc_nonnull_optimization_guaranteed,
|
||||
rustc_object_lifetime_default,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue