diff --git a/src/librustc/middle/dead.rs b/src/librustc/middle/dead.rs
index abd52624c30d..a0cd231bb704 100644
--- a/src/librustc/middle/dead.rs
+++ b/src/librustc/middle/dead.rs
@@ -408,7 +408,7 @@ fn create_and_seed_worklist<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
}
// Seed entry point
- if let Some((id, _)) = *tcx.sess.entry_fn.borrow() {
+ if let Some((id, _, _)) = *tcx.sess.entry_fn.borrow() {
worklist.push(id);
}
diff --git a/src/librustc/middle/entry.rs b/src/librustc/middle/entry.rs
index 37d79f408f3f..ebc796466629 100644
--- a/src/librustc/middle/entry.rs
+++ b/src/librustc/middle/entry.rs
@@ -63,12 +63,13 @@ pub fn find_entry_point(session: &Session,
});
if !any_exe {
// No need to find a main function
+ session.entry_fn.set(None);
return
}
// If the user wants no main function at all, then stop here.
if attr::contains_name(&hir_map.krate().attrs, "no_main") {
- session.entry_type.set(Some(config::EntryNone));
+ session.entry_fn.set(None);
return
}
@@ -153,17 +154,15 @@ fn find_item(item: &Item, ctxt: &mut EntryContext, at_root: bool) {
}
fn configure_main(this: &mut EntryContext, crate_name: &str) {
- if this.start_fn.is_some() {
- *this.session.entry_fn.borrow_mut() = this.start_fn;
- this.session.entry_type.set(Some(config::EntryStart));
- } else if this.attr_main_fn.is_some() {
- *this.session.entry_fn.borrow_mut() = this.attr_main_fn;
- this.session.entry_type.set(Some(config::EntryMain));
- } else if this.main_fn.is_some() {
- *this.session.entry_fn.borrow_mut() = this.main_fn;
- this.session.entry_type.set(Some(config::EntryMain));
+ if let Some((node_id, span)) = this.start_fn {
+ this.session.entry_fn.set(Some((node_id, span, config::EntryStart)));
+ } else if let Some((node_id, span)) = this.attr_main_fn {
+ this.session.entry_fn.set(Some((node_id, span, config::EntryMain)));
+ } else if let Some((node_id, span)) = this.main_fn {
+ this.session.entry_fn.set(Some((node_id, span, config::EntryMain)));
} else {
// No main function
+ this.session.entry_fn.set(None);
let mut err = struct_err!(this.session, E0601,
"`main` function not found in crate `{}`", crate_name);
if !this.non_main_fns.is_empty() {
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs
index a07370e1e42a..afe4442799b2 100644
--- a/src/librustc/session/config.rs
+++ b/src/librustc/session/config.rs
@@ -614,13 +614,11 @@ impl Options {
// The type of entry function, so
// users can have their own entry
-// functions that don't start a
-// scheduler
+// functions
#[derive(Copy, Clone, PartialEq)]
pub enum EntryFnType {
EntryMain,
EntryStart,
- EntryNone,
}
#[derive(Copy, PartialEq, PartialOrd, Clone, Ord, Eq, Hash, Debug)]
diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs
index c084c8684817..97b73fac1a42 100644
--- a/src/librustc/session/mod.rs
+++ b/src/librustc/session/mod.rs
@@ -70,8 +70,7 @@ pub struct Session {
pub opts: config::Options,
pub parse_sess: ParseSess,
/// For a library crate, this is always none
- pub entry_fn: RefCell