use crate::value::Value;
use libc::c_uint;
use log::debug;
-use rustc::hir::def_id::DefId;
-use rustc::hir::Node;
+use rustc::middle::codegen_fn_attrs::{CodegenFnAttrFlags, CodegenFnAttrs};
use rustc::mir::interpret::{read_target_uint, Allocation, ConstValue, ErrorHandled, Pointer};
use rustc::mir::mono::MonoItem;
+use rustc::ty::layout::{self, Align, LayoutOf, Size};
use rustc::ty::{self, Instance, Ty};
use rustc::{bug, span_bug};
use rustc_codegen_ssa::traits::*;
+use rustc_hir as hir;
+use rustc_hir::def_id::DefId;
+use rustc_hir::Node;
+use rustc_span::symbol::{sym, Symbol};
use rustc_span::Span;
use rustc_target::abi::HasDataLayout;
-use syntax::symbol::{sym, Symbol};
-
-use rustc::ty::layout::{self, Align, LayoutOf, Size};
-
-use rustc::hir::{self, CodegenFnAttrFlags, CodegenFnAttrs};
use std::ffi::CStr;
cx: &CodegenCx<'ll, 'tcx>,
def_id: DefId,
) -> Result<(&'ll Value, &'tcx Allocation), ErrorHandled> {
- let static_ = cx.tcx.const_eval_poly(def_id)?;
-
- let alloc = match static_.val {
- ty::ConstKind::Value(ConstValue::ByRef { alloc, offset }) if offset.bytes() == 0 => alloc,
- _ => bug!("static const eval returned {:#?}", static_),
+ let alloc = match cx.tcx.const_eval_poly(def_id)? {
+ ConstValue::ByRef { alloc, offset } if offset.bytes() == 0 => alloc,
+ val => bug!("static const eval returned {:#?}", val),
};
Ok((const_alloc_to_llvm(cx, alloc), alloc))
}
def_id
);
- let ty = instance.ty(self.tcx);
+ let ty = instance.monomorphic_ty(self.tcx);
let sym = self.tcx.symbol_name(instance).name;
debug!("get_static: sym={} instance={:?}", sym, instance);
};
let instance = Instance::mono(self.tcx, def_id);
- let ty = instance.ty(self.tcx);
+ let ty = instance.monomorphic_ty(self.tcx);
let llty = self.layout_of(ty).llvm_type(self);
let g = if val_llty == llty {
g