Rollup merge of #115353 - Enselic:no-optimized-mir, r=oli-obk
Emit error instead of ICE when optimized MIR is missing Closes #51388
This commit is contained in:
commit
a73c663ec4
@ -14,6 +14,10 @@ monomorphize_large_assignments =
|
|||||||
.label = value moved from here
|
.label = value moved from here
|
||||||
.note = The current maximum size is {$limit}, but it can be customized with the move_size_limit attribute: `#![move_size_limit = "..."]`
|
.note = The current maximum size is {$limit}, but it can be customized with the move_size_limit attribute: `#![move_size_limit = "..."]`
|
||||||
|
|
||||||
|
monomorphize_no_optimized_mir =
|
||||||
|
missing optimized MIR for an item in the crate `{$crate_name}`
|
||||||
|
.note = missing optimized MIR for this item (was the crate `{$crate_name}` compiled with `--emit=metadata`?)
|
||||||
|
|
||||||
monomorphize_recursion_limit =
|
monomorphize_recursion_limit =
|
||||||
reached the recursion limit while instantiating `{$shrunk}`
|
reached the recursion limit while instantiating `{$shrunk}`
|
||||||
.note = `{$def_path_str}` defined here
|
.note = `{$def_path_str}` defined here
|
||||||
|
@ -192,7 +192,8 @@
|
|||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
use crate::errors::{
|
use crate::errors::{
|
||||||
EncounteredErrorWhileInstantiating, LargeAssignmentsLint, RecursionLimit, TypeLengthLimit,
|
EncounteredErrorWhileInstantiating, LargeAssignmentsLint, NoOptimizedMir, RecursionLimit,
|
||||||
|
TypeLengthLimit,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(PartialEq)]
|
#[derive(PartialEq)]
|
||||||
@ -960,7 +961,10 @@ fn should_codegen_locally<'tcx>(tcx: TyCtxt<'tcx>, instance: &Instance<'tcx>) ->
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !tcx.is_mir_available(def_id) {
|
if !tcx.is_mir_available(def_id) {
|
||||||
bug!("no MIR available for {:?}", def_id);
|
tcx.sess.emit_fatal(NoOptimizedMir {
|
||||||
|
span: tcx.def_span(def_id),
|
||||||
|
crate_name: tcx.crate_name(def_id.krate),
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
true
|
true
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
use rustc_errors::ErrorGuaranteed;
|
use rustc_errors::ErrorGuaranteed;
|
||||||
use rustc_errors::IntoDiagnostic;
|
use rustc_errors::IntoDiagnostic;
|
||||||
use rustc_macros::{Diagnostic, LintDiagnostic};
|
use rustc_macros::{Diagnostic, LintDiagnostic};
|
||||||
use rustc_span::Span;
|
use rustc_span::{Span, Symbol};
|
||||||
|
|
||||||
#[derive(Diagnostic)]
|
#[derive(Diagnostic)]
|
||||||
#[diag(monomorphize_recursion_limit)]
|
#[diag(monomorphize_recursion_limit)]
|
||||||
@ -33,6 +33,14 @@ pub struct TypeLengthLimit {
|
|||||||
pub type_length: usize,
|
pub type_length: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Diagnostic)]
|
||||||
|
#[diag(monomorphize_no_optimized_mir)]
|
||||||
|
pub struct NoOptimizedMir {
|
||||||
|
#[note]
|
||||||
|
pub span: Span,
|
||||||
|
pub crate_name: Symbol,
|
||||||
|
}
|
||||||
|
|
||||||
pub struct UnusedGenericParamsHint {
|
pub struct UnusedGenericParamsHint {
|
||||||
pub span: Span,
|
pub span: Span,
|
||||||
pub param_spans: Vec<Span>,
|
pub param_spans: Vec<Span>,
|
||||||
|
@ -6,3 +6,7 @@
|
|||||||
pub struct Foo {
|
pub struct Foo {
|
||||||
pub field: i32,
|
pub field: i32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn missing_optimized_mir() {
|
||||||
|
println!("indeed");
|
||||||
|
}
|
||||||
|
11
tests/ui/rmeta/no_optitimized_mir.rs
Normal file
11
tests/ui/rmeta/no_optitimized_mir.rs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// aux-build:rmeta-meta.rs
|
||||||
|
// no-prefer-dynamic
|
||||||
|
// build-fail
|
||||||
|
|
||||||
|
// Check that we do not ICE when we need optimized MIR but it is missing.
|
||||||
|
|
||||||
|
extern crate rmeta_meta;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
rmeta_meta::missing_optimized_mir();
|
||||||
|
}
|
10
tests/ui/rmeta/no_optitimized_mir.stderr
Normal file
10
tests/ui/rmeta/no_optitimized_mir.stderr
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
error: missing optimized MIR for an item in the crate `rmeta_meta`
|
||||||
|
|
|
||||||
|
note: missing optimized MIR for this item (was the crate `rmeta_meta` compiled with `--emit=metadata`?)
|
||||||
|
--> $DIR/auxiliary/rmeta-meta.rs:10:1
|
||||||
|
|
|
||||||
|
LL | pub fn missing_optimized_mir() {
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
Loading…
Reference in New Issue
Block a user