make error_reported
check for delayed bugs
This commit is contained in:
parent
4e0d0d757e
commit
72d8879c29
8 changed files with 44 additions and 10 deletions
|
@ -1044,13 +1044,24 @@ impl Handler {
|
||||||
}
|
}
|
||||||
pub fn has_errors_or_lint_errors(&self) -> Option<ErrorGuaranteed> {
|
pub fn has_errors_or_lint_errors(&self) -> Option<ErrorGuaranteed> {
|
||||||
if self.inner.borrow().has_errors_or_lint_errors() {
|
if self.inner.borrow().has_errors_or_lint_errors() {
|
||||||
Some(ErrorGuaranteed(()))
|
Some(ErrorGuaranteed::unchecked_claim_error_was_emitted())
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn has_errors_or_delayed_span_bugs(&self) -> bool {
|
pub fn has_errors_or_delayed_span_bugs(&self) -> Option<ErrorGuaranteed> {
|
||||||
self.inner.borrow().has_errors_or_delayed_span_bugs()
|
if self.inner.borrow().has_errors_or_delayed_span_bugs() {
|
||||||
|
Some(ErrorGuaranteed::unchecked_claim_error_was_emitted())
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pub fn is_compilation_going_to_fail(&self) -> Option<ErrorGuaranteed> {
|
||||||
|
if self.inner.borrow().is_compilation_going_to_fail() {
|
||||||
|
Some(ErrorGuaranteed::unchecked_claim_error_was_emitted())
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn print_error_count(&self, registry: &Registry) {
|
pub fn print_error_count(&self, registry: &Registry) {
|
||||||
|
@ -1484,6 +1495,10 @@ impl HandlerInner {
|
||||||
self.err_count() > 0 || self.lint_err_count > 0 || self.warn_count > 0
|
self.err_count() > 0 || self.lint_err_count > 0 || self.warn_count > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn is_compilation_going_to_fail(&self) -> bool {
|
||||||
|
self.has_errors() || self.lint_err_count > 0 || !self.delayed_span_bugs.is_empty()
|
||||||
|
}
|
||||||
|
|
||||||
fn abort_if_errors(&mut self) {
|
fn abort_if_errors(&mut self) {
|
||||||
self.emit_stashed_diagnostics();
|
self.emit_stashed_diagnostics();
|
||||||
|
|
||||||
|
|
|
@ -322,7 +322,7 @@ pub fn finalize_session_directory(sess: &Session, svh: Svh) {
|
||||||
|
|
||||||
let incr_comp_session_dir: PathBuf = sess.incr_comp_session_dir().clone();
|
let incr_comp_session_dir: PathBuf = sess.incr_comp_session_dir().clone();
|
||||||
|
|
||||||
if sess.has_errors_or_delayed_span_bugs() {
|
if let Some(_) = sess.has_errors_or_delayed_span_bugs() {
|
||||||
// If there have been any errors during compilation, we don't want to
|
// If there have been any errors during compilation, we don't want to
|
||||||
// publish this session directory. Rather, we'll just delete it.
|
// publish this session directory. Rather, we'll just delete it.
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ pub fn save_dep_graph(tcx: TyCtxt<'_>) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// This is going to be deleted in finalize_session_directory, so let's not create it
|
// This is going to be deleted in finalize_session_directory, so let's not create it
|
||||||
if sess.has_errors_or_delayed_span_bugs() {
|
if let Some(_) = sess.has_errors_or_delayed_span_bugs() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ pub fn save_work_product_index(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// This is going to be deleted in finalize_session_directory, so let's not create it
|
// This is going to be deleted in finalize_session_directory, so let's not create it
|
||||||
if sess.has_errors_or_delayed_span_bugs() {
|
if let Some(_) = sess.has_errors_or_delayed_span_bugs() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -97,10 +97,10 @@ pub trait TypeVisitable<'tcx>: fmt::Debug + Clone {
|
||||||
}
|
}
|
||||||
fn error_reported(&self) -> Result<(), ErrorGuaranteed> {
|
fn error_reported(&self) -> Result<(), ErrorGuaranteed> {
|
||||||
if self.references_error() {
|
if self.references_error() {
|
||||||
if let Some(reported) = ty::tls::with(|tcx| tcx.sess.has_errors()) {
|
if let Some(reported) = ty::tls::with(|tcx| tcx.sess.is_compilation_going_to_fail()) {
|
||||||
Err(reported)
|
Err(reported)
|
||||||
} else {
|
} else {
|
||||||
bug!("expect tcx.sess.has_errors return true");
|
bug!("expect tcx.sess.is_compilation_going_to_fail return `Some`");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -667,7 +667,7 @@ impl<K: DepKind> DepGraph<K> {
|
||||||
None => {}
|
None => {}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !qcx.dep_context().sess().has_errors_or_delayed_span_bugs() {
|
if let None = qcx.dep_context().sess().has_errors_or_delayed_span_bugs() {
|
||||||
panic!("try_mark_previous_green() - Forcing the DepNode should have set its color")
|
panic!("try_mark_previous_green() - Forcing the DepNode should have set its color")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -538,9 +538,12 @@ impl Session {
|
||||||
pub fn has_errors(&self) -> Option<ErrorGuaranteed> {
|
pub fn has_errors(&self) -> Option<ErrorGuaranteed> {
|
||||||
self.diagnostic().has_errors()
|
self.diagnostic().has_errors()
|
||||||
}
|
}
|
||||||
pub fn has_errors_or_delayed_span_bugs(&self) -> bool {
|
pub fn has_errors_or_delayed_span_bugs(&self) -> Option<ErrorGuaranteed> {
|
||||||
self.diagnostic().has_errors_or_delayed_span_bugs()
|
self.diagnostic().has_errors_or_delayed_span_bugs()
|
||||||
}
|
}
|
||||||
|
pub fn is_compilation_going_to_fail(&self) -> Option<ErrorGuaranteed> {
|
||||||
|
self.diagnostic().is_compilation_going_to_fail()
|
||||||
|
}
|
||||||
pub fn abort_if_errors(&self) {
|
pub fn abort_if_errors(&self) {
|
||||||
self.diagnostic().abort_if_errors();
|
self.diagnostic().abort_if_errors();
|
||||||
}
|
}
|
||||||
|
|
4
src/test/ui/consts/issue-104768.rs
Normal file
4
src/test/ui/consts/issue-104768.rs
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
const A: &_ = 0_u32;
|
||||||
|
//~^ ERROR: the placeholder `_` is not allowed within types on item signatures for constants
|
||||||
|
|
||||||
|
fn main() {}
|
12
src/test/ui/consts/issue-104768.stderr
Normal file
12
src/test/ui/consts/issue-104768.stderr
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
error[E0121]: the placeholder `_` is not allowed within types on item signatures for constants
|
||||||
|
--> $DIR/issue-104768.rs:1:10
|
||||||
|
|
|
||||||
|
LL | const A: &_ = 0_u32;
|
||||||
|
| ^^
|
||||||
|
| |
|
||||||
|
| not allowed in type signatures
|
||||||
|
| help: replace with the correct type: `u32`
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0121`.
|
Loading…
Add table
Add a link
Reference in a new issue