-8fbd92d0b95d847c68948d8dbbfaccb470db4f92
+481db40311cdd241ae4d33f34f2f75732e44d8e8
layout::{LayoutOf, TyAndLayout},
List, TyCtxt,
};
-use rustc_span::{def_id::CrateNum, Symbol};
+use rustc_span::{def_id::CrateNum, sym, Symbol};
use rustc_target::abi::{Align, FieldsShape, Size, Variants};
use rustc_target::spec::abi::Abi;
this.alloc_mark_immutable(mplace.ptr.into_pointer_or_addr().unwrap().provenance.alloc_id)
.unwrap();
}
+
+ fn item_link_name(&self, def_id: DefId) -> Symbol {
+ let tcx = self.eval_context_ref().tcx;
+ match tcx.get_attrs(def_id, sym::link_name).filter_map(|a| a.value_str()).next() {
+ Some(name) => name,
+ None => tcx.item_name(def_id),
+ }
+ }
}
/// Check that the number of args is what we expect.
},
};
use rustc_span::def_id::{CrateNum, DefId};
-use rustc_span::symbol::{sym, Symbol};
+use rustc_span::Symbol;
use rustc_target::abi::Size;
use rustc_target::spec::abi::Abi;
ecx: &MiriEvalContext<'mir, 'tcx>,
def_id: DefId,
) -> InterpResult<'tcx, Pointer<Tag>> {
- let attrs = ecx.tcx.get_attrs(def_id);
- let link_name = match ecx.tcx.sess.first_attr_value_str_by_name(attrs, sym::link_name) {
- Some(name) => name,
- None => ecx.tcx.item_name(def_id),
- };
+ let link_name = ecx.item_link_name(def_id);
if let Some(&ptr) = ecx.machine.extern_statics.get(&link_name) {
Ok(ptr)
} else {
use rustc_middle::mir;
use rustc_middle::ty;
use rustc_session::config::CrateType;
-use rustc_span::{symbol::sym, Symbol};
+use rustc_span::Symbol;
use rustc_target::{
abi::{Align, Size},
spec::abi::Abi,
unwind: StackPopUnwind,
) -> InterpResult<'tcx, Option<(&'mir mir::Body<'tcx>, ty::Instance<'tcx>)>> {
let this = self.eval_context_mut();
- let attrs = this.tcx.get_attrs(def_id);
- let link_name = this
- .tcx
- .sess
- .first_attr_value_str_by_name(attrs, sym::link_name)
- .unwrap_or_else(|| this.tcx.item_name(def_id));
+ let link_name = this.item_link_name(def_id);
let tcx = this.tcx.tcx;
// First: functions that diverge.