Auto merge of #47225 - GuillaumeGomez:rollup, r=GuillaumeGomez
Rollup of 5 pull requests - Successful merges: #46987, #47165, #47173, #47202, #47216 - Failed merges:
This commit is contained in:
commit
8d370ec908
|
@ -538,9 +538,6 @@ extern "C" {
|
|||
/// See llvm::LLVMTypeKind::getTypeID.
|
||||
pub fn LLVMRustGetTypeKind(Ty: TypeRef) -> TypeKind;
|
||||
|
||||
/// See llvm::Value::getContext
|
||||
pub fn LLVMRustGetValueContext(V: ValueRef) -> ContextRef;
|
||||
|
||||
// Operations on integer types
|
||||
pub fn LLVMInt1TypeInContext(C: ContextRef) -> TypeRef;
|
||||
pub fn LLVMInt8TypeInContext(C: ContextRef) -> TypeRef;
|
||||
|
@ -812,13 +809,12 @@ extern "C" {
|
|||
Bundle: OperandBundleDefRef,
|
||||
Name: *const c_char)
|
||||
-> ValueRef;
|
||||
pub fn LLVMRustBuildLandingPad(B: BuilderRef,
|
||||
Ty: TypeRef,
|
||||
PersFn: ValueRef,
|
||||
NumClauses: c_uint,
|
||||
Name: *const c_char,
|
||||
F: ValueRef)
|
||||
-> ValueRef;
|
||||
pub fn LLVMBuildLandingPad(B: BuilderRef,
|
||||
Ty: TypeRef,
|
||||
PersFn: ValueRef,
|
||||
NumClauses: c_uint,
|
||||
Name: *const c_char)
|
||||
-> ValueRef;
|
||||
pub fn LLVMBuildResume(B: BuilderRef, Exn: ValueRef) -> ValueRef;
|
||||
pub fn LLVMBuildUnreachable(B: BuilderRef) -> ValueRef;
|
||||
|
||||
|
|
|
@ -1012,12 +1012,11 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
|||
}
|
||||
|
||||
pub fn landing_pad(&self, ty: Type, pers_fn: ValueRef,
|
||||
num_clauses: usize,
|
||||
llfn: ValueRef) -> ValueRef {
|
||||
num_clauses: usize) -> ValueRef {
|
||||
self.count_insn("landingpad");
|
||||
unsafe {
|
||||
llvm::LLVMRustBuildLandingPad(self.llbuilder, ty.to_ref(), pers_fn,
|
||||
num_clauses as c_uint, noname(), llfn)
|
||||
llvm::LLVMBuildLandingPad(self.llbuilder, ty.to_ref(), pers_fn,
|
||||
num_clauses as c_uint, noname())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -925,7 +925,7 @@ fn trans_gnu_try<'a, 'tcx>(bcx: &Builder<'a, 'tcx>,
|
|||
// rust_try ignores the selector.
|
||||
let lpad_ty = Type::struct_(ccx, &[Type::i8p(ccx), Type::i32(ccx)],
|
||||
false);
|
||||
let vals = catch.landing_pad(lpad_ty, bcx.ccx.eh_personality(), 1, catch.llfn());
|
||||
let vals = catch.landing_pad(lpad_ty, bcx.ccx.eh_personality(), 1);
|
||||
catch.add_clause(vals, C_null(Type::i8p(ccx)));
|
||||
let ptr = catch.extract_value(vals, 0);
|
||||
let ptr_align = bcx.tcx().data_layout.pointer_align;
|
||||
|
|
|
@ -753,7 +753,7 @@ impl<'a, 'tcx> MirContext<'a, 'tcx> {
|
|||
|
||||
let llpersonality = self.ccx.eh_personality();
|
||||
let llretty = self.landing_pad_type();
|
||||
let lp = bcx.landing_pad(llretty, llpersonality, 1, self.llfn);
|
||||
let lp = bcx.landing_pad(llretty, llpersonality, 1);
|
||||
bcx.set_cleanup(lp);
|
||||
|
||||
let slot = self.get_personality_slot(&bcx);
|
||||
|
|
|
@ -1132,6 +1132,10 @@
|
|||
e.preventDefault();
|
||||
} else if (e.which === 16) { // shift
|
||||
// Does nothing, it's just to avoid losing "focus" on the highlighted element.
|
||||
} else if (e.which === 27) { // escape
|
||||
removeClass(actives[currentTab][0], 'highlighted');
|
||||
document.getElementsByClassName('search-input')[0].value = '';
|
||||
defocusSearchBar();
|
||||
} else if (actives[currentTab].length > 0) {
|
||||
removeClass(actives[currentTab][0], 'highlighted');
|
||||
}
|
||||
|
|
|
@ -571,8 +571,11 @@ pub fn temp_dir() -> PathBuf {
|
|||
|
||||
/// Returns the full filesystem path of the current running executable.
|
||||
///
|
||||
/// The path returned is not necessarily a "real path" of the executable as
|
||||
/// there may be intermediate symlinks.
|
||||
/// # Platform-specific behavior
|
||||
///
|
||||
/// If the executable was invoked through a symbolic link, some platforms will
|
||||
/// return the path of the symbolic link and other platforms will return the
|
||||
/// path of the symbolic link’s target.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
|
@ -599,14 +602,14 @@ pub fn temp_dir() -> PathBuf {
|
|||
/// Ok("/home/alex/foo")
|
||||
/// ```
|
||||
///
|
||||
/// And you make a symbolic link of the program:
|
||||
/// And you make a hard link of the program:
|
||||
///
|
||||
/// ```bash
|
||||
/// $ ln foo bar
|
||||
/// ```
|
||||
///
|
||||
/// When you run it, you won't get the original executable, you'll get the
|
||||
/// symlink:
|
||||
/// When you run it, you won’t get the path of the original executable, you’ll
|
||||
/// get the path of the hard link:
|
||||
///
|
||||
/// ```bash
|
||||
/// $ ./bar
|
||||
|
@ -614,9 +617,9 @@ pub fn temp_dir() -> PathBuf {
|
|||
/// ```
|
||||
///
|
||||
/// This sort of behavior has been known to [lead to privilege escalation] when
|
||||
/// used incorrectly, for example.
|
||||
/// used incorrectly.
|
||||
///
|
||||
/// [lead to privilege escalation]: http://securityvulns.com/Wdocument183.html
|
||||
/// [lead to privilege escalation]: https://securityvulns.com/Wdocument183.html
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
|
@ -625,7 +628,7 @@ pub fn temp_dir() -> PathBuf {
|
|||
///
|
||||
/// match env::current_exe() {
|
||||
/// Ok(exe_path) => println!("Path of this executable is: {}",
|
||||
/// exe_path.display()),
|
||||
/// exe_path.display()),
|
||||
/// Err(e) => println!("failed to get current exe path: {}", e),
|
||||
/// };
|
||||
/// ```
|
||||
|
|
|
@ -601,7 +601,7 @@ pub trait Read {
|
|||
read_to_end(self, buf)
|
||||
}
|
||||
|
||||
/// Read all bytes until EOF in this source, placing them into `buf`.
|
||||
/// Read all bytes until EOF in this source, appending them to `buf`.
|
||||
///
|
||||
/// If successful, this function returns the number of bytes which were read
|
||||
/// and appended to `buf`.
|
||||
|
|
|
@ -69,7 +69,7 @@ impl DoubleEndedIterator for Args {
|
|||
target_os = "fuchsia"))]
|
||||
mod imp {
|
||||
use os::unix::prelude::*;
|
||||
use mem;
|
||||
use ptr;
|
||||
use ffi::{CStr, OsString};
|
||||
use marker::PhantomData;
|
||||
use libc;
|
||||
|
@ -77,49 +77,42 @@ mod imp {
|
|||
|
||||
use sys_common::mutex::Mutex;
|
||||
|
||||
static mut GLOBAL_ARGS_PTR: usize = 0;
|
||||
static mut ARGC: isize = 0;
|
||||
static mut ARGV: *const *const u8 = ptr::null();
|
||||
static LOCK: Mutex = Mutex::new();
|
||||
|
||||
pub unsafe fn init(argc: isize, argv: *const *const u8) {
|
||||
let args = (0..argc).map(|i| {
|
||||
CStr::from_ptr(*argv.offset(i) as *const libc::c_char).to_bytes().to_vec()
|
||||
}).collect();
|
||||
|
||||
LOCK.lock();
|
||||
let ptr = get_global_ptr();
|
||||
assert!((*ptr).is_none());
|
||||
(*ptr) = Some(box args);
|
||||
ARGC = argc;
|
||||
ARGV = argv;
|
||||
LOCK.unlock();
|
||||
}
|
||||
|
||||
pub unsafe fn cleanup() {
|
||||
LOCK.lock();
|
||||
*get_global_ptr() = None;
|
||||
ARGC = 0;
|
||||
ARGV = ptr::null();
|
||||
LOCK.unlock();
|
||||
}
|
||||
|
||||
pub fn args() -> Args {
|
||||
let bytes = clone().unwrap_or(Vec::new());
|
||||
let v: Vec<OsString> = bytes.into_iter().map(|v| {
|
||||
OsStringExt::from_vec(v)
|
||||
}).collect();
|
||||
Args { iter: v.into_iter(), _dont_send_or_sync_me: PhantomData }
|
||||
Args {
|
||||
iter: clone().into_iter(),
|
||||
_dont_send_or_sync_me: PhantomData
|
||||
}
|
||||
}
|
||||
|
||||
fn clone() -> Option<Vec<Vec<u8>>> {
|
||||
fn clone() -> Vec<OsString> {
|
||||
unsafe {
|
||||
LOCK.lock();
|
||||
let ptr = get_global_ptr();
|
||||
let ret = (*ptr).as_ref().map(|s| (**s).clone());
|
||||
let ret = (0..ARGC).map(|i| {
|
||||
let cstr = CStr::from_ptr(*ARGV.offset(i) as *const libc::c_char);
|
||||
OsStringExt::from_vec(cstr.to_bytes().to_vec())
|
||||
}).collect();
|
||||
LOCK.unlock();
|
||||
return ret
|
||||
}
|
||||
}
|
||||
|
||||
fn get_global_ptr() -> *mut Option<Box<Vec<Vec<u8>>>> {
|
||||
unsafe { mem::transmute(&GLOBAL_ARGS_PTR) }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#[cfg(any(target_os = "macos",
|
||||
|
|
|
@ -1144,13 +1144,6 @@ extern "C" void LLVMRustWriteSMDiagnosticToString(LLVMSMDiagnosticRef D,
|
|||
unwrap(D)->print("", OS);
|
||||
}
|
||||
|
||||
extern "C" LLVMValueRef
|
||||
LLVMRustBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
|
||||
LLVMValueRef PersFn, unsigned NumClauses,
|
||||
const char *Name, LLVMValueRef F) {
|
||||
return LLVMBuildLandingPad(B, Ty, PersFn, NumClauses, Name);
|
||||
}
|
||||
|
||||
extern "C" LLVMValueRef LLVMRustBuildCleanupPad(LLVMBuilderRef B,
|
||||
LLVMValueRef ParentPad,
|
||||
unsigned ArgCount,
|
||||
|
@ -1355,10 +1348,6 @@ extern "C" bool LLVMRustConstInt128Get(LLVMValueRef CV, bool sext, uint64_t *hig
|
|||
return true;
|
||||
}
|
||||
|
||||
extern "C" LLVMContextRef LLVMRustGetValueContext(LLVMValueRef V) {
|
||||
return wrap(&unwrap(V)->getContext());
|
||||
}
|
||||
|
||||
enum class LLVMRustVisibility {
|
||||
Default = 0,
|
||||
Hidden = 1,
|
||||
|
@ -1439,11 +1428,6 @@ LLVMRustModuleBufferLen(const LLVMRustModuleBuffer *Buffer) {
|
|||
|
||||
extern "C" uint64_t
|
||||
LLVMRustModuleCost(LLVMModuleRef M) {
|
||||
Module &Mod = *unwrap(M);
|
||||
uint64_t cost = 0;
|
||||
for (auto &F : Mod.functions()) {
|
||||
(void)F;
|
||||
cost += 1;
|
||||
}
|
||||
return cost;
|
||||
auto f = unwrap(M)->functions();
|
||||
return std::distance(std::begin(f), std::end(f));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue