store target.min_global_align as an Align
This commit is contained in:
@@ -1,8 +1,6 @@
|
||||
use std::ops::Range;
|
||||
|
||||
use rustc_abi::{
|
||||
Align, AlignFromBytesError, HasDataLayout, Primitive, Scalar, Size, WrappingRange,
|
||||
};
|
||||
use rustc_abi::{Align, HasDataLayout, Primitive, Scalar, Size, WrappingRange};
|
||||
use rustc_codegen_ssa::common;
|
||||
use rustc_codegen_ssa::traits::*;
|
||||
use rustc_hir::LangItem;
|
||||
@@ -20,9 +18,7 @@ use rustc_middle::{bug, span_bug};
|
||||
use tracing::{debug, instrument, trace};
|
||||
|
||||
use crate::common::{AsCCharPtr, CodegenCx};
|
||||
use crate::errors::{
|
||||
InvalidMinimumAlignmentNotPowerOfTwo, InvalidMinimumAlignmentTooLarge, SymbolAlreadyDefined,
|
||||
};
|
||||
use crate::errors::SymbolAlreadyDefined;
|
||||
use crate::llvm::{self, True};
|
||||
use crate::type_::Type;
|
||||
use crate::type_of::LayoutLlvmExt;
|
||||
@@ -149,22 +145,10 @@ fn set_global_alignment<'ll>(cx: &CodegenCx<'ll, '_>, gv: &'ll Value, mut align:
|
||||
// The target may require greater alignment for globals than the type does.
|
||||
// Note: GCC and Clang also allow `__attribute__((aligned))` on variables,
|
||||
// which can force it to be smaller. Rust doesn't support this yet.
|
||||
if let Some(min) = cx.sess().target.min_global_align {
|
||||
match Align::from_bits(min) {
|
||||
Ok(min) => align = align.max(min),
|
||||
Err(err) => match err {
|
||||
AlignFromBytesError::NotPowerOfTwo(align) => {
|
||||
cx.sess().dcx().emit_err(InvalidMinimumAlignmentNotPowerOfTwo { align });
|
||||
}
|
||||
AlignFromBytesError::TooLarge(align) => {
|
||||
cx.sess().dcx().emit_err(InvalidMinimumAlignmentTooLarge { align });
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
unsafe {
|
||||
llvm::LLVMSetAlignment(gv, align.bytes() as u32);
|
||||
if let Some(min_global) = cx.sess().target.min_global_align {
|
||||
align = Ord::max(align, min_global);
|
||||
}
|
||||
llvm::set_alignment(gv, align);
|
||||
}
|
||||
|
||||
fn check_and_apply_linkage<'ll, 'tcx>(
|
||||
|
||||
@@ -57,18 +57,6 @@ pub(crate) struct SymbolAlreadyDefined<'a> {
|
||||
pub symbol_name: &'a str,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(codegen_llvm_invalid_minimum_alignment_not_power_of_two)]
|
||||
pub(crate) struct InvalidMinimumAlignmentNotPowerOfTwo {
|
||||
pub align: u64,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(codegen_llvm_invalid_minimum_alignment_too_large)]
|
||||
pub(crate) struct InvalidMinimumAlignmentTooLarge {
|
||||
pub align: u64,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(codegen_llvm_sanitizer_memtag_requires_mte)]
|
||||
pub(crate) struct SanitizerMemtagRequiresMte;
|
||||
|
||||
Reference in New Issue
Block a user