Auto merge of #23381 - Manishearth:rollup, r=Manishearth
r? @Manishearth
This commit is contained in:
commit
f59af75bd8
4
configure
vendored
4
configure
vendored
@ -823,11 +823,11 @@ then
|
||||
LLVM_VERSION=$($LLVM_CONFIG --version)
|
||||
|
||||
case $LLVM_VERSION in
|
||||
(3.[2-6]*)
|
||||
(3.[5-6]*)
|
||||
msg "found ok version of LLVM: $LLVM_VERSION"
|
||||
;;
|
||||
(*)
|
||||
err "bad LLVM version: $LLVM_VERSION, need >=3.0svn"
|
||||
err "bad LLVM version: $LLVM_VERSION, need >=3.5"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
@ -290,6 +290,7 @@ LLVM_VERSION_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --version)
|
||||
LLVM_BINDIR_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --bindir)
|
||||
LLVM_INCDIR_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --includedir)
|
||||
LLVM_LIBDIR_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --libdir)
|
||||
LLVM_LIBDIR_RUSTFLAGS_$(1)=-L "$$(LLVM_LIBDIR_$(1))"
|
||||
LLVM_LIBS_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --libs $$(LLVM_COMPONENTS))
|
||||
LLVM_LDFLAGS_$(1)=$$(shell "$$(LLVM_CONFIG_$(1))" --ldflags)
|
||||
# On FreeBSD, it may search wrong headers (that are for pre-installed LLVM),
|
||||
|
@ -84,7 +84,7 @@ $$(TLIB$(1)_T_$(2)_H_$(3))/stamp.$(4): \
|
||||
$$(subst @,,$$(STAGE$(1)_T_$(2)_H_$(3))) \
|
||||
$$(RUST_LIB_FLAGS_ST$(1)) \
|
||||
-L "$$(RT_OUTPUT_DIR_$(2))" \
|
||||
-L "$$(LLVM_LIBDIR_$(2))" \
|
||||
$$(LLVM_LIBDIR_RUSTFLAGS_$(2)) \
|
||||
$$(LLVM_STDCPP_RUSTFLAGS_$(2)) \
|
||||
$$(RUSTFLAGS_$(4)) \
|
||||
--out-dir $$(@D) \
|
||||
|
@ -372,7 +372,7 @@ $(3)/stage$(1)/test/$(4)test-$(2)$$(X_$(2)): \
|
||||
$(Q)CFG_LLVM_LINKAGE_FILE=$$(LLVM_LINKAGE_PATH_$(3)) \
|
||||
$$(subst @,,$$(STAGE$(1)_T_$(2)_H_$(3))) -o $$@ $$< --test \
|
||||
-L "$$(RT_OUTPUT_DIR_$(2))" \
|
||||
-L "$$(LLVM_LIBDIR_$(2))" \
|
||||
$$(LLVM_LIBDIR_RUSTFLAGS_$(2)) \
|
||||
$$(RUSTFLAGS_$(4))
|
||||
|
||||
endef
|
||||
|
@ -68,7 +68,7 @@ is that a moving closure always takes ownership of all variables that
|
||||
it uses. Ordinary closures, in contrast, just create a reference into
|
||||
the enclosing stack frame. Moving closures are most useful with Rust's
|
||||
concurrency features, and so we'll just leave it at this for
|
||||
now. We'll talk about them more in the "Threads" section of the guide.
|
||||
now. We'll talk about them more in the "Concurrency" chapter of the book.
|
||||
|
||||
## Accepting closures as arguments
|
||||
|
||||
|
@ -339,7 +339,7 @@ fn main() {
|
||||
});
|
||||
}
|
||||
|
||||
rx.recv().ok().expect("Could not recieve answer");
|
||||
rx.recv().ok().expect("Could not receive answer");
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -187,13 +187,13 @@ impl CircleBuilder {
|
||||
}
|
||||
|
||||
fn coordinate(&mut self, coordinate: f64) -> &mut CircleBuilder {
|
||||
self.coordinate = coordinate;
|
||||
self
|
||||
self.coordinate = coordinate;
|
||||
self
|
||||
}
|
||||
|
||||
fn radius(&mut self, radius: f64) -> &mut CircleBuilder {
|
||||
self.radius = radius;
|
||||
self
|
||||
self.radius = radius;
|
||||
self
|
||||
}
|
||||
|
||||
fn finalize(&self) -> Circle {
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
use std::slice;
|
||||
use std::path::{Path, PathBuf};
|
||||
use session::early_error;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct SearchPaths {
|
||||
@ -50,6 +51,9 @@ impl SearchPaths {
|
||||
} else {
|
||||
(PathKind::All, path)
|
||||
};
|
||||
if path.is_empty() {
|
||||
early_error("empty search path given via `-L`");
|
||||
}
|
||||
self.paths.push((kind, PathBuf::new(path)));
|
||||
}
|
||||
|
||||
|
@ -811,7 +811,7 @@ impl NonCamelCaseTypes {
|
||||
if i == 0 {
|
||||
c.to_uppercase().collect::<String>()
|
||||
} else {
|
||||
c.to_string()
|
||||
c.to_lowercase().collect()
|
||||
}
|
||||
)).collect::<Vec<_>>().concat()
|
||||
}
|
||||
|
@ -293,7 +293,7 @@ pub fn write_content<'blk, 'tcx>(bcx: Block<'blk, 'tcx>,
|
||||
}
|
||||
SaveIn(lldest) => {
|
||||
match ty::eval_repeat_count(bcx.tcx(), &**count_expr) {
|
||||
0 => bcx,
|
||||
0 => expr::trans_into(bcx, &**element, Ignore),
|
||||
1 => expr::trans_into(bcx, &**element, SaveIn(lldest)),
|
||||
count => {
|
||||
let elem = unpack_datum!(bcx, expr::trans(bcx, &**element));
|
||||
@ -410,8 +410,12 @@ pub fn iter_vec_loop<'blk, 'tcx, F>(bcx: Block<'blk, 'tcx>,
|
||||
F: FnOnce(Block<'blk, 'tcx>, ValueRef, Ty<'tcx>) -> Block<'blk, 'tcx>,
|
||||
{
|
||||
let _icx = push_ctxt("tvec::iter_vec_loop");
|
||||
let fcx = bcx.fcx;
|
||||
|
||||
if bcx.unreachable.get() {
|
||||
return bcx;
|
||||
}
|
||||
|
||||
let fcx = bcx.fcx;
|
||||
let loop_bcx = fcx.new_temp_block("expr_repeat");
|
||||
let next_bcx = fcx.new_temp_block("expr_repeat: next");
|
||||
|
||||
|
@ -14,11 +14,7 @@
|
||||
#include "llvm/IR/DiagnosticInfo.h"
|
||||
#include "llvm/IR/DiagnosticPrinter.h"
|
||||
|
||||
#if LLVM_VERSION_MINOR >= 5
|
||||
#include "llvm/IR/CallSite.h"
|
||||
#else
|
||||
#include "llvm/Support/CallSite.h"
|
||||
#endif
|
||||
|
||||
//===----------------------------------------------------------------------===
|
||||
//
|
||||
@ -33,7 +29,6 @@ using namespace llvm::object;
|
||||
|
||||
static char *LastError;
|
||||
|
||||
#if LLVM_VERSION_MINOR >= 5
|
||||
extern "C" LLVMMemoryBufferRef
|
||||
LLVMRustCreateMemoryBufferWithContentsOfFile(const char *Path) {
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>> buf_or = MemoryBuffer::getFile(Path,
|
||||
@ -45,18 +40,6 @@ LLVMRustCreateMemoryBufferWithContentsOfFile(const char *Path) {
|
||||
}
|
||||
return wrap(buf_or.get().release());
|
||||
}
|
||||
#else
|
||||
extern "C" LLVMMemoryBufferRef
|
||||
LLVMRustCreateMemoryBufferWithContentsOfFile(const char *Path) {
|
||||
OwningPtr<MemoryBuffer> buf;
|
||||
error_code err = MemoryBuffer::getFile(Path, buf, -1, false);
|
||||
if (err) {
|
||||
LLVMRustSetLastError(err.message().c_str());
|
||||
return NULL;
|
||||
}
|
||||
return wrap(buf.take());
|
||||
}
|
||||
#endif
|
||||
|
||||
extern "C" char *LLVMRustGetLastError(void) {
|
||||
char *ret = LastError;
|
||||
@ -116,7 +99,6 @@ extern "C" void LLVMAddCallSiteAttribute(LLVMValueRef Instr, unsigned index, uin
|
||||
}
|
||||
|
||||
|
||||
#if LLVM_VERSION_MINOR >= 5
|
||||
extern "C" void LLVMAddDereferenceableCallSiteAttr(LLVMValueRef Instr, unsigned idx, uint64_t b) {
|
||||
CallSite Call = CallSite(unwrap<Instruction>(Instr));
|
||||
AttrBuilder B;
|
||||
@ -126,9 +108,6 @@ extern "C" void LLVMAddDereferenceableCallSiteAttr(LLVMValueRef Instr, unsigned
|
||||
AttributeSet::get(Call->getContext(),
|
||||
idx, B)));
|
||||
}
|
||||
#else
|
||||
extern "C" void LLVMAddDereferenceableCallSiteAttr(LLVMValueRef, unsigned, uint64_t) {}
|
||||
#endif
|
||||
|
||||
extern "C" void LLVMAddFunctionAttribute(LLVMValueRef Fn, unsigned index, uint64_t Val) {
|
||||
Function *A = unwrap<Function>(Fn);
|
||||
@ -137,16 +116,12 @@ extern "C" void LLVMAddFunctionAttribute(LLVMValueRef Fn, unsigned index, uint64
|
||||
A->addAttributes(index, AttributeSet::get(A->getContext(), index, B));
|
||||
}
|
||||
|
||||
#if LLVM_VERSION_MINOR >= 5
|
||||
extern "C" void LLVMAddDereferenceableAttr(LLVMValueRef Fn, unsigned index, uint64_t bytes) {
|
||||
Function *A = unwrap<Function>(Fn);
|
||||
AttrBuilder B;
|
||||
B.addDereferenceableAttr(bytes);
|
||||
A->addAttributes(index, AttributeSet::get(A->getContext(), index, B));
|
||||
}
|
||||
#else
|
||||
extern "C" void LLVMAddDereferenceableAttr(LLVMValueRef, unsigned, uint64_t) {}
|
||||
#endif
|
||||
|
||||
extern "C" void LLVMAddFunctionAttrString(LLVMValueRef Fn, unsigned index, const char *Name) {
|
||||
Function *F = unwrap<Function>(Fn);
|
||||
@ -199,10 +174,8 @@ extern "C" LLVMValueRef LLVMBuildAtomicCmpXchg(LLVMBuilderRef B,
|
||||
AtomicOrdering order,
|
||||
AtomicOrdering failure_order) {
|
||||
return wrap(unwrap(B)->CreateAtomicCmpXchg(unwrap(target), unwrap(old),
|
||||
unwrap(source), order
|
||||
#if LLVM_VERSION_MINOR >= 5
|
||||
, failure_order
|
||||
#endif
|
||||
unwrap(source), order,
|
||||
failure_order
|
||||
));
|
||||
}
|
||||
extern "C" LLVMValueRef LLVMBuildAtomicFence(LLVMBuilderRef B, AtomicOrdering order) {
|
||||
@ -247,11 +220,7 @@ DIT unwrapDI(LLVMMetadataRef ref) {
|
||||
return DIT(ref ? unwrap<MDNode>(ref) : NULL);
|
||||
}
|
||||
|
||||
#if LLVM_VERSION_MINOR >= 5
|
||||
extern "C" const uint32_t LLVMRustDebugMetadataVersion = DEBUG_METADATA_VERSION;
|
||||
#else
|
||||
extern "C" const uint32_t LLVMRustDebugMetadataVersion = 1;
|
||||
#endif
|
||||
|
||||
extern "C" void LLVMRustAddModuleFlag(LLVMModuleRef M,
|
||||
const char *name,
|
||||
@ -383,10 +352,8 @@ extern "C" LLVMMetadataRef LLVMDIBuilderCreateStructType(
|
||||
unwrapDI<DIType>(DerivedFrom),
|
||||
unwrapDI<DIArray>(Elements),
|
||||
RunTimeLang,
|
||||
unwrapDI<DIType>(VTableHolder)
|
||||
#if LLVM_VERSION_MINOR >= 4
|
||||
,UniqueId
|
||||
#endif
|
||||
unwrapDI<DIType>(VTableHolder),
|
||||
UniqueId
|
||||
));
|
||||
}
|
||||
|
||||
@ -465,8 +432,8 @@ extern "C" LLVMMetadataRef LLVMDIBuilderCreateVariable(
|
||||
#if LLVM_VERSION_MINOR < 6
|
||||
if (AddrOpsCount > 0) {
|
||||
SmallVector<llvm::Value *, 16> addr_ops;
|
||||
llvm::Type *Int64Ty = Type::getInt64Ty(VMContext);
|
||||
for (int i = 0; i < AddrOpsCount; ++i)
|
||||
llvm::Type *Int64Ty = Type::getInt64Ty(unwrap<MDNode>(Scope)->getContext());
|
||||
for (unsigned i = 0; i < AddrOpsCount; ++i)
|
||||
addr_ops.push_back(ConstantInt::get(Int64Ty, AddrOps[i]));
|
||||
|
||||
return wrap(Builder->createComplexVariable(
|
||||
@ -522,7 +489,11 @@ extern "C" LLVMMetadataRef LLVMDIBuilderGetOrCreateArray(
|
||||
LLVMMetadataRef* Ptr,
|
||||
unsigned Count) {
|
||||
return wrap(Builder->getOrCreateArray(
|
||||
#if LLVM_VERSION_MINOR >= 6
|
||||
ArrayRef<Metadata*>(unwrap(Ptr), Count)));
|
||||
#else
|
||||
ArrayRef<Value*>(reinterpret_cast<Value**>(Ptr), Count)));
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" LLVMValueRef LLVMDIBuilderInsertDeclareAtEnd(
|
||||
@ -627,19 +598,11 @@ extern "C" LLVMMetadataRef LLVMDIBuilderCreateUnionType(
|
||||
AlignInBits,
|
||||
Flags,
|
||||
unwrapDI<DIArray>(Elements),
|
||||
RunTimeLang
|
||||
#if LLVM_VERSION_MINOR >= 4
|
||||
,UniqueId
|
||||
#endif
|
||||
RunTimeLang,
|
||||
UniqueId
|
||||
));
|
||||
}
|
||||
|
||||
#if LLVM_VERSION_MINOR < 5
|
||||
extern "C" void LLVMSetUnnamedAddr(LLVMValueRef Value, LLVMBool Unnamed) {
|
||||
unwrap<GlobalValue>(Value)->setUnnamedAddr(Unnamed);
|
||||
}
|
||||
#endif
|
||||
|
||||
extern "C" LLVMMetadataRef LLVMDIBuilderCreateTemplateTypeParameter(
|
||||
DIBuilderRef Builder,
|
||||
LLVMMetadataRef Scope,
|
||||
@ -730,7 +693,6 @@ extern "C" void LLVMWriteValueToString(LLVMValueRef Value, RustStringRef str) {
|
||||
os << ")";
|
||||
}
|
||||
|
||||
#if LLVM_VERSION_MINOR >= 5
|
||||
extern "C" bool
|
||||
LLVMRustLinkInExternalBitcode(LLVMModuleRef dst, char *bc, size_t len) {
|
||||
Module *Dst = unwrap(dst);
|
||||
@ -763,28 +725,7 @@ LLVMRustLinkInExternalBitcode(LLVMModuleRef dst, char *bc, size_t len) {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
#else
|
||||
extern "C" bool
|
||||
LLVMRustLinkInExternalBitcode(LLVMModuleRef dst, char *bc, size_t len) {
|
||||
Module *Dst = unwrap(dst);
|
||||
MemoryBuffer* buf = MemoryBuffer::getMemBufferCopy(StringRef(bc, len));
|
||||
std::string Err;
|
||||
Module *Src = llvm::getLazyBitcodeModule(buf, Dst->getContext(), &Err);
|
||||
if (!Src) {
|
||||
LLVMRustSetLastError(Err.c_str());
|
||||
delete buf;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Linker::LinkModules(Dst, Src, Linker::DestroySource, &Err)) {
|
||||
LLVMRustSetLastError(Err.c_str());
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if LLVM_VERSION_MINOR >= 5
|
||||
extern "C" void*
|
||||
LLVMRustOpenArchive(char *path) {
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>> buf_or = MemoryBuffer::getFile(path,
|
||||
@ -817,23 +758,6 @@ LLVMRustOpenArchive(char *path) {
|
||||
|
||||
return ret;
|
||||
}
|
||||
#else
|
||||
extern "C" void*
|
||||
LLVMRustOpenArchive(char *path) {
|
||||
OwningPtr<MemoryBuffer> buf;
|
||||
error_code err = MemoryBuffer::getFile(path, buf, -1, false);
|
||||
if (err) {
|
||||
LLVMRustSetLastError(err.message().c_str());
|
||||
return NULL;
|
||||
}
|
||||
Archive *ret = new Archive(buf.take(), err);
|
||||
if (err) {
|
||||
LLVMRustSetLastError(err.message().c_str());
|
||||
return NULL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
extern "C" const char*
|
||||
#if LLVM_VERSION_MINOR >= 6
|
||||
@ -844,21 +768,12 @@ LLVMRustArchiveReadSection(OwningBinary<Archive> *ob, char *name, size_t *size)
|
||||
LLVMRustArchiveReadSection(Archive *ar, char *name, size_t *size) {
|
||||
#endif
|
||||
|
||||
#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();
|
||||
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();
|
||||
@ -877,18 +792,11 @@ LLVMRustDestroyArchive(Archive *ar) {
|
||||
delete ar;
|
||||
}
|
||||
|
||||
#if LLVM_VERSION_MINOR >= 5
|
||||
extern "C" void
|
||||
LLVMRustSetDLLExportStorageClass(LLVMValueRef Value) {
|
||||
GlobalValue *V = unwrap<GlobalValue>(Value);
|
||||
V->setDLLStorageClass(GlobalValue::DLLExportStorageClass);
|
||||
}
|
||||
#else
|
||||
extern "C" void
|
||||
LLVMRustSetDLLExportStorageClass(LLVMValueRef Value) {
|
||||
LLVMSetLinkage(Value, LLVMDLLExportLinkage);
|
||||
}
|
||||
#endif
|
||||
|
||||
extern "C" int
|
||||
LLVMVersionMinor() {
|
||||
@ -918,11 +826,7 @@ 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();
|
||||
|
@ -11,6 +11,9 @@
|
||||
#![forbid(non_camel_case_types)]
|
||||
#![allow(dead_code)]
|
||||
|
||||
struct ONE_TWO_THREE;
|
||||
//~^ ERROR type `ONE_TWO_THREE` should have a camel case name such as `OneTwoThree`
|
||||
|
||||
struct foo { //~ ERROR type `foo` should have a camel case name such as `Foo`
|
||||
bar: isize,
|
||||
}
|
||||
|
15
src/test/compile-fail/manual-link-bad-search-path.rs
Normal file
15
src/test/compile-fail/manual-link-bad-search-path.rs
Normal file
@ -0,0 +1,15 @@
|
||||
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// compile-flags:-L native=
|
||||
// error-pattern: empty search path given via `-L`
|
||||
|
||||
fn main() {
|
||||
}
|
17
src/test/run-fail/issue-23354-2.rs
Normal file
17
src/test/run-fail/issue-23354-2.rs
Normal file
@ -0,0 +1,17 @@
|
||||
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// error-pattern:panic evaluated
|
||||
|
||||
#[allow(unused_variables)]
|
||||
fn main() {
|
||||
// This used to trigger an LLVM assertion during compilation
|
||||
let x = [panic!("panic evaluated"); 2];
|
||||
}
|
16
src/test/run-fail/issue-23354.rs
Normal file
16
src/test/run-fail/issue-23354.rs
Normal file
@ -0,0 +1,16 @@
|
||||
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// error-pattern:panic evaluated
|
||||
|
||||
#[allow(unused_variables)]
|
||||
fn main() {
|
||||
let x = [panic!("panic evaluated"); 0];
|
||||
}
|
Loading…
Reference in New Issue
Block a user