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()));
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)
});
// 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() {
--- /dev/null
+#![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
+}
--- /dev/null
+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`.