Rollup merge of #59903 - estebank:after-main, r=oli-obk
Continue evaluating after missing main
This commit is contained in:
commit
bdf2473289
4 changed files with 55 additions and 3 deletions
|
@ -163,7 +163,6 @@ fn configure_main(
|
||||||
err.span_note(span, "here is a function named 'main'");
|
err.span_note(span, "here is a function named 'main'");
|
||||||
}
|
}
|
||||||
err.emit();
|
err.emit();
|
||||||
tcx.sess.abort_if_errors();
|
|
||||||
} else {
|
} else {
|
||||||
if let Some(ref filename) = tcx.sess.local_crate_source_file {
|
if let Some(ref filename) = tcx.sess.local_crate_source_file {
|
||||||
err.note(&format!("consider adding a `main` function to `{}`", filename.display()));
|
err.note(&format!("consider adding a `main` function to `{}`", filename.display()));
|
||||||
|
|
|
@ -886,10 +886,11 @@ fn analysis<'tcx>(
|
||||||
assert_eq!(cnum, LOCAL_CRATE);
|
assert_eq!(cnum, LOCAL_CRATE);
|
||||||
|
|
||||||
let sess = tcx.sess;
|
let sess = tcx.sess;
|
||||||
|
let mut entry_point = None;
|
||||||
|
|
||||||
time(sess, "misc checking 1", || {
|
time(sess, "misc checking 1", || {
|
||||||
parallel!({
|
parallel!({
|
||||||
time(sess, "looking for entry point", || {
|
entry_point = time(sess, "looking for entry point", || {
|
||||||
middle::entry::find_entry_point(tcx)
|
middle::entry::find_entry_point(tcx)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -937,7 +938,10 @@ fn analysis<'tcx>(
|
||||||
|
|
||||||
// Abort so we don't try to construct MIR with liveness errors.
|
// Abort so we don't try to construct MIR with liveness errors.
|
||||||
// We also won't want to continue with errors from rvalue promotion
|
// 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", || {
|
time(sess, "borrow checking", || {
|
||||||
if tcx.use_ast_borrowck() {
|
if tcx.use_ast_borrowck() {
|
||||||
|
|
32
src/test/ui/continue-after-missing-main.rs
Normal file
32
src/test/ui/continue-after-missing-main.rs
Normal file
|
@ -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
src/test/ui/continue-after-missing-main.stderr
Normal file
17
src/test/ui/continue-after-missing-main.stderr
Normal file
|
@ -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`.
|
Loading…
Reference in a new issue