Skip to content

Commit

Permalink
Don't inherit codegen attrs from parent static
Browse files Browse the repository at this point in the history
  • Loading branch information
compiler-errors committed Apr 1, 2024
1 parent 66de611 commit 4ff8a9b
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
11 changes: 8 additions & 3 deletions compiler/rustc_const_eval/src/interpret/intern.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ use rustc_ast::Mutability;
use rustc_data_structures::fx::{FxHashSet, FxIndexMap};
use rustc_errors::ErrorGuaranteed;
use rustc_hir as hir;
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrs;
use rustc_middle::mir::interpret::{ConstAllocation, CtfeProvenance, InterpResult};
use rustc_middle::query::TyCtxtAt;
use rustc_middle::ty::layout::TyAndLayout;
Expand Down Expand Up @@ -106,13 +107,17 @@ fn intern_as_new_static<'tcx>(
DefKind::Static { mutability: alloc.0.mutability, nested: true },
);
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.generics_of(tcx.generics_of(static_id).clone());
feed.def_ident_span(tcx.def_ident_span(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.
Expand Down
11 changes: 11 additions & 0 deletions tests/ui/statics/nested-allocations-dont-inherit-codegen-attrs.rs
Original file line number Diff line number Diff line change
@@ -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() {}

0 comments on commit 4ff8a9b

Please sign in to comment.