debuginfo: Fix issue with unique type IDs not being passed to LLVM for LLVM 3.4
This commit is contained in:
parent
0a98a4e422
commit
c7426cf05a
@ -1809,6 +1809,7 @@ pub mod llvm {
|
||||
pub fn LLVMRustDestroyArchive(AR: ArchiveRef);
|
||||
|
||||
pub fn LLVMRustSetDLLExportStorageClass(V: ValueRef);
|
||||
pub fn LLVMVersionMajor() -> c_int;
|
||||
pub fn LLVMVersionMinor() -> c_int;
|
||||
|
||||
pub fn LLVMRustGetSectionName(SI: SectionIteratorRef,
|
||||
|
@ -179,7 +179,6 @@ use std::collections::HashSet;
|
||||
use std::gc::Gc;
|
||||
use std::ptr;
|
||||
use std::rc::{Rc, Weak};
|
||||
use std::sync::atomics;
|
||||
use syntax::util::interner::Interner;
|
||||
use syntax::codemap::{Span, Pos};
|
||||
use syntax::{abi, ast, codemap, ast_util, ast_map};
|
||||
@ -2356,9 +2355,22 @@ fn set_members_of_composite_type(cx: &CrateContext,
|
||||
let mut composite_types_completed =
|
||||
debug_context(cx).composite_types_completed.borrow_mut();
|
||||
if composite_types_completed.contains(&composite_type_metadata) {
|
||||
cx.sess().span_bug(definition_span, "debuginfo::set_members_of_composite_type() - \
|
||||
Already completed forward declaration \
|
||||
re-encountered.");
|
||||
let (llvm_version_major, llvm_version_minor) = unsafe {
|
||||
(llvm::LLVMVersionMajor(), llvm::LLVMVersionMinor())
|
||||
};
|
||||
|
||||
let actual_llvm_version = llvm_version_major * 1000000 + llvm_version_minor * 1000;
|
||||
let min_supported_llvm_version = 3 * 1000000 + 4 * 1000;
|
||||
|
||||
if actual_llvm_version < min_supported_llvm_version {
|
||||
cx.sess().warn(format!("This version of rustc was built with LLVM {}.{}. \
|
||||
Rustc just ran into a known debuginfo corruption problem that \
|
||||
often occurs with LLVM versions below 3.4. Please use a rustc built with a \
|
||||
newer version of LLVM.", llvm_version_major, llvm_version_minor).as_slice());
|
||||
} else {
|
||||
cx.sess().bug("debuginfo::set_members_of_composite_type() - \
|
||||
Already completed forward declaration re-encountered.");
|
||||
}
|
||||
} else {
|
||||
composite_types_completed.insert(composite_type_metadata);
|
||||
}
|
||||
|
@ -318,7 +318,7 @@ extern "C" LLVMValueRef LLVMDIBuilderCreateStructType(
|
||||
unwrapDI<DIArray>(Elements),
|
||||
RunTimeLang,
|
||||
unwrapDI<DIType>(VTableHolder)
|
||||
#if LLVM_VERSION_MINOR >= 5
|
||||
#if LLVM_VERSION_MINOR >= 4
|
||||
,UniqueId
|
||||
#endif
|
||||
));
|
||||
@ -510,7 +510,7 @@ extern "C" LLVMValueRef LLVMDIBuilderCreateUnionType(
|
||||
Flags,
|
||||
unwrapDI<DIArray>(Elements),
|
||||
RunTimeLang
|
||||
#if LLVM_VERSION_MINOR >= 5
|
||||
#if LLVM_VERSION_MINOR >= 4
|
||||
,UniqueId
|
||||
#endif
|
||||
));
|
||||
@ -734,6 +734,11 @@ LLVMVersionMinor() {
|
||||
return LLVM_VERSION_MINOR;
|
||||
}
|
||||
|
||||
extern "C" int
|
||||
LLVMVersionMajor() {
|
||||
return LLVM_VERSION_MAJOR;
|
||||
}
|
||||
|
||||
// Note that the two following functions look quite similar to the
|
||||
// LLVMGetSectionName function. Sadly, it appears that this function only
|
||||
// returns a char* pointer, which isn't guaranteed to be null-terminated. The
|
||||
|
Loading…
x
Reference in New Issue
Block a user