mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-24 15:54:15 +00:00
Rebase to the llvm-project monorepo
The new git submodule src/llvm-project is a monorepo replacing src/llvm and src/tools/{clang,lld,lldb}. This also serves as a rebase for these projects to the new 8.x branch from trunk. The src/llvm-emscripten fork is unchanged for now.
This commit is contained in:
parent
bf669d1e32
commit
df0466d0bb
21
.gitmodules
vendored
21
.gitmodules
vendored
@ -1,7 +1,3 @@
|
|||||||
[submodule "src/llvm"]
|
|
||||||
path = src/llvm
|
|
||||||
url = https://github.com/rust-lang/llvm.git
|
|
||||||
branch = master
|
|
||||||
[submodule "src/rust-installer"]
|
[submodule "src/rust-installer"]
|
||||||
path = src/tools/rust-installer
|
path = src/tools/rust-installer
|
||||||
url = https://github.com/rust-lang/rust-installer.git
|
url = https://github.com/rust-lang/rust-installer.git
|
||||||
@ -38,20 +34,13 @@
|
|||||||
[submodule "src/stdsimd"]
|
[submodule "src/stdsimd"]
|
||||||
path = src/stdsimd
|
path = src/stdsimd
|
||||||
url = https://github.com/rust-lang-nursery/stdsimd.git
|
url = https://github.com/rust-lang-nursery/stdsimd.git
|
||||||
[submodule "src/tools/lld"]
|
|
||||||
path = src/tools/lld
|
|
||||||
url = https://github.com/rust-lang/lld.git
|
|
||||||
[submodule "src/tools/lldb"]
|
|
||||||
path = src/tools/lldb
|
|
||||||
url = https://github.com/rust-lang-nursery/lldb.git
|
|
||||||
branch = rust-release-80-v2
|
|
||||||
[submodule "src/tools/clang"]
|
|
||||||
path = src/tools/clang
|
|
||||||
url = https://github.com/rust-lang-nursery/clang.git
|
|
||||||
branch = rust-release-80-v2
|
|
||||||
[submodule "src/doc/rustc-guide"]
|
[submodule "src/doc/rustc-guide"]
|
||||||
path = src/doc/rustc-guide
|
path = src/doc/rustc-guide
|
||||||
url = https://github.com/rust-lang/rustc-guide.git
|
url = https://github.com/rust-lang/rustc-guide.git
|
||||||
[submodule "src/doc/edition-guide"]
|
[submodule "src/doc/edition-guide"]
|
||||||
path = src/doc/edition-guide
|
path = src/doc/edition-guide
|
||||||
url = https://github.com/rust-lang-nursery/edition-guide
|
url = https://github.com/rust-lang-nursery/edition-guide.git
|
||||||
|
[submodule "src/llvm-project"]
|
||||||
|
path = src/llvm-project
|
||||||
|
url = https://github.com/rust-lang/llvm-project.git
|
||||||
|
branch = rustc/8.0-2019-01-16
|
||||||
|
@ -23,7 +23,7 @@ The Rust Project includes packages written by third parties.
|
|||||||
The following third party packages are included, and carry
|
The following third party packages are included, and carry
|
||||||
their own copyright notices and license terms:
|
their own copyright notices and license terms:
|
||||||
|
|
||||||
* LLVM. Code for this package is found in src/llvm.
|
* LLVM. Code for this package is found in src/llvm-project.
|
||||||
|
|
||||||
Copyright (c) 2003-2013 University of Illinois at
|
Copyright (c) 2003-2013 University of Illinois at
|
||||||
Urbana-Champaign. All rights reserved.
|
Urbana-Champaign. All rights reserved.
|
||||||
@ -73,8 +73,8 @@ their own copyright notices and license terms:
|
|||||||
OTHER DEALINGS WITH THE SOFTWARE.
|
OTHER DEALINGS WITH THE SOFTWARE.
|
||||||
|
|
||||||
* Additional libraries included in LLVM carry separate
|
* Additional libraries included in LLVM carry separate
|
||||||
BSD-compatible licenses. See src/llvm/LICENSE.txt for
|
BSD-compatible licenses. See src/llvm-project/llvm/LICENSE.TXT
|
||||||
details.
|
for details.
|
||||||
|
|
||||||
* compiler-rt, in src/compiler-rt is dual licensed under
|
* compiler-rt, in src/compiler-rt is dual licensed under
|
||||||
LLVM's license and MIT:
|
LLVM's license and MIT:
|
||||||
|
@ -701,21 +701,13 @@ class RustBuild(object):
|
|||||||
filtered_submodules = []
|
filtered_submodules = []
|
||||||
submodules_names = []
|
submodules_names = []
|
||||||
for module in submodules:
|
for module in submodules:
|
||||||
if module.endswith("llvm"):
|
if module.endswith("llvm-project"):
|
||||||
if self.get_toml('llvm-config'):
|
if self.get_toml('llvm-config') and self.get_toml('lld') != 'true':
|
||||||
continue
|
continue
|
||||||
if module.endswith("llvm-emscripten"):
|
if module.endswith("llvm-emscripten"):
|
||||||
backends = self.get_toml('codegen-backends')
|
backends = self.get_toml('codegen-backends')
|
||||||
if backends is None or not 'emscripten' in backends:
|
if backends is None or not 'emscripten' in backends:
|
||||||
continue
|
continue
|
||||||
if module.endswith("lld"):
|
|
||||||
config = self.get_toml('lld')
|
|
||||||
if config is None or config == 'false':
|
|
||||||
continue
|
|
||||||
if module.endswith("lldb") or module.endswith("clang"):
|
|
||||||
config = self.get_toml('lldb')
|
|
||||||
if config is None or config == 'false':
|
|
||||||
continue
|
|
||||||
check = self.check_submodule(module, slow_submodules)
|
check = self.check_submodule(module, slow_submodules)
|
||||||
filtered_submodules.append((module, check))
|
filtered_submodules.append((module, check))
|
||||||
submodules_names.append(module)
|
submodules_names.append(module)
|
||||||
|
@ -788,7 +788,24 @@ fn copy_src_dirs(builder: &Builder, src_dirs: &[&str], exclude_dirs: &[&str], ds
|
|||||||
if spath.ends_with("~") || spath.ends_with(".pyc") {
|
if spath.ends_with("~") || spath.ends_with(".pyc") {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if (spath.contains("llvm/test") || spath.contains("llvm\\test")) &&
|
|
||||||
|
const LLVM_PROJECTS: &[&str] = &[
|
||||||
|
"llvm-project/clang", "llvm-project\\clang",
|
||||||
|
"llvm-project/lld", "llvm-project\\lld",
|
||||||
|
"llvm-project/lldb", "llvm-project\\lldb",
|
||||||
|
"llvm-project/llvm", "llvm-project\\llvm",
|
||||||
|
];
|
||||||
|
if spath.contains("llvm-project") && !spath.ends_with("llvm-project")
|
||||||
|
&& !LLVM_PROJECTS.iter().any(|path| spath.contains(path))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const LLVM_TEST: &[&str] = &[
|
||||||
|
"llvm-project/llvm/test", "llvm-project\\llvm\\test",
|
||||||
|
"llvm-emscripten/test", "llvm-emscripten\\test",
|
||||||
|
];
|
||||||
|
if LLVM_TEST.iter().any(|path| spath.contains(path)) &&
|
||||||
(spath.ends_with(".ll") ||
|
(spath.ends_with(".ll") ||
|
||||||
spath.ends_with(".td") ||
|
spath.ends_with(".td") ||
|
||||||
spath.ends_with(".s")) {
|
spath.ends_with(".s")) {
|
||||||
@ -2076,7 +2093,7 @@ impl Step for LlvmTools {
|
|||||||
}
|
}
|
||||||
|
|
||||||
builder.info(&format!("Dist LlvmTools stage{} ({})", stage, target));
|
builder.info(&format!("Dist LlvmTools stage{} ({})", stage, target));
|
||||||
let src = builder.src.join("src/llvm");
|
let src = builder.src.join("src/llvm-project/llvm");
|
||||||
let name = pkgname(builder, "llvm-tools");
|
let name = pkgname(builder, "llvm-tools");
|
||||||
|
|
||||||
let tmp = tmpdir(builder);
|
let tmp = tmpdir(builder);
|
||||||
@ -2135,7 +2152,7 @@ impl Step for Lldb {
|
|||||||
const DEFAULT: bool = true;
|
const DEFAULT: bool = true;
|
||||||
|
|
||||||
fn should_run(run: ShouldRun) -> ShouldRun {
|
fn should_run(run: ShouldRun) -> ShouldRun {
|
||||||
run.path("src/tools/lldb")
|
run.path("src/llvm-project/lldb").path("src/tools/lldb")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn make_run(run: RunConfig) {
|
fn make_run(run: RunConfig) {
|
||||||
@ -2160,7 +2177,7 @@ impl Step for Lldb {
|
|||||||
}
|
}
|
||||||
|
|
||||||
builder.info(&format!("Dist Lldb ({})", target));
|
builder.info(&format!("Dist Lldb ({})", target));
|
||||||
let src = builder.src.join("src/tools/lldb");
|
let src = builder.src.join("src/llvm-project/lldb");
|
||||||
let name = pkgname(builder, "lldb");
|
let name = pkgname(builder, "lldb");
|
||||||
|
|
||||||
let tmp = tmpdir(builder);
|
let tmp = tmpdir(builder);
|
||||||
|
@ -36,7 +36,10 @@ impl Step for Llvm {
|
|||||||
const ONLY_HOSTS: bool = true;
|
const ONLY_HOSTS: bool = true;
|
||||||
|
|
||||||
fn should_run(run: ShouldRun) -> ShouldRun {
|
fn should_run(run: ShouldRun) -> ShouldRun {
|
||||||
run.path("src/llvm").path("src/llvm-emscripten")
|
run.path("src/llvm-project")
|
||||||
|
.path("src/llvm-project/llvm")
|
||||||
|
.path("src/llvm")
|
||||||
|
.path("src/llvm-emscripten")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn make_run(run: RunConfig) {
|
fn make_run(run: RunConfig) {
|
||||||
@ -97,7 +100,7 @@ impl Step for Llvm {
|
|||||||
t!(fs::create_dir_all(&out_dir));
|
t!(fs::create_dir_all(&out_dir));
|
||||||
|
|
||||||
// http://llvm.org/docs/CMake.html
|
// http://llvm.org/docs/CMake.html
|
||||||
let root = if self.emscripten { "src/llvm-emscripten" } else { "src/llvm" };
|
let root = if self.emscripten { "src/llvm-emscripten" } else { "src/llvm-project/llvm" };
|
||||||
let mut cfg = cmake::Config::new(builder.src.join(root));
|
let mut cfg = cmake::Config::new(builder.src.join(root));
|
||||||
|
|
||||||
let profile = match (builder.config.llvm_optimize, builder.config.llvm_release_debuginfo) {
|
let profile = match (builder.config.llvm_optimize, builder.config.llvm_release_debuginfo) {
|
||||||
@ -189,8 +192,7 @@ impl Step for Llvm {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if want_lldb {
|
if want_lldb {
|
||||||
cfg.define("LLVM_EXTERNAL_CLANG_SOURCE_DIR", builder.src.join("src/tools/clang"));
|
cfg.define("LLVM_ENABLE_PROJECTS", "clang;lldb");
|
||||||
cfg.define("LLVM_EXTERNAL_LLDB_SOURCE_DIR", builder.src.join("src/tools/lldb"));
|
|
||||||
// For the time being, disable code signing.
|
// For the time being, disable code signing.
|
||||||
cfg.define("LLDB_CODESIGN_IDENTITY", "");
|
cfg.define("LLDB_CODESIGN_IDENTITY", "");
|
||||||
} else {
|
} else {
|
||||||
@ -411,7 +413,7 @@ impl Step for Lld {
|
|||||||
const ONLY_HOSTS: bool = true;
|
const ONLY_HOSTS: bool = true;
|
||||||
|
|
||||||
fn should_run(run: ShouldRun) -> ShouldRun {
|
fn should_run(run: ShouldRun) -> ShouldRun {
|
||||||
run.path("src/tools/lld")
|
run.path("src/llvm-project/lld").path("src/tools/lld")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn make_run(run: RunConfig) {
|
fn make_run(run: RunConfig) {
|
||||||
@ -441,7 +443,7 @@ impl Step for Lld {
|
|||||||
let _time = util::timeit(&builder);
|
let _time = util::timeit(&builder);
|
||||||
t!(fs::create_dir_all(&out_dir));
|
t!(fs::create_dir_all(&out_dir));
|
||||||
|
|
||||||
let mut cfg = cmake::Config::new(builder.src.join("src/tools/lld"));
|
let mut cfg = cmake::Config::new(builder.src.join("src/llvm-project/lld"));
|
||||||
configure_cmake(builder, target, &mut cfg);
|
configure_cmake(builder, target, &mut cfg);
|
||||||
|
|
||||||
// This is an awful, awful hack. Discovered when we migrated to using
|
// This is an awful, awful hack. Discovered when we migrated to using
|
||||||
|
@ -45,8 +45,7 @@ function fetch_submodule {
|
|||||||
rm $cached
|
rm $cached
|
||||||
}
|
}
|
||||||
|
|
||||||
included="src/llvm src/llvm-emscripten src/doc/book src/doc/rust-by-example"
|
included="src/llvm-project src/llvm-emscripten src/doc/book src/doc/rust-by-example"
|
||||||
included="$included src/tools/lld src/tools/clang src/tools/lldb"
|
|
||||||
modules="$(git config --file .gitmodules --get-regexp '\.path$' | cut -d' ' -f2)"
|
modules="$(git config --file .gitmodules --get-regexp '\.path$' | cut -d' ' -f2)"
|
||||||
modules=($modules)
|
modules=($modules)
|
||||||
use_git=""
|
use_git=""
|
||||||
|
@ -12,7 +12,7 @@ use self::source_loc::InternalDebugLocation::{self, UnknownLocation};
|
|||||||
|
|
||||||
use llvm;
|
use llvm;
|
||||||
use llvm::debuginfo::{DIFile, DIType, DIScope, DIBuilder, DISubprogram, DIArray, DIFlags,
|
use llvm::debuginfo::{DIFile, DIType, DIScope, DIBuilder, DISubprogram, DIArray, DIFlags,
|
||||||
DILexicalBlock};
|
DISPFlags, DILexicalBlock};
|
||||||
use rustc::hir::CodegenFnAttrFlags;
|
use rustc::hir::CodegenFnAttrFlags;
|
||||||
use rustc::hir::def_id::{DefId, CrateNum, LOCAL_CRATE};
|
use rustc::hir::def_id::{DefId, CrateNum, LOCAL_CRATE};
|
||||||
use rustc::ty::subst::{Substs, UnpackedKind};
|
use rustc::ty::subst::{Substs, UnpackedKind};
|
||||||
@ -283,7 +283,6 @@ impl DebugInfoMethods<'tcx> for CodegenCx<'ll, 'tcx> {
|
|||||||
let linkage_name = mangled_name_of_instance(self, instance);
|
let linkage_name = mangled_name_of_instance(self, instance);
|
||||||
|
|
||||||
let scope_line = span_start(self, span).line;
|
let scope_line = span_start(self, span).line;
|
||||||
let is_local_to_unit = is_node_local_to_unit(self, def_id);
|
|
||||||
|
|
||||||
let function_name = CString::new(name).unwrap();
|
let function_name = CString::new(name).unwrap();
|
||||||
let linkage_name = SmallCStr::new(&linkage_name.as_str());
|
let linkage_name = SmallCStr::new(&linkage_name.as_str());
|
||||||
@ -300,6 +299,14 @@ impl DebugInfoMethods<'tcx> for CodegenCx<'ll, 'tcx> {
|
|||||||
flags |= DIFlags::FlagNoReturn;
|
flags |= DIFlags::FlagNoReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let mut spflags = DISPFlags::SPFlagDefinition;
|
||||||
|
if is_node_local_to_unit(self, def_id) {
|
||||||
|
spflags |= DISPFlags::SPFlagLocalToUnit;
|
||||||
|
}
|
||||||
|
if self.sess().opts.optimize != config::OptLevel::No {
|
||||||
|
spflags |= DISPFlags::SPFlagOptimized;
|
||||||
|
}
|
||||||
|
|
||||||
let fn_metadata = unsafe {
|
let fn_metadata = unsafe {
|
||||||
llvm::LLVMRustDIBuilderCreateFunction(
|
llvm::LLVMRustDIBuilderCreateFunction(
|
||||||
DIB(self),
|
DIB(self),
|
||||||
@ -309,11 +316,9 @@ impl DebugInfoMethods<'tcx> for CodegenCx<'ll, 'tcx> {
|
|||||||
file_metadata,
|
file_metadata,
|
||||||
loc.line as c_uint,
|
loc.line as c_uint,
|
||||||
function_type_metadata,
|
function_type_metadata,
|
||||||
is_local_to_unit,
|
|
||||||
true,
|
|
||||||
scope_line as c_uint,
|
scope_line as c_uint,
|
||||||
flags,
|
flags,
|
||||||
self.sess().opts.optimize != config::OptLevel::No,
|
spflags,
|
||||||
llfn,
|
llfn,
|
||||||
template_parameters,
|
template_parameters,
|
||||||
None)
|
None)
|
||||||
|
@ -2,7 +2,7 @@ use super::debuginfo::{
|
|||||||
DIBuilder, DIDescriptor, DIFile, DILexicalBlock, DISubprogram, DIType,
|
DIBuilder, DIDescriptor, DIFile, DILexicalBlock, DISubprogram, DIType,
|
||||||
DIBasicType, DIDerivedType, DICompositeType, DIScope, DIVariable,
|
DIBasicType, DIDerivedType, DICompositeType, DIScope, DIVariable,
|
||||||
DIGlobalVariableExpression, DIArray, DISubrange, DITemplateTypeParameter, DIEnumerator,
|
DIGlobalVariableExpression, DIArray, DISubrange, DITemplateTypeParameter, DIEnumerator,
|
||||||
DINameSpace, DIFlags,
|
DINameSpace, DIFlags, DISPFlags,
|
||||||
};
|
};
|
||||||
|
|
||||||
use libc::{c_uint, c_int, size_t, c_char};
|
use libc::{c_uint, c_int, size_t, c_char};
|
||||||
@ -591,6 +591,20 @@ pub mod debuginfo {
|
|||||||
const FlagMainSubprogram = (1 << 21);
|
const FlagMainSubprogram = (1 << 21);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// These values **must** match with LLVMRustDISPFlags!!
|
||||||
|
bitflags! {
|
||||||
|
#[repr(C)]
|
||||||
|
#[derive(Default)]
|
||||||
|
pub struct DISPFlags: ::libc::uint32_t {
|
||||||
|
const SPFlagZero = 0;
|
||||||
|
const SPFlagVirtual = 1;
|
||||||
|
const SPFlagPureVirtual = 2;
|
||||||
|
const SPFlagLocalToUnit = (1 << 2);
|
||||||
|
const SPFlagDefinition = (1 << 3);
|
||||||
|
const SPFlagOptimized = (1 << 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern { pub type ModuleBuffer; }
|
extern { pub type ModuleBuffer; }
|
||||||
@ -1387,11 +1401,9 @@ extern "C" {
|
|||||||
File: &'a DIFile,
|
File: &'a DIFile,
|
||||||
LineNo: c_uint,
|
LineNo: c_uint,
|
||||||
Ty: &'a DIType,
|
Ty: &'a DIType,
|
||||||
isLocalToUnit: bool,
|
|
||||||
isDefinition: bool,
|
|
||||||
ScopeLine: c_uint,
|
ScopeLine: c_uint,
|
||||||
Flags: DIFlags,
|
Flags: DIFlags,
|
||||||
isOptimized: bool,
|
SPFlags: DISPFlags,
|
||||||
Fn: &'a Value,
|
Fn: &'a Value,
|
||||||
TParam: &'a DIArray,
|
TParam: &'a DIArray,
|
||||||
Decl: Option<&'a DIDescriptor>)
|
Decl: Option<&'a DIDescriptor>)
|
||||||
@ -1529,7 +1541,7 @@ extern "C" {
|
|||||||
AlignInBits: u32,
|
AlignInBits: u32,
|
||||||
Elements: &'a DIArray,
|
Elements: &'a DIArray,
|
||||||
ClassType: &'a DIType,
|
ClassType: &'a DIType,
|
||||||
IsFixed: bool)
|
IsScoped: bool)
|
||||||
-> &'a DIType;
|
-> &'a DIType;
|
||||||
|
|
||||||
pub fn LLVMRustDIBuilderCreateUnionType(Builder: &DIBuilder<'a>,
|
pub fn LLVMRustDIBuilderCreateUnionType(Builder: &DIBuilder<'a>,
|
||||||
|
1
src/llvm
1
src/llvm
@ -1 +0,0 @@
|
|||||||
Subproject commit f4728ed8fa2296c5b009bb85550e157e1e57ed0b
|
|
1
src/llvm-project
Submodule
1
src/llvm-project
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit a27fbee5abaee63ac45c8cb9a0c73889c3b98471
|
@ -789,7 +789,7 @@ struct LLVMRustThinLTOData {
|
|||||||
StringMap<GVSummaryMapTy> ModuleToDefinedGVSummaries;
|
StringMap<GVSummaryMapTy> ModuleToDefinedGVSummaries;
|
||||||
|
|
||||||
#if LLVM_VERSION_GE(7, 0)
|
#if LLVM_VERSION_GE(7, 0)
|
||||||
LLVMRustThinLTOData() : Index(/* isPerformingAnalysis = */ false) {}
|
LLVMRustThinLTOData() : Index(/* HaveGVs = */ false) {}
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -865,7 +865,12 @@ LLVMRustCreateThinLTOData(LLVMRustThinLTOModule *modules,
|
|||||||
auto deadIsPrevailing = [&](GlobalValue::GUID G) {
|
auto deadIsPrevailing = [&](GlobalValue::GUID G) {
|
||||||
return PrevailingType::Unknown;
|
return PrevailingType::Unknown;
|
||||||
};
|
};
|
||||||
|
#if LLVM_VERSION_GE(8, 0)
|
||||||
|
computeDeadSymbolsWithConstProp(Ret->Index, Ret->GUIDPreservedSymbols,
|
||||||
|
deadIsPrevailing, /* ImportEnabled = */ true);
|
||||||
|
#else
|
||||||
computeDeadSymbols(Ret->Index, Ret->GUIDPreservedSymbols, deadIsPrevailing);
|
computeDeadSymbols(Ret->Index, Ret->GUIDPreservedSymbols, deadIsPrevailing);
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
computeDeadSymbols(Ret->Index, Ret->GUIDPreservedSymbols);
|
computeDeadSymbols(Ret->Index, Ret->GUIDPreservedSymbols);
|
||||||
#endif
|
#endif
|
||||||
|
@ -294,7 +294,7 @@ extern "C" void LLVMRustSetHasUnsafeAlgebra(LLVMValueRef V) {
|
|||||||
extern "C" LLVMValueRef
|
extern "C" LLVMValueRef
|
||||||
LLVMRustBuildAtomicLoad(LLVMBuilderRef B, LLVMValueRef Source, const char *Name,
|
LLVMRustBuildAtomicLoad(LLVMBuilderRef B, LLVMValueRef Source, const char *Name,
|
||||||
LLVMAtomicOrdering Order) {
|
LLVMAtomicOrdering Order) {
|
||||||
LoadInst *LI = new LoadInst(unwrap(Source), 0);
|
LoadInst *LI = new LoadInst(unwrap(Source));
|
||||||
LI->setAtomic(fromRust(Order));
|
LI->setAtomic(fromRust(Order));
|
||||||
return wrap(unwrap(B)->Insert(LI, Name));
|
return wrap(unwrap(B)->Insert(LI, Name));
|
||||||
}
|
}
|
||||||
@ -511,6 +511,71 @@ static DINode::DIFlags fromRust(LLVMRustDIFlags Flags) {
|
|||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// These values **must** match debuginfo::DISPFlags! They also *happen*
|
||||||
|
// to match LLVM, but that isn't required as we do giant sets of
|
||||||
|
// matching below. The value shouldn't be directly passed to LLVM.
|
||||||
|
enum class LLVMRustDISPFlags : uint32_t {
|
||||||
|
SPFlagZero = 0,
|
||||||
|
SPFlagVirtual = 1,
|
||||||
|
SPFlagPureVirtual = 2,
|
||||||
|
SPFlagLocalToUnit = (1 << 2),
|
||||||
|
SPFlagDefinition = (1 << 3),
|
||||||
|
SPFlagOptimized = (1 << 4),
|
||||||
|
// Do not add values that are not supported by the minimum LLVM
|
||||||
|
// version we support! see llvm/include/llvm/IR/DebugInfoFlags.def
|
||||||
|
// (In LLVM < 8, createFunction supported these as separate bool arguments.)
|
||||||
|
};
|
||||||
|
|
||||||
|
inline LLVMRustDISPFlags operator&(LLVMRustDISPFlags A, LLVMRustDISPFlags B) {
|
||||||
|
return static_cast<LLVMRustDISPFlags>(static_cast<uint32_t>(A) &
|
||||||
|
static_cast<uint32_t>(B));
|
||||||
|
}
|
||||||
|
|
||||||
|
inline LLVMRustDISPFlags operator|(LLVMRustDISPFlags A, LLVMRustDISPFlags B) {
|
||||||
|
return static_cast<LLVMRustDISPFlags>(static_cast<uint32_t>(A) |
|
||||||
|
static_cast<uint32_t>(B));
|
||||||
|
}
|
||||||
|
|
||||||
|
inline LLVMRustDISPFlags &operator|=(LLVMRustDISPFlags &A, LLVMRustDISPFlags B) {
|
||||||
|
return A = A | B;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool isSet(LLVMRustDISPFlags F) { return F != LLVMRustDISPFlags::SPFlagZero; }
|
||||||
|
|
||||||
|
inline LLVMRustDISPFlags virtuality(LLVMRustDISPFlags F) {
|
||||||
|
return static_cast<LLVMRustDISPFlags>(static_cast<uint32_t>(F) & 0x3);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if LLVM_VERSION_GE(8, 0)
|
||||||
|
static DISubprogram::DISPFlags fromRust(LLVMRustDISPFlags SPFlags) {
|
||||||
|
DISubprogram::DISPFlags Result = DISubprogram::DISPFlags::SPFlagZero;
|
||||||
|
|
||||||
|
switch (virtuality(SPFlags)) {
|
||||||
|
case LLVMRustDISPFlags::SPFlagVirtual:
|
||||||
|
Result |= DISubprogram::DISPFlags::SPFlagVirtual;
|
||||||
|
break;
|
||||||
|
case LLVMRustDISPFlags::SPFlagPureVirtual:
|
||||||
|
Result |= DISubprogram::DISPFlags::SPFlagPureVirtual;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// The rest are handled below
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isSet(SPFlags & LLVMRustDISPFlags::SPFlagLocalToUnit)) {
|
||||||
|
Result |= DISubprogram::DISPFlags::SPFlagLocalToUnit;
|
||||||
|
}
|
||||||
|
if (isSet(SPFlags & LLVMRustDISPFlags::SPFlagDefinition)) {
|
||||||
|
Result |= DISubprogram::DISPFlags::SPFlagDefinition;
|
||||||
|
}
|
||||||
|
if (isSet(SPFlags & LLVMRustDISPFlags::SPFlagOptimized)) {
|
||||||
|
Result |= DISubprogram::DISPFlags::SPFlagOptimized;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
extern "C" uint32_t LLVMRustDebugMetadataVersion() {
|
extern "C" uint32_t LLVMRustDebugMetadataVersion() {
|
||||||
return DEBUG_METADATA_VERSION;
|
return DEBUG_METADATA_VERSION;
|
||||||
}
|
}
|
||||||
@ -575,16 +640,26 @@ LLVMRustDIBuilderCreateSubroutineType(LLVMRustDIBuilderRef Builder,
|
|||||||
extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateFunction(
|
extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateFunction(
|
||||||
LLVMRustDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
LLVMRustDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
||||||
const char *LinkageName, LLVMMetadataRef File, unsigned LineNo,
|
const char *LinkageName, LLVMMetadataRef File, unsigned LineNo,
|
||||||
LLVMMetadataRef Ty, bool IsLocalToUnit, bool IsDefinition,
|
LLVMMetadataRef Ty, unsigned ScopeLine, LLVMRustDIFlags Flags,
|
||||||
unsigned ScopeLine, LLVMRustDIFlags Flags, bool IsOptimized,
|
LLVMRustDISPFlags SPFlags, LLVMValueRef Fn, LLVMMetadataRef TParam,
|
||||||
LLVMValueRef Fn, LLVMMetadataRef TParam, LLVMMetadataRef Decl) {
|
LLVMMetadataRef Decl) {
|
||||||
DITemplateParameterArray TParams =
|
DITemplateParameterArray TParams =
|
||||||
DITemplateParameterArray(unwrap<MDTuple>(TParam));
|
DITemplateParameterArray(unwrap<MDTuple>(TParam));
|
||||||
|
#if LLVM_VERSION_GE(8, 0)
|
||||||
|
DISubprogram *Sub = Builder->createFunction(
|
||||||
|
unwrapDI<DIScope>(Scope), Name, LinkageName, unwrapDI<DIFile>(File),
|
||||||
|
LineNo, unwrapDI<DISubroutineType>(Ty), ScopeLine, fromRust(Flags),
|
||||||
|
fromRust(SPFlags), TParams, unwrapDIPtr<DISubprogram>(Decl));
|
||||||
|
#else
|
||||||
|
bool IsLocalToUnit = isSet(SPFlags & LLVMRustDISPFlags::SPFlagLocalToUnit);
|
||||||
|
bool IsDefinition = isSet(SPFlags & LLVMRustDISPFlags::SPFlagDefinition);
|
||||||
|
bool IsOptimized = isSet(SPFlags & LLVMRustDISPFlags::SPFlagOptimized);
|
||||||
DISubprogram *Sub = Builder->createFunction(
|
DISubprogram *Sub = Builder->createFunction(
|
||||||
unwrapDI<DIScope>(Scope), Name, LinkageName, unwrapDI<DIFile>(File),
|
unwrapDI<DIScope>(Scope), Name, LinkageName, unwrapDI<DIFile>(File),
|
||||||
LineNo, unwrapDI<DISubroutineType>(Ty), IsLocalToUnit, IsDefinition,
|
LineNo, unwrapDI<DISubroutineType>(Ty), IsLocalToUnit, IsDefinition,
|
||||||
ScopeLine, fromRust(Flags), IsOptimized, TParams,
|
ScopeLine, fromRust(Flags), IsOptimized, TParams,
|
||||||
unwrapDIPtr<DISubprogram>(Decl));
|
unwrapDIPtr<DISubprogram>(Decl));
|
||||||
|
#endif
|
||||||
unwrap<Function>(Fn)->setSubprogram(Sub);
|
unwrap<Function>(Fn)->setSubprogram(Sub);
|
||||||
return wrap(Sub);
|
return wrap(Sub);
|
||||||
}
|
}
|
||||||
@ -773,14 +848,14 @@ extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateEnumerationType(
|
|||||||
LLVMRustDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
LLVMRustDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
|
||||||
LLVMMetadataRef File, unsigned LineNumber, uint64_t SizeInBits,
|
LLVMMetadataRef File, unsigned LineNumber, uint64_t SizeInBits,
|
||||||
uint32_t AlignInBits, LLVMMetadataRef Elements,
|
uint32_t AlignInBits, LLVMMetadataRef Elements,
|
||||||
LLVMMetadataRef ClassTy, bool IsFixed) {
|
LLVMMetadataRef ClassTy, bool IsScoped) {
|
||||||
#if LLVM_VERSION_GE(7, 0)
|
#if LLVM_VERSION_GE(7, 0)
|
||||||
return wrap(Builder->createEnumerationType(
|
return wrap(Builder->createEnumerationType(
|
||||||
unwrapDI<DIDescriptor>(Scope), Name, unwrapDI<DIFile>(File), LineNumber,
|
unwrapDI<DIDescriptor>(Scope), Name, unwrapDI<DIFile>(File), LineNumber,
|
||||||
SizeInBits, AlignInBits, DINodeArray(unwrapDI<MDTuple>(Elements)),
|
SizeInBits, AlignInBits, DINodeArray(unwrapDI<MDTuple>(Elements)),
|
||||||
unwrapDI<DIType>(ClassTy), "", IsFixed));
|
unwrapDI<DIType>(ClassTy), "", IsScoped));
|
||||||
#else
|
#else
|
||||||
// Ignore IsFixed on older LLVM.
|
// Ignore IsScoped on older LLVM.
|
||||||
return wrap(Builder->createEnumerationType(
|
return wrap(Builder->createEnumerationType(
|
||||||
unwrapDI<DIDescriptor>(Scope), Name, unwrapDI<DIFile>(File), LineNumber,
|
unwrapDI<DIDescriptor>(Scope), Name, unwrapDI<DIFile>(File), LineNumber,
|
||||||
SizeInBits, AlignInBits, DINodeArray(unwrapDI<MDTuple>(Elements)),
|
SizeInBits, AlignInBits, DINodeArray(unwrapDI<MDTuple>(Elements)),
|
||||||
@ -920,7 +995,11 @@ extern "C" void LLVMRustUnpackOptimizationDiagnostic(
|
|||||||
if (loc.isValid()) {
|
if (loc.isValid()) {
|
||||||
*Line = loc.getLine();
|
*Line = loc.getLine();
|
||||||
*Column = loc.getColumn();
|
*Column = loc.getColumn();
|
||||||
|
#if LLVM_VERSION_GE(8, 0)
|
||||||
|
FilenameOS << loc.getAbsolutePath();
|
||||||
|
#else
|
||||||
FilenameOS << loc.getFilename();
|
FilenameOS << loc.getFilename();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
RawRustStringOstream MessageOS(MessageOut);
|
RawRustStringOstream MessageOS(MessageOut);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# If this file is modified, then llvm will be (optionally) cleaned and then rebuilt.
|
# If this file is modified, then llvm will be (optionally) cleaned and then rebuilt.
|
||||||
# The actual contents of this file do not matter, but to trigger a change on the
|
# The actual contents of this file do not matter, but to trigger a change on the
|
||||||
# build bots then the contents should be changed so git updates the mtime.
|
# build bots then the contents should be changed so git updates the mtime.
|
||||||
2018-12-13
|
2019-01-16
|
||||||
|
@ -8,8 +8,11 @@
|
|||||||
|
|
||||||
// compile-flags: -g -C no-prepopulate-passes
|
// compile-flags: -g -C no-prepopulate-passes
|
||||||
|
|
||||||
|
// DIFlagFixedEnum was deprecated in 8.0, renamed to DIFlagEnumClass.
|
||||||
|
// We match either for compatibility.
|
||||||
|
|
||||||
// CHECK-LABEL: @main
|
// CHECK-LABEL: @main
|
||||||
// CHECK: {{.*}}DICompositeType{{.*}}tag: DW_TAG_enumeration_type,{{.*}}name: "E",{{.*}}flags: DIFlagFixedEnum,{{.*}}
|
// CHECK: {{.*}}DICompositeType{{.*}}tag: DW_TAG_enumeration_type,{{.*}}name: "E",{{.*}}flags: {{(DIFlagEnumClass|DIFlagFixedEnum)}},{{.*}}
|
||||||
// CHECK: {{.*}}DIEnumerator{{.*}}name: "A",{{.*}}value: {{[0-9].*}}
|
// CHECK: {{.*}}DIEnumerator{{.*}}name: "A",{{.*}}value: {{[0-9].*}}
|
||||||
// CHECK: {{.*}}DIEnumerator{{.*}}name: "B",{{.*}}value: {{[0-9].*}}
|
// CHECK: {{.*}}DIEnumerator{{.*}}name: "B",{{.*}}value: {{[0-9].*}}
|
||||||
// CHECK: {{.*}}DIEnumerator{{.*}}name: "C",{{.*}}value: {{[0-9].*}}
|
// CHECK: {{.*}}DIEnumerator{{.*}}name: "C",{{.*}}value: {{[0-9].*}}
|
||||||
|
@ -1 +0,0 @@
|
|||||||
Subproject commit 032312dd0140a7074c9b89d305fe44eb0e44e407
|
|
@ -1 +0,0 @@
|
|||||||
Subproject commit 1928c5eeb613a4c6d232fc47ae91914bbfd92a79
|
|
@ -1 +0,0 @@
|
|||||||
Subproject commit 8ad0817ce45b0eef9d374691b23f2bd69c164254
|
|
@ -47,6 +47,7 @@ pub mod libcoretest;
|
|||||||
fn filter_dirs(path: &Path) -> bool {
|
fn filter_dirs(path: &Path) -> bool {
|
||||||
let skip = [
|
let skip = [
|
||||||
"src/llvm",
|
"src/llvm",
|
||||||
|
"src/llvm-project",
|
||||||
"src/llvm-emscripten",
|
"src/llvm-emscripten",
|
||||||
"src/libbacktrace",
|
"src/libbacktrace",
|
||||||
"src/librustc_data_structures/owning_ref",
|
"src/librustc_data_structures/owning_ref",
|
||||||
|
Loading…
Reference in New Issue
Block a user