Don't inherit codegen attrs from parent static
This commit is contained in:
parent
66de611196
commit
4ff8a9bd6b
2 changed files with 19 additions and 3 deletions
|
@ -18,6 +18,7 @@ use rustc_ast::Mutability;
|
||||||
use rustc_data_structures::fx::{FxHashSet, FxIndexMap};
|
use rustc_data_structures::fx::{FxHashSet, FxIndexMap};
|
||||||
use rustc_errors::ErrorGuaranteed;
|
use rustc_errors::ErrorGuaranteed;
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
|
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrs;
|
||||||
use rustc_middle::mir::interpret::{ConstAllocation, CtfeProvenance, InterpResult};
|
use rustc_middle::mir::interpret::{ConstAllocation, CtfeProvenance, InterpResult};
|
||||||
use rustc_middle::query::TyCtxtAt;
|
use rustc_middle::query::TyCtxtAt;
|
||||||
use rustc_middle::ty::layout::TyAndLayout;
|
use rustc_middle::ty::layout::TyAndLayout;
|
||||||
|
@ -106,13 +107,17 @@ fn intern_as_new_static<'tcx>(
|
||||||
DefKind::Static { mutability: alloc.0.mutability, nested: true },
|
DefKind::Static { mutability: alloc.0.mutability, nested: true },
|
||||||
);
|
);
|
||||||
tcx.set_nested_alloc_id_static(alloc_id, feed.def_id());
|
tcx.set_nested_alloc_id_static(alloc_id, feed.def_id());
|
||||||
feed.codegen_fn_attrs(tcx.codegen_fn_attrs(static_id).clone());
|
|
||||||
|
// 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.
|
||||||
|
feed.codegen_fn_attrs(CodegenFnAttrs::new());
|
||||||
|
|
||||||
feed.eval_static_initializer(Ok(alloc));
|
feed.eval_static_initializer(Ok(alloc));
|
||||||
feed.generics_of(tcx.generics_of(static_id).clone());
|
feed.generics_of(tcx.generics_of(static_id).clone());
|
||||||
feed.def_ident_span(tcx.def_ident_span(static_id));
|
feed.def_ident_span(tcx.def_ident_span(static_id));
|
||||||
feed.explicit_predicates_of(tcx.explicit_predicates_of(static_id));
|
feed.explicit_predicates_of(tcx.explicit_predicates_of(static_id));
|
||||||
|
feed.feed_hir();
|
||||||
feed.feed_hir()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// How a constant value should be interned.
|
/// How a constant value should be interned.
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
//@ build-pass
|
||||||
|
|
||||||
|
// Make sure that the nested static allocation for `FOO` doesn't inherit `no_mangle`.
|
||||||
|
#[no_mangle]
|
||||||
|
pub static mut FOO: &mut [i32] = &mut [42];
|
||||||
|
|
||||||
|
// Make sure that the nested static allocation for `BAR` doesn't inherit `export_name`.
|
||||||
|
#[export_name = "BAR_"]
|
||||||
|
pub static mut BAR: &mut [i32] = &mut [42];
|
||||||
|
|
||||||
|
fn main() {}
|
Loading…
Add table
Add a link
Reference in a new issue