[LLVM 4.0] Move debuginfo alignment argument

Alignment was removed from createBasicType and moved to

- createGlobalVariable
- createAutoVariable
- createStaticMemberType (unused in Rust)
- createTempGlobalVariableFwdDecl (unused in Rust)

e69c459a6e
This commit is contained in:
Jake Goulding 2016-11-18 11:11:18 -05:00
parent 0eae43e4d0
commit 5bce12c95f
4 changed files with 44 additions and 12 deletions

View File

@ -1417,7 +1417,8 @@ extern "C" {
Ty: DIType,
isLocalToUnit: bool,
Val: ValueRef,
Decl: DIDescriptor)
Decl: DIDescriptor,
AlignInBits: u64)
-> DIGlobalVariable;
pub fn LLVMRustDIBuilderCreateVariable(Builder: DIBuilderRef,
@ -1429,7 +1430,8 @@ extern "C" {
Ty: DIType,
AlwaysPreserve: bool,
Flags: DIFlags,
ArgNo: c_uint)
ArgNo: c_uint,
AlignInBits: u64)
-> DIVariable;
pub fn LLVMRustDIBuilderCreateArrayType(Builder: DIBuilderRef,

View File

@ -1763,6 +1763,10 @@ pub fn create_global_var_metadata(cx: &CrateContext,
let var_name = CString::new(var_name).unwrap();
let linkage_name = CString::new(linkage_name).unwrap();
let ty = cx.tcx().item_type(node_def_id);
let global_align = type_of::align_of(cx, ty);
unsafe {
llvm::LLVMRustDIBuilderCreateStaticVariable(DIB(cx),
var_scope,
@ -1773,7 +1777,9 @@ pub fn create_global_var_metadata(cx: &CrateContext,
type_metadata,
is_local_to_unit,
global,
ptr::null_mut());
ptr::null_mut(),
global_align as u64,
);
}
}

View File

@ -462,6 +462,7 @@ pub fn declare_local<'blk, 'tcx>(bcx: Block<'blk, 'tcx>,
LocalVariable |
CapturedVariable => (0, DW_TAG_auto_variable)
};
let align = ::type_of::align_of(cx, variable_type);
let name = CString::new(variable_name.as_str().as_bytes()).unwrap();
match (variable_access, &[][..]) {
@ -478,7 +479,9 @@ pub fn declare_local<'blk, 'tcx>(bcx: Block<'blk, 'tcx>,
type_metadata,
cx.sess().opts.optimize != config::OptLevel::No,
DIFlags::FlagZero,
argument_index)
argument_index,
align as u64,
)
};
source_loc::set_debug_location(cx, None,
InternalDebugLocation::new(scope_metadata, loc.line, loc.col.to_usize()));

View File

@ -552,8 +552,13 @@ extern "C" LLVMRustMetadataRef LLVMRustDIBuilderCreateBasicType(
uint64_t AlignInBits,
unsigned Encoding) {
return wrap(Builder->createBasicType(
Name, SizeInBits,
AlignInBits, Encoding));
Name,
SizeInBits,
#if LLVM_VERSION_LE(3, 9)
AlignInBits,
#endif
Encoding
));
}
extern "C" LLVMRustMetadataRef LLVMRustDIBuilderCreatePointerType(
@ -645,8 +650,11 @@ extern "C" LLVMRustMetadataRef LLVMRustDIBuilderCreateStaticVariable(
LLVMRustMetadataRef Ty,
bool isLocalToUnit,
LLVMValueRef Val,
LLVMRustMetadataRef Decl = NULL) {
return wrap(Builder->createGlobalVariable(unwrapDI<DIDescriptor>(Context),
LLVMRustMetadataRef Decl = NULL,
uint64_t AlignInBits = 0)
{
return wrap(Builder->createGlobalVariable(
unwrapDI<DIDescriptor>(Context),
Name,
LinkageName,
unwrapDI<DIFile>(File),
@ -654,7 +662,11 @@ extern "C" LLVMRustMetadataRef LLVMRustDIBuilderCreateStaticVariable(
unwrapDI<DIType>(Ty),
isLocalToUnit,
cast<Constant>(unwrap(Val)),
unwrapDIptr<MDNode>(Decl)));
unwrapDIptr<MDNode>(Decl)
#if LLVM_VERSION_GE(4, 0)
, AlignInBits
#endif
));
}
extern "C" LLVMRustMetadataRef LLVMRustDIBuilderCreateVariable(
@ -667,14 +679,23 @@ extern "C" LLVMRustMetadataRef LLVMRustDIBuilderCreateVariable(
LLVMRustMetadataRef Ty,
bool AlwaysPreserve,
LLVMRustDIFlags Flags,
unsigned ArgNo) {
unsigned ArgNo,
uint64_t AlignInBits)
{
#if LLVM_VERSION_GE(3, 8)
if (Tag == 0x100) { // DW_TAG_auto_variable
return wrap(Builder->createAutoVariable(
unwrapDI<DIDescriptor>(Scope), Name,
unwrapDI<DIDescriptor>(Scope),
Name,
unwrapDI<DIFile>(File),
LineNo,
unwrapDI<DIType>(Ty), AlwaysPreserve, from_rust(Flags)));
unwrapDI<DIType>(Ty),
AlwaysPreserve,
from_rust(Flags)
#if LLVM_VERSION_GE(4,0)
, AlignInBits
#endif
));
} else {
return wrap(Builder->createParameterVariable(
unwrapDI<DIDescriptor>(Scope), Name, ArgNo,