Auto merge of #39747 - mattico:fix-llvm4-createcompileunit, r=alexcrichton
[LLVM 4.0] Fix CreateCompileUnit This is largely identical to @dylanmckay's [patch](https://github.com/dylanmckay), except that it doesn't try to use `file_metadata()`. I don't think that is necessary because we don't want the compile unit to be added to `debug_context.created_files`, though I'd like confirmation from someone who knows for sure. If that is needed, I can modify `file_metadata_()` so that it can be used from `compile_unit_metadata()`.
This commit is contained in:
@@ -1334,8 +1334,7 @@ extern "C" {
|
|||||||
|
|
||||||
pub fn LLVMRustDIBuilderCreateCompileUnit(Builder: DIBuilderRef,
|
pub fn LLVMRustDIBuilderCreateCompileUnit(Builder: DIBuilderRef,
|
||||||
Lang: c_uint,
|
Lang: c_uint,
|
||||||
File: *const c_char,
|
File: DIFile,
|
||||||
Dir: *const c_char,
|
|
||||||
Producer: *const c_char,
|
Producer: *const c_char,
|
||||||
isOptimized: bool,
|
isOptimized: bool,
|
||||||
Flags: *const c_char,
|
Flags: *const c_char,
|
||||||
|
|||||||
@@ -791,12 +791,15 @@ pub fn compile_unit_metadata(scc: &SharedCrateContext,
|
|||||||
let producer = CString::new(producer).unwrap();
|
let producer = CString::new(producer).unwrap();
|
||||||
let flags = "\0";
|
let flags = "\0";
|
||||||
let split_name = "\0";
|
let split_name = "\0";
|
||||||
return unsafe {
|
|
||||||
llvm::LLVMRustDIBuilderCreateCompileUnit(
|
unsafe {
|
||||||
|
let file_metadata = llvm::LLVMRustDIBuilderCreateFile(
|
||||||
|
debug_context.builder, compile_unit_name, work_dir.as_ptr());
|
||||||
|
|
||||||
|
return llvm::LLVMRustDIBuilderCreateCompileUnit(
|
||||||
debug_context.builder,
|
debug_context.builder,
|
||||||
DW_LANG_RUST,
|
DW_LANG_RUST,
|
||||||
compile_unit_name,
|
file_metadata,
|
||||||
work_dir.as_ptr(),
|
|
||||||
producer.as_ptr(),
|
producer.as_ptr(),
|
||||||
sess.opts.optimize != config::OptLevel::No,
|
sess.opts.optimize != config::OptLevel::No,
|
||||||
flags.as_ptr() as *const _,
|
flags.as_ptr() as *const _,
|
||||||
|
|||||||
@@ -474,11 +474,19 @@ extern "C" void LLVMRustDIBuilderFinalize(LLVMRustDIBuilderRef Builder) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extern "C" LLVMRustMetadataRef LLVMRustDIBuilderCreateCompileUnit(
|
extern "C" LLVMRustMetadataRef LLVMRustDIBuilderCreateCompileUnit(
|
||||||
LLVMRustDIBuilderRef Builder, unsigned Lang, const char *File,
|
LLVMRustDIBuilderRef Builder, unsigned Lang, LLVMRustMetadataRef FileRef,
|
||||||
const char *Dir, const char *Producer, bool isOptimized, const char *Flags,
|
const char *Producer, bool isOptimized, const char *Flags,
|
||||||
unsigned RuntimeVer, const char *SplitName) {
|
unsigned RuntimeVer, const char *SplitName) {
|
||||||
return wrap(Builder->createCompileUnit(Lang, File, Dir, Producer, isOptimized,
|
auto *File = unwrapDI<DIFile>(FileRef);
|
||||||
|
|
||||||
|
#if LLVM_VERSION_GE(4, 0)
|
||||||
|
return wrap(Builder->createCompileUnit(Lang, File, Producer, isOptimized,
|
||||||
Flags, RuntimeVer, SplitName));
|
Flags, RuntimeVer, SplitName));
|
||||||
|
#else
|
||||||
|
return wrap(Builder->createCompileUnit(Lang, File->getFilename(),
|
||||||
|
File->getDirectory(), Producer, isOptimized,
|
||||||
|
Flags, RuntimeVer, SplitName));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" LLVMRustMetadataRef
|
extern "C" LLVMRustMetadataRef
|
||||||
|
|||||||
Reference in New Issue
Block a user