mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-28 11:07:42 +00:00
Share the llvm type computation between both arms of a condition
This commit is contained in:
parent
0a2475c50a
commit
dd1e27120d
@ -17,7 +17,7 @@ use rustc_middle::mir::interpret::{
|
|||||||
};
|
};
|
||||||
use rustc_middle::mir::mono::MonoItem;
|
use rustc_middle::mir::mono::MonoItem;
|
||||||
use rustc_middle::ty::layout::LayoutOf;
|
use rustc_middle::ty::layout::LayoutOf;
|
||||||
use rustc_middle::ty::{self, Instance, Ty};
|
use rustc_middle::ty::{self, Instance};
|
||||||
use rustc_middle::{bug, span_bug};
|
use rustc_middle::{bug, span_bug};
|
||||||
use rustc_session::config::Lto;
|
use rustc_session::config::Lto;
|
||||||
use rustc_target::abi::{
|
use rustc_target::abi::{
|
||||||
@ -147,11 +147,10 @@ fn set_global_alignment<'ll>(cx: &CodegenCx<'ll, '_>, gv: &'ll Value, mut align:
|
|||||||
fn check_and_apply_linkage<'ll, 'tcx>(
|
fn check_and_apply_linkage<'ll, 'tcx>(
|
||||||
cx: &CodegenCx<'ll, 'tcx>,
|
cx: &CodegenCx<'ll, 'tcx>,
|
||||||
attrs: &CodegenFnAttrs,
|
attrs: &CodegenFnAttrs,
|
||||||
ty: Ty<'tcx>,
|
llty: &'ll Type,
|
||||||
sym: &str,
|
sym: &str,
|
||||||
def_id: DefId,
|
def_id: DefId,
|
||||||
) -> &'ll Value {
|
) -> &'ll Value {
|
||||||
let llty = cx.layout_of(ty).llvm_type(cx);
|
|
||||||
if let Some(linkage) = attrs.import_linkage {
|
if let Some(linkage) = attrs.import_linkage {
|
||||||
debug!("get_static: sym={} linkage={:?}", sym, linkage);
|
debug!("get_static: sym={} linkage={:?}", sym, linkage);
|
||||||
|
|
||||||
@ -245,9 +244,9 @@ impl<'ll> CodegenCx<'ll, '_> {
|
|||||||
let fn_attrs = self.tcx.codegen_fn_attrs(def_id);
|
let fn_attrs = self.tcx.codegen_fn_attrs(def_id);
|
||||||
|
|
||||||
debug!("get_static: sym={} instance={:?} fn_attrs={:?}", sym, instance, fn_attrs);
|
debug!("get_static: sym={} instance={:?} fn_attrs={:?}", sym, instance, fn_attrs);
|
||||||
|
let llty = self.layout_of(ty).llvm_type(self);
|
||||||
|
|
||||||
let g = if def_id.is_local() && !self.tcx.is_foreign_item(def_id) {
|
let g = if def_id.is_local() && !self.tcx.is_foreign_item(def_id) {
|
||||||
let llty = self.layout_of(ty).llvm_type(self);
|
|
||||||
if let Some(g) = self.get_declared_value(sym) {
|
if let Some(g) = self.get_declared_value(sym) {
|
||||||
if self.val_ty(g) != self.type_ptr() {
|
if self.val_ty(g) != self.type_ptr() {
|
||||||
span_bug!(self.tcx.def_span(def_id), "Conflicting types for static");
|
span_bug!(self.tcx.def_span(def_id), "Conflicting types for static");
|
||||||
@ -264,7 +263,7 @@ impl<'ll> CodegenCx<'ll, '_> {
|
|||||||
|
|
||||||
g
|
g
|
||||||
} else {
|
} else {
|
||||||
check_and_apply_linkage(self, fn_attrs, ty, sym, def_id)
|
check_and_apply_linkage(self, fn_attrs, llty, sym, def_id)
|
||||||
};
|
};
|
||||||
|
|
||||||
// Thread-local statics in some other crate need to *always* be linked
|
// Thread-local statics in some other crate need to *always* be linked
|
||||||
|
Loading…
Reference in New Issue
Block a user