Skip to content

Commit

Permalink
Rollup merge of rust-lang#59903 - estebank:after-main, r=oli-obk
Browse files Browse the repository at this point in the history
Continue evaluating after missing main
  • Loading branch information
Centril authored Apr 16, 2019
2 parents d9422f0 + 13a05a2 commit bdf2473
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 3 deletions.
1 change: 0 additions & 1 deletion src/librustc/middle/entry.rs
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,6 @@ fn configure_main(
err.span_note(span, "here is a function named 'main'");
}
err.emit();
tcx.sess.abort_if_errors();
} else {
if let Some(ref filename) = tcx.sess.local_crate_source_file {
err.note(&format!("consider adding a `main` function to `{}`", filename.display()));
Expand Down
8 changes: 6 additions & 2 deletions src/librustc_interface/passes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -886,10 +886,11 @@ fn analysis<'tcx>(
assert_eq!(cnum, LOCAL_CRATE);

let sess = tcx.sess;
let mut entry_point = None;

time(sess, "misc checking 1", || {
parallel!({
time(sess, "looking for entry point", || {
entry_point = time(sess, "looking for entry point", || {
middle::entry::find_entry_point(tcx)
});

Expand Down Expand Up @@ -937,7 +938,10 @@ fn analysis<'tcx>(

// Abort so we don't try to construct MIR with liveness errors.
// We also won't want to continue with errors from rvalue promotion
tcx.sess.abort_if_errors();
// We only do so if the only error found so far *isn't* a missing `fn main()`
if !(entry_point.is_none() && sess.err_count() == 1) {
tcx.sess.abort_if_errors();
}

time(sess, "borrow checking", || {
if tcx.use_ast_borrowck() {
Expand Down
32 changes: 32 additions & 0 deletions src/test/ui/continue-after-missing-main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#![allow(dead_code)]

// error-pattern:`main` function not found in crate

struct Tableau<'a, MP> {
provider: &'a MP,
}

impl<'adapted_matrix_provider, 'original_data, MP>
Tableau<'adapted_matrix_provider, AdaptedMatrixProvider<'original_data, MP>>
{
fn provider(&self) -> &'adapted_matrix_provider AdaptedMatrixProvider</*'original_data,*/ MP> {
self.provider
}
}

struct AdaptedMatrixProvider<'a, T> {
original_problem: &'a T,
}

impl<'a, T> AdaptedMatrixProvider<'a, T> {
fn clone_with_extra_bound(&self) -> Self {
AdaptedMatrixProvider { original_problem: self.original_problem }
}
}

fn create_and_solve_subproblems<'data_provider, 'original_data, MP>(
tableau: Tableau<'data_provider, AdaptedMatrixProvider<'original_data, MP>>,
) {
let _: AdaptedMatrixProvider<'original_data, MP> = tableau.provider().clone_with_extra_bound();
//~^ ERROR lifetime mismatch
}
17 changes: 17 additions & 0 deletions src/test/ui/continue-after-missing-main.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
error[E0601]: `main` function not found in crate `continue_after_missing_main`
|
= note: consider adding a `main` function to `$DIR/continue-after-missing-main.rs`

error[E0623]: lifetime mismatch
--> $DIR/continue-after-missing-main.rs:30:56
|
LL | tableau: Tableau<'data_provider, AdaptedMatrixProvider<'original_data, MP>>,
| ------------------------------------------------------------------ these two types are declared with different lifetimes...
LL | ) {
LL | let _: AdaptedMatrixProvider<'original_data, MP> = tableau.provider().clone_with_extra_bound();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...but data from `tableau` flows into `tableau` here

error: aborting due to 2 previous errors

Some errors occurred: E0601, E0623.
For more information about an error, try `rustc --explain E0601`.

0 comments on commit bdf2473

Please sign in to comment.