diff options
| author | Björn Steinbrink <bsteinbr@gmail.com> | 2014-06-17 18:34:50 +0200 |
|---|---|---|
| committer | Björn Steinbrink <bsteinbr@gmail.com> | 2014-06-21 19:59:58 +0200 |
| commit | 90a9f65b8da62f7495e56cab252efe590dd456e5 (patch) | |
| tree | 528fd1fb21fff39324aabe540d32e8088d9108f8 /src/rustllvm/RustWrapper.cpp | |
| parent | 5e720aac4215dcd8ba1b0fd455a737d8798baea4 (diff) | |
| download | rust-90a9f65b8da62f7495e56cab252efe590dd456e5.tar.gz rust-90a9f65b8da62f7495e56cab252efe590dd456e5.zip | |
Update LLVM
To fix #8106, we need an LLVM version that contains r211082 aka 0dee6756 which fixes a bug that blocks that issue. There have been some tiny API changes in LLVM, and cmpxchg changed its return type. The i1 part of the new return type is only interesting when using the new weak cmpxchg, which we don't do.
Diffstat (limited to 'src/rustllvm/RustWrapper.cpp')
| -rw-r--r-- | src/rustllvm/RustWrapper.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp index f42844b9f19..a1a88d1b14d 100644 --- a/src/rustllvm/RustWrapper.cpp +++ b/src/rustllvm/RustWrapper.cpp @@ -659,7 +659,7 @@ LLVMRustLinkInExternalBitcode(LLVMModuleRef dst, char *bc, size_t len) { extern "C" void* LLVMRustOpenArchive(char *path) { std::unique_ptr<MemoryBuffer> buf; - error_code err = MemoryBuffer::getFile(path, buf); + std::error_code err = MemoryBuffer::getFile(path, buf); if (err) { LLVMRustSetLastError(err.message().c_str()); return NULL; @@ -694,14 +694,18 @@ LLVMRustArchiveReadSection(Archive *ar, char *name, size_t *size) { #if LLVM_VERSION_MINOR >= 5 Archive::child_iterator child = ar->child_begin(), end = ar->child_end(); + for (; child != end; ++child) { + ErrorOr<StringRef> name_or_err = child->getName(); + if (name_or_err.getError()) continue; + StringRef sect_name = name_or_err.get(); #else Archive::child_iterator child = ar->begin_children(), end = ar->end_children(); -#endif for (; child != end; ++child) { StringRef sect_name; error_code err = child->getName(sect_name); if (err) continue; +#endif if (sect_name.trim(" ") == name) { StringRef buf = child->getBuffer(); *size = buf.size(); @@ -757,7 +761,11 @@ inline section_iterator *unwrap(LLVMSectionIteratorRef SI) { extern "C" int LLVMRustGetSectionName(LLVMSectionIteratorRef SI, const char **ptr) { StringRef ret; +#if LLVM_VERSION_MINOR >= 5 + if (std::error_code ec = (*unwrap(SI))->getName(ret)) +#else if (error_code ec = (*unwrap(SI))->getName(ret)) +#endif report_fatal_error(ec.message()); *ptr = ret.data(); return ret.size(); |
