Auto merge of #68286 - Dylan-DPC:rollup-x7ssgov, r=Dylan-DPC
Rollup of 5 pull requests Successful merges: - #68033 (Don't use f64 shims for f32 cmath functions on non 32-bit x86 MSVC) - #68244 (Enable leak sanitizer test case) - #68255 (Remove unused auxiliary file that was replaced with rust_test_helpers) - #68263 (rustdoc: HTML escape codeblocks which fail syntax highlighting) - #68274 (remove dead code) Failed merges: r? @ghost
This commit is contained in:
commit
4884061838
@ -3767,16 +3767,12 @@ impl<'tcx> TraitObligation<'tcx> {
|
||||
// NOTE(flaper87): As of now, it keeps track of the whole error
|
||||
// chain. Ideally, we should have a way to configure this either
|
||||
// by using -Z verbose or just a CLI argument.
|
||||
if obligation.recursion_depth >= 0 {
|
||||
let derived_cause = DerivedObligationCause {
|
||||
parent_trait_ref: obligation.predicate.to_poly_trait_ref(),
|
||||
parent_code: Rc::new(obligation.cause.code.clone()),
|
||||
};
|
||||
let derived_code = variant(derived_cause);
|
||||
ObligationCause::new(obligation.cause.span, obligation.cause.body_id, derived_code)
|
||||
} else {
|
||||
obligation.cause.clone()
|
||||
}
|
||||
let derived_cause = DerivedObligationCause {
|
||||
parent_trait_ref: obligation.predicate.to_poly_trait_ref(),
|
||||
parent_code: Rc::new(obligation.cause.code.clone()),
|
||||
};
|
||||
let derived_code = variant(derived_cause);
|
||||
ObligationCause::new(obligation.cause.span, obligation.cause.body_id, derived_code)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -65,7 +65,7 @@ pub fn render_with_highlighting(
|
||||
Err(()) => {
|
||||
// If errors are encountered while trying to highlight, just emit
|
||||
// the unhighlighted source.
|
||||
write!(out, "<pre><code>{}</code></pre>", src).unwrap();
|
||||
write!(out, "<pre><code>{}</code></pre>", Escape(src)).unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -44,23 +44,7 @@ impl f32 {
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[inline]
|
||||
pub fn floor(self) -> f32 {
|
||||
// On MSVC LLVM will lower many math intrinsics to a call to the
|
||||
// corresponding function. On MSVC, however, many of these functions
|
||||
// aren't actually available as symbols to call, but rather they are all
|
||||
// `static inline` functions in header files. This means that from a C
|
||||
// perspective it's "compatible", but not so much from an ABI
|
||||
// perspective (which we're worried about).
|
||||
//
|
||||
// The inline header functions always just cast to a f64 and do their
|
||||
// operation, so we do that here as well, but only for MSVC targets.
|
||||
//
|
||||
// Note that there are many MSVC-specific float operations which
|
||||
// redirect to this comment, so `floorf` is just one case of a missing
|
||||
// function on MSVC, but there are many others elsewhere.
|
||||
#[cfg(target_env = "msvc")]
|
||||
return (self as f64).floor() as f32;
|
||||
#[cfg(not(target_env = "msvc"))]
|
||||
return unsafe { intrinsics::floorf32(self) };
|
||||
unsafe { intrinsics::floorf32(self) }
|
||||
}
|
||||
|
||||
/// Returns the smallest integer greater than or equal to a number.
|
||||
@ -78,11 +62,7 @@ impl f32 {
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[inline]
|
||||
pub fn ceil(self) -> f32 {
|
||||
// see notes above in `floor`
|
||||
#[cfg(target_env = "msvc")]
|
||||
return (self as f64).ceil() as f32;
|
||||
#[cfg(not(target_env = "msvc"))]
|
||||
return unsafe { intrinsics::ceilf32(self) };
|
||||
unsafe { intrinsics::ceilf32(self) }
|
||||
}
|
||||
|
||||
/// Returns the nearest integer to a number. Round half-way cases away from
|
||||
@ -348,11 +328,7 @@ impl f32 {
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[inline]
|
||||
pub fn powf(self, n: f32) -> f32 {
|
||||
// see notes above in `floor`
|
||||
#[cfg(target_env = "msvc")]
|
||||
return (self as f64).powf(n as f64) as f32;
|
||||
#[cfg(not(target_env = "msvc"))]
|
||||
return unsafe { intrinsics::powf32(self, n) };
|
||||
unsafe { intrinsics::powf32(self, n) }
|
||||
}
|
||||
|
||||
/// Returns the square root of a number.
|
||||
@ -399,11 +375,7 @@ impl f32 {
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[inline]
|
||||
pub fn exp(self) -> f32 {
|
||||
// see notes above in `floor`
|
||||
#[cfg(target_env = "msvc")]
|
||||
return (self as f64).exp() as f32;
|
||||
#[cfg(not(target_env = "msvc"))]
|
||||
return unsafe { intrinsics::expf32(self) };
|
||||
unsafe { intrinsics::expf32(self) }
|
||||
}
|
||||
|
||||
/// Returns `2^(self)`.
|
||||
@ -447,11 +419,7 @@ impl f32 {
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[inline]
|
||||
pub fn ln(self) -> f32 {
|
||||
// see notes above in `floor`
|
||||
#[cfg(target_env = "msvc")]
|
||||
return (self as f64).ln() as f32;
|
||||
#[cfg(not(target_env = "msvc"))]
|
||||
return unsafe { intrinsics::logf32(self) };
|
||||
unsafe { intrinsics::logf32(self) }
|
||||
}
|
||||
|
||||
/// Returns the logarithm of the number with respect to an arbitrary base.
|
||||
@ -521,11 +489,7 @@ impl f32 {
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[inline]
|
||||
pub fn log10(self) -> f32 {
|
||||
// see notes above in `floor`
|
||||
#[cfg(target_env = "msvc")]
|
||||
return (self as f64).log10() as f32;
|
||||
#[cfg(not(target_env = "msvc"))]
|
||||
return unsafe { intrinsics::log10f32(self) };
|
||||
unsafe { intrinsics::log10f32(self) }
|
||||
}
|
||||
|
||||
/// The positive difference of two numbers.
|
||||
@ -625,11 +589,7 @@ impl f32 {
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[inline]
|
||||
pub fn sin(self) -> f32 {
|
||||
// see notes in `core::f32::Float::floor`
|
||||
#[cfg(target_env = "msvc")]
|
||||
return (self as f64).sin() as f32;
|
||||
#[cfg(not(target_env = "msvc"))]
|
||||
return unsafe { intrinsics::sinf32(self) };
|
||||
unsafe { intrinsics::sinf32(self) }
|
||||
}
|
||||
|
||||
/// Computes the cosine of a number (in radians).
|
||||
@ -649,11 +609,7 @@ impl f32 {
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[inline]
|
||||
pub fn cos(self) -> f32 {
|
||||
// see notes in `core::f32::Float::floor`
|
||||
#[cfg(target_env = "msvc")]
|
||||
return (self as f64).cos() as f32;
|
||||
#[cfg(not(target_env = "msvc"))]
|
||||
return unsafe { intrinsics::cosf32(self) };
|
||||
unsafe { intrinsics::cosf32(self) }
|
||||
}
|
||||
|
||||
/// Computes the tangent of a number (in radians).
|
||||
|
@ -27,7 +27,7 @@ extern "C" {
|
||||
|
||||
pub use self::shims::*;
|
||||
|
||||
#[cfg(not(target_env = "msvc"))]
|
||||
#[cfg(not(all(target_env = "msvc", target_arch = "x86")))]
|
||||
mod shims {
|
||||
use libc::c_float;
|
||||
|
||||
@ -43,10 +43,10 @@ mod shims {
|
||||
}
|
||||
}
|
||||
|
||||
// On MSVC these functions aren't defined, so we just define shims which promote
|
||||
// everything fo f64, perform the calculation, and then demote back to f32.
|
||||
// While not precisely correct should be "correct enough" for now.
|
||||
#[cfg(target_env = "msvc")]
|
||||
// On 32-bit x86 MSVC these functions aren't defined, so we just define shims
|
||||
// which promote everything fo f64, perform the calculation, and then demote
|
||||
// back to f32. While not precisely correct should be "correct enough" for now.
|
||||
#[cfg(all(target_env = "msvc", target_arch = "x86"))]
|
||||
mod shims {
|
||||
use libc::c_float;
|
||||
|
||||
|
@ -1,11 +1,7 @@
|
||||
-include ../tools.mk
|
||||
|
||||
# needs-sanitizer-support
|
||||
# only-linux
|
||||
# only-x86_64
|
||||
# ignore-test
|
||||
# FIXME(#46126) ThinLTO for libstd broke this test
|
||||
|
||||
all:
|
||||
$(RUSTC) -C opt-level=1 -g -Z sanitizer=leak -Z print-link-args leak.rs | $(CGREP) rustc_rt.lsan
|
||||
$(RUSTC) -O -Z sanitizer=leak -Z print-link-args leak.rs | $(CGREP) rustc_rt.lsan
|
||||
$(TMPDIR)/leak 2>&1 | $(CGREP) 'detected memory leaks'
|
||||
|
@ -1,6 +1,13 @@
|
||||
#![feature(test)]
|
||||
|
||||
use std::hint::black_box;
|
||||
use std::mem;
|
||||
|
||||
fn main() {
|
||||
let xs = vec![1, 2, 3, 4];
|
||||
mem::forget(xs);
|
||||
for _ in 0..10 {
|
||||
let xs = vec![1, 2, 3];
|
||||
// Prevent compiler from removing the memory allocation.
|
||||
let xs = black_box(xs);
|
||||
mem::forget(xs);
|
||||
}
|
||||
}
|
||||
|
@ -25,3 +25,11 @@ pub fn quux() {}
|
||||
/// \_
|
||||
/// ```
|
||||
pub fn ok() {}
|
||||
|
||||
// @has bad_codeblock_syntax/fn.escape.html
|
||||
// @has - '//*[@class="docblock"]/pre/code' '\_ <script>alert("not valid Rust");</script>'
|
||||
/// ```
|
||||
/// \_
|
||||
/// <script>alert("not valid Rust");</script>
|
||||
/// ```
|
||||
pub fn escape() {}
|
||||
|
@ -1,5 +0,0 @@
|
||||
// no-prefer-dynamic
|
||||
#![crate_type = "staticlib"]
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn foo(x:i32) -> i32 { x }
|
Loading…
Reference in New Issue
Block a user