Forbid implicit nested statics in thread local statics
This commit is contained in:
parent
6c5c48e880
commit
64b75f736d
5 changed files with 29 additions and 19 deletions
|
@ -25,6 +25,13 @@ pub(crate) struct DanglingPtrInFinal {
|
|||
pub kind: InternKind,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(const_eval_nested_static_in_thread_local)]
|
||||
pub(crate) struct NestedStaticInThreadLocal {
|
||||
#[primary_span]
|
||||
pub span: Span,
|
||||
}
|
||||
|
||||
#[derive(LintDiagnostic)]
|
||||
#[diag(const_eval_mutable_ptr_in_final)]
|
||||
pub(crate) struct MutablePtrInFinal {
|
||||
|
|
|
@ -28,7 +28,7 @@ use rustc_span::sym;
|
|||
|
||||
use super::{AllocId, Allocation, InterpCx, MPlaceTy, Machine, MemoryKind, PlaceTy};
|
||||
use crate::const_eval;
|
||||
use crate::errors::{DanglingPtrInFinal, MutablePtrInFinal};
|
||||
use crate::errors::{DanglingPtrInFinal, MutablePtrInFinal, NestedStaticInThreadLocal};
|
||||
|
||||
pub trait CompileTimeMachine<'mir, 'tcx: 'mir, T> = Machine<
|
||||
'mir,
|
||||
|
@ -108,6 +108,10 @@ fn intern_as_new_static<'tcx>(
|
|||
);
|
||||
tcx.set_nested_alloc_id_static(alloc_id, feed.def_id());
|
||||
|
||||
if tcx.is_thread_local_static(static_id.into()) {
|
||||
tcx.dcx().emit_err(NestedStaticInThreadLocal { span: tcx.def_span(static_id) });
|
||||
}
|
||||
|
||||
// These do not inherit the codegen attrs of the parent static allocation, since
|
||||
// it doesn't make sense for them to inherit their `#[no_mangle]` and `#[link_name = ..]`
|
||||
// and the like.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue