]> git.lizzy.rs Git - rust.git/commitdiff
rustc_errors: Use ensure_source_file_source_present where necessary.
authorAna-Maria Mihalache <mihalacheana.maria@yahoo.com>
Thu, 5 Mar 2020 15:31:11 +0000 (15:31 +0000)
committerMazdak Farrokhzad <twingoow@gmail.com>
Tue, 10 Mar 2020 06:26:27 +0000 (07:26 +0100)
src/librustc_errors/emitter.rs
src/librustc_errors/json.rs
src/librustc_errors/lib.rs
src/test/ui/consts/miri_unleashed/mutable_const2.stderr
src/test/ui/editions/edition-keywords-2015-2018-expansion.stderr
src/test/ui/editions/edition-keywords-2018-2018-expansion.stderr

index b38ea6b42419173b4c770bd0145cd5a7c8b1a161..03f83e616365b19c1c5e433d864d12f51bfceab9 100644 (file)
@@ -422,9 +422,11 @@ fn fix_multispans_in_extern_macros(
         span: &mut MultiSpan,
         children: &mut Vec<SubDiagnostic>,
     ) {
-        for span in iter::once(span).chain(children.iter_mut().map(|child| &mut child.span)) {
+        debug!("fix_multispans_in_extern_macros: before: span={:?} children={:?}", span, children);
+        for span in iter::once(&mut *span).chain(children.iter_mut().map(|child| &mut child.span)) {
             self.fix_multispan_in_extern_macros(source_map, span);
         }
+        debug!("fix_multispans_in_extern_macros: after: span={:?} children={:?}", span, children);
     }
 
     // This "fixes" MultiSpans that contain `Span`s pointing to locations inside of external macros.
@@ -472,6 +474,7 @@ fn source_map(&self) -> Option<&Lrc<SourceMap>> {
     fn emit_diagnostic(&mut self, diag: &Diagnostic) {
         let mut children = diag.children.clone();
         let (mut primary_span, suggestions) = self.primary_span_formatted(&diag);
+        debug!("emit_diagnostic: suggestions={:?}", suggestions);
 
         self.fix_multispans_in_extern_macros_and_render_macro_backtrace(
             &self.sm,
@@ -1533,6 +1536,7 @@ fn emit_suggestion_default(
 
         // Render the replacements for each suggestion
         let suggestions = suggestion.splice_lines(&**sm);
+        debug!("emit_suggestion_default: suggestions={:?}", suggestions);
 
         if suggestions.is_empty() {
             // Suggestions coming from macros can have malformed spans. This is a heavy handed
index 0767b8dda9b8e3ac74c384bef19b233266dbf61c..1382825922b0edff9bc5526337fc70d5c5ec4bfd 100644 (file)
@@ -394,6 +394,11 @@ fn from_span(span: Span, je: &JsonEmitter) -> Vec<DiagnosticSpanLine> {
         je.sm
             .span_to_lines(span)
             .map(|lines| {
+                // We can't get any lines if the source is unavailable.
+                if !je.sm.ensure_source_file_source_present(lines.file.clone()) {
+                    return vec![];
+                }
+
                 let sf = &*lines.file;
                 lines
                     .lines
index f0e388a597b408ff554449d657ecc0c20e70bbb9..bed26c3736b83978dd485f1796f26a9bccef00d2 100644 (file)
@@ -196,6 +196,11 @@ fn push_trailing(
                 let lines = sm.span_to_lines(bounding_span).ok()?;
                 assert!(!lines.lines.is_empty());
 
+                // We can't splice anything if the source is unavailable.
+                if !sm.ensure_source_file_source_present(lines.file.clone()) {
+                    return None;
+                }
+
                 // To build up the result, we do this for each span:
                 // - push the line segment trailing the previous span
                 //   (at the beginning a "phantom" span pointing at the start of the line)
index 3eb8e0ec182881c4cbaace481293ae85f1a5a82b..dda9ddf1f487f3faf715b326f96b50d0a0712f9f 100644 (file)
@@ -10,7 +10,7 @@ error: internal compiler error: mutable allocation in constant
 LL | const MUTABLE_BEHIND_RAW: *mut i32 = &UnsafeCell::new(42) as *const _ as *mut _;
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-thread 'rustc' panicked at 'no errors encountered even though `delay_span_bug` issued', src/librustc_errors/lib.rs:355:17
+thread 'rustc' panicked at 'no errors encountered even though `delay_span_bug` issued', src/librustc_errors/lib.rs:360:17
 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
 
 error: internal compiler error: unexpected panic
index 46db5dbc8b3c51fa31d93c6c47fccb49f87ec7b5..88a1f5dc6736d96efb6bebf20eb43fdd57fcd467 100644 (file)
@@ -7,8 +7,8 @@ LL |     produces_async! {}
    = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
 help: you can escape reserved keywords to use them as identifiers
    |
-LL | r#async
-   |
+LL |     () => (pub fn r#async() {})
+   |                   ^^^^^^^
 
 error: aborting due to previous error
 
index 2de383d0bcaed2ef6abc84abfcb0e019052639fa..5eaa1d03a4a5f491dfe2d5bd3b5f8089f61d1d34 100644 (file)
@@ -7,8 +7,8 @@ LL |     produces_async! {}
    = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
 help: you can escape reserved keywords to use them as identifiers
    |
-LL | r#async
-   |
+LL |     () => (pub fn r#async() {})
+   |                   ^^^^^^^
 
 error: aborting due to previous error