Skip to content

Commit

Permalink
review comments
Browse files Browse the repository at this point in the history
  • Loading branch information
estebank committed Jan 17, 2020
1 parent 10a9ea4 commit 03240e1
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 17 deletions.
9 changes: 5 additions & 4 deletions src/librustc_errors/emitter.rs
Expand Up @@ -1475,7 +1475,11 @@ impl EmitterWriter {
Some(ref sm) => sm,
None => return Ok(()),
};
if !suggestion.has_valid_spans(&**sm) {

// Render the replacements for each suggestion
let suggestions = suggestion.splice_lines(&**sm);

if suggestions.is_empty() {
// Suggestions coming from macros can have malformed spans. This is a heavy handed
// approach to avoid ICEs by ignoring the suggestion outright.
return Ok(());
Expand All @@ -1497,9 +1501,6 @@ impl EmitterWriter {
Some(Style::HeaderMsg),
);

// Render the replacements for each suggestion
let suggestions = suggestion.splice_lines(&**sm);

let mut row_num = 2;
let mut notice_capitalization = false;
for (complete, parts, only_capitalization) in suggestions.iter().take(MAX_SUGGESTIONS) {
Expand Down
21 changes: 9 additions & 12 deletions src/librustc_errors/lib.rs
Expand Up @@ -144,18 +144,6 @@ pub struct SubstitutionPart {
}

impl CodeSuggestion {
/// Suggestions coming from macros can have malformed spans. This is a heavy handed approach
/// to avoid ICEs by ignoring the suggestion outright.
pub fn has_valid_spans(&self, cm: &SourceMap) -> bool {
!self.substitutions.iter().any(|subst| {
let invalid = subst.parts.iter().any(|item| cm.is_valid_span(item.span).is_err());
if invalid {
debug!("malformed span in suggestion: {:?}", subst);
}
invalid
})
}

/// Returns the assembled code suggestions, whether they should be shown with an underline
/// and whether the substitution only differs in capitalization.
pub fn splice_lines(&self, cm: &SourceMap) -> Vec<(String, Vec<SubstitutionPart>, bool)> {
Expand Down Expand Up @@ -187,6 +175,15 @@ impl CodeSuggestion {

self.substitutions
.iter()
.filter(|subst| {
// Suggestions coming from macros can have malformed spans. This is a heavy
// handed approach to avoid ICEs by ignoring the suggestion outright.
let invalid = subst.parts.iter().any(|item| cm.is_valid_span(item.span).is_err());
if invalid {
debug!("splice_lines: suggestion contains an invalid span: {:?}", subst);
}
!invalid
})
.cloned()
.map(|mut substitution| {
// Assumption: all spans are in the same file, and all spans
Expand Down
2 changes: 1 addition & 1 deletion src/test/ui/consts/miri_unleashed/mutable_const2.stderr
Expand Up @@ -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:359:17
thread 'rustc' panicked at 'no errors encountered even though `delay_span_bug` issued', src/librustc_errors/lib.rs:356:17
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

error: internal compiler error: unexpected panic
Expand Down

0 comments on commit 03240e1

Please sign in to comment.