let folded = fold::noop_fold_item(i, self).expect_one("noop did something");
self.depth -= 1;
- // Remove any #[main] from the AST so it doesn't clash with
- // the one we're going to add, but mark it as
+ // Remove any #[main] or #[start] from the AST so it doesn't
+ // clash with the one we're going to add, but mark it as
// #[allow(dead_code)] to avoid printing warnings.
let folded = match entry::entry_point_type(&*folded, self.depth) {
EntryPointType::MainNamed |
ast::Item {
id: id,
ident: ident,
- attrs: attrs.into_iter().filter_map(|attr| {
- if !attr.check_name("main") {
- Some(attr)
- } else {
- None
- }
- })
+ attrs: attrs.into_iter()
+ .filter(|attr| {
+ !attr.check_name("main") && !attr.check_name("start")
+ })
.chain(iter::once(allow_dead_code))
.collect(),
node: node,
--- /dev/null
+// Copyright 2015 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.
+
+// compile-flags: --test
+
+#![feature(start)]
+
+#[start]
+fn start(_: isize, _: *const *const u8) -> isize { panic!(); }