diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2015-10-22 22:07:19 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2016-01-29 16:25:20 -0800 |
| commit | d1cace17af31ddb21aeb8a3d94cb3eda934047d9 (patch) | |
| tree | 90a8ea64593d7d5330cc1466ba13db135e0b593d /src/rustllvm/ArchiveWrapper.cpp | |
| parent | 142214d1f2232a4e88ff7bd99951b01f36052c61 (diff) | |
| download | rust-d1cace17af31ddb21aeb8a3d94cb3eda934047d9.tar.gz rust-d1cace17af31ddb21aeb8a3d94cb3eda934047d9.zip | |
trans: Upgrade LLVM
This brings some routine upgrades to the bundled LLVM that we're using, the most notable of which is a bug fix to the way we handle range asserts when loading the discriminant of an enum. This fix ended up being very similar to f9d4149c where we basically can't have a range assert when loading a discriminant due to filling drop, and appropriate flags were added to communicate this to `trans::adt`.
Diffstat (limited to 'src/rustllvm/ArchiveWrapper.cpp')
| -rw-r--r-- | src/rustllvm/ArchiveWrapper.cpp | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/rustllvm/ArchiveWrapper.cpp b/src/rustllvm/ArchiveWrapper.cpp index 2cf6277e057..d3f2907bfc3 100644 --- a/src/rustllvm/ArchiveWrapper.cpp +++ b/src/rustllvm/ArchiveWrapper.cpp @@ -24,7 +24,13 @@ struct LLVMRustArchiveMember { const char *name; Archive::Child child; - LLVMRustArchiveMember(): filename(NULL), name(NULL), child(NULL, NULL) {} + LLVMRustArchiveMember(): filename(NULL), name(NULL), +#if LLVM_VERSION_MINOR >= 8 + child(NULL, NULL, NULL) +#else + child(NULL, NULL) +#endif + {} ~LLVMRustArchiveMember() {} }; @@ -92,8 +98,18 @@ extern "C" const Archive::Child* LLVMRustArchiveIteratorNext(RustArchiveIterator *rai) { if (rai->cur == rai->end) return NULL; - const Archive::Child *cur = rai->cur.operator->(); - Archive::Child *ret = new Archive::Child(*cur); +#if LLVM_VERSION_MINOR >= 8 + const ErrorOr<Archive::Child>* cur = rai->cur.operator->(); + if (!*cur) { + LLVMRustSetLastError(cur->getError().message().c_str()); + return NULL; + } + const Archive::Child &child = cur->get(); +#else + const Archive::Child &child = *rai->cur.operator->(); +#endif + Archive::Child *ret = new Archive::Child(child); + ++rai->cur; return ret; } |
