Auto merge of #106054 - matthiaskrgr:rollup-38epsfh, r=matthiaskrgr
Rollup of 6 pull requests Successful merges: - #105567 (KCFI test: Also support LLVM 16 output) - #105847 (Ensure param-env is const before calling `eval_to_valtree`) - #105983 (Add a missing early return in drop tracking `handle_uninhabited_return`) - #106027 (rustdoc: simplify CSS and DOM for more-scraped-examples) - #106035 (Migrate search tab title color to CSS variable) - #106037 (Add regression test for #94293) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
8a97b4812a
@ -577,8 +577,10 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
||||
ty::ConstKind::Unevaluated(uv) => {
|
||||
let instance = self.resolve(uv.def, uv.substs)?;
|
||||
let cid = GlobalId { instance, promoted: None };
|
||||
self.ctfe_query(span, |tcx| tcx.eval_to_valtree(self.param_env.and(cid)))?
|
||||
.unwrap_or_else(|| bug!("unable to create ValTree for {uv:?}"))
|
||||
self.ctfe_query(span, |tcx| {
|
||||
tcx.eval_to_valtree(self.param_env.with_const().and(cid))
|
||||
})?
|
||||
.unwrap_or_else(|| bug!("unable to create ValTree for {uv:?}"))
|
||||
}
|
||||
ty::ConstKind::Bound(..) | ty::ConstKind::Infer(..) => {
|
||||
span_bug!(self.cur_span(), "unexpected ConstKind in ctfe: {val:?}")
|
||||
|
@ -233,6 +233,7 @@ impl<'a, 'tcx> DropRangeVisitor<'a, 'tcx> {
|
||||
self.tcx()
|
||||
.sess
|
||||
.delay_span_bug(expr.span, format!("could not resolve infer vars in `{ty}`"));
|
||||
return;
|
||||
}
|
||||
let ty = self.tcx().erase_regions(ty);
|
||||
let m = self.tcx().parent_module(expr.hir_id).to_def_id();
|
||||
|
@ -3005,8 +3005,7 @@ fn render_call_locations(w: &mut Buffer, cx: &mut Context<'_>, item: &clean::Ite
|
||||
</summary>\
|
||||
<div class=\"hide-more\">Hide additional examples</div>\
|
||||
<div class=\"more-scraped-examples\">\
|
||||
<div class=\"toggle-line\"><div class=\"toggle-line-inner\"></div></div>\
|
||||
<div class=\"more-scraped-examples-inner\">"
|
||||
<div class=\"toggle-line\"><div class=\"toggle-line-inner\"></div></div>"
|
||||
);
|
||||
|
||||
// Only generate inline code for MAX_FULL_EXAMPLES number of examples. Otherwise we could
|
||||
@ -3030,7 +3029,7 @@ fn render_call_locations(w: &mut Buffer, cx: &mut Context<'_>, item: &clean::Ite
|
||||
write!(w, "</ul></div>");
|
||||
}
|
||||
|
||||
write!(w, "</div></div></details>");
|
||||
write!(w, "</div></details>");
|
||||
}
|
||||
|
||||
write!(w, "</div>");
|
||||
|
@ -1281,6 +1281,7 @@ a.test-arrow:hover {
|
||||
#titles > button > div.count {
|
||||
display: inline-block;
|
||||
font-size: 1rem;
|
||||
color: var(--search-tab-title-count-color);
|
||||
}
|
||||
|
||||
#src-sidebar-toggle {
|
||||
@ -1991,20 +1992,15 @@ in storage.js
|
||||
}
|
||||
|
||||
.more-scraped-examples {
|
||||
margin-left: 5px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.more-scraped-examples-inner {
|
||||
/* 20px is width of toggle-line + toggle-line-inner */
|
||||
width: calc(100% - 20px);
|
||||
margin-left: 25px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.toggle-line {
|
||||
align-self: stretch;
|
||||
margin-right: 10px;
|
||||
margin-top: 5px;
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
bottom: 0;
|
||||
right: calc(100% + 10px);
|
||||
padding: 0 4px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
@ -45,6 +45,7 @@ Original by Dempfi (https://github.com/dempfi/ayu)
|
||||
--search-color: #fff;
|
||||
--search-results-alias-color: #c5c5c5;
|
||||
--search-results-grey-color: #999;
|
||||
--search-tab-title-count-color: #888;
|
||||
--stab-background-color: #314559;
|
||||
--stab-code-color: #e6e1cf;
|
||||
--code-highlight-kw-color: #ff7733;
|
||||
@ -175,10 +176,6 @@ pre, .rustdoc.source .example-wrap {
|
||||
border-bottom: 1px solid rgba(242, 151, 24, 0.3);
|
||||
}
|
||||
|
||||
#titles > button > div.count {
|
||||
color: #888;
|
||||
}
|
||||
|
||||
/* rules that this theme does not need to set, here to satisfy the rule checker */
|
||||
/* note that a lot of these are partially set in some way (meaning they are set
|
||||
individually rather than as a group) */
|
||||
|
@ -40,6 +40,7 @@
|
||||
--search-color: #111;
|
||||
--search-results-alias-color: #fff;
|
||||
--search-results-grey-color: #ccc;
|
||||
--search-tab-title-count-color: #888;
|
||||
--stab-background-color: #314559;
|
||||
--stab-code-color: #e6e1cf;
|
||||
--code-highlight-kw-color: #ab8ac1;
|
||||
@ -96,10 +97,6 @@
|
||||
background-color: #353535;
|
||||
}
|
||||
|
||||
#titles > button > div.count {
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.scraped-example-list .scrape-help {
|
||||
border-color: #aaa;
|
||||
color: #eee;
|
||||
|
@ -40,6 +40,7 @@
|
||||
--search-color: #000;
|
||||
--search-results-alias-color: #000;
|
||||
--search-results-grey-color: #999;
|
||||
--search-tab-title-count-color: #888;
|
||||
--stab-background-color: #fff5d6;
|
||||
--stab-code-color: #000;
|
||||
--code-highlight-kw-color: #8959a8;
|
||||
@ -93,10 +94,6 @@
|
||||
border-top-color: #0089ff;
|
||||
}
|
||||
|
||||
#titles > button > div.count {
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.scraped-example-list .scrape-help {
|
||||
border-color: #555;
|
||||
color: #333;
|
||||
|
@ -20,24 +20,21 @@ impl Copy for i32 {}
|
||||
|
||||
pub fn foo(f: fn(i32) -> i32, arg: i32) -> i32 {
|
||||
// CHECK-LABEL: define{{.*}}foo
|
||||
// FIXME(rcvalle): Change <unknown kind #36> to !kcfi_type when Rust is updated to LLVM 16
|
||||
// CHECK-SAME: {{.*}}!<unknown kind #36> ![[TYPE1:[0-9]+]]
|
||||
// CHECK-SAME: {{.*}}!{{<unknown kind #36>|kcfi_type}} ![[TYPE1:[0-9]+]]
|
||||
// CHECK: call i32 %f(i32 %arg){{.*}}[ "kcfi"(i32 -1666898348) ]
|
||||
f(arg)
|
||||
}
|
||||
|
||||
pub fn bar(f: fn(i32, i32) -> i32, arg1: i32, arg2: i32) -> i32 {
|
||||
// CHECK-LABEL: define{{.*}}bar
|
||||
// FIXME(rcvalle): Change <unknown kind #36> to !kcfi_type when Rust is updated to LLVM 16
|
||||
// CHECK-SAME: {{.*}}!<unknown kind #36> ![[TYPE2:[0-9]+]]
|
||||
// CHECK-SAME: {{.*}}!{{<unknown kind #36>|kcfi_type}} ![[TYPE2:[0-9]+]]
|
||||
// CHECK: call i32 %f(i32 %arg1, i32 %arg2){{.*}}[ "kcfi"(i32 -1789026986) ]
|
||||
f(arg1, arg2)
|
||||
}
|
||||
|
||||
pub fn baz(f: fn(i32, i32, i32) -> i32, arg1: i32, arg2: i32, arg3: i32) -> i32 {
|
||||
// CHECK-LABEL: define{{.*}}baz
|
||||
// FIXME(rcvalle): Change <unknown kind #36> to !kcfi_type when Rust is updated to LLVM 16
|
||||
// CHECK-SAME: {{.*}}!<unknown kind #36> ![[TYPE3:[0-9]+]]
|
||||
// CHECK-SAME: {{.*}}!{{<unknown kind #36>|kcfi_type}} ![[TYPE3:[0-9]+]]
|
||||
// CHECK: call i32 %f(i32 %arg1, i32 %arg2, i32 %arg3){{.*}}[ "kcfi"(i32 1248878270) ]
|
||||
f(arg1, arg2, arg3)
|
||||
}
|
||||
|
@ -10,13 +10,8 @@ assert-property-false: (
|
||||
// Check that examples with very long lines have the same width as ones that don't.
|
||||
store-property: (
|
||||
clientWidth,
|
||||
".more-scraped-examples .scraped-example:nth-child(1) .code-wrapper .src-line-numbers",
|
||||
"clientWidth"
|
||||
)
|
||||
|
||||
assert-property: (
|
||||
".more-scraped-examples .scraped-example:nth-child(2) .code-wrapper .src-line-numbers",
|
||||
{"clientWidth": |clientWidth|}
|
||||
"clientWidth"
|
||||
)
|
||||
|
||||
assert-property: (
|
||||
@ -33,3 +28,8 @@ assert-property: (
|
||||
".more-scraped-examples .scraped-example:nth-child(5) .code-wrapper .src-line-numbers",
|
||||
{"clientWidth": |clientWidth|}
|
||||
)
|
||||
|
||||
assert-property: (
|
||||
".more-scraped-examples .scraped-example:nth-child(6) .code-wrapper .src-line-numbers",
|
||||
{"clientWidth": |clientWidth|}
|
||||
)
|
||||
|
@ -66,6 +66,11 @@ reload:
|
||||
|
||||
// Waiting for the search results to appear...
|
||||
wait-for: "#titles"
|
||||
assert-css: (
|
||||
"#titles > button > div.count",
|
||||
{"color": "rgb(136, 136, 136)"},
|
||||
ALL,
|
||||
)
|
||||
assert-css: (
|
||||
"//*[@class='desc'][text()='Just a normal struct.']",
|
||||
{"color": "rgb(197, 197, 197)"},
|
||||
@ -178,6 +183,11 @@ reload:
|
||||
|
||||
// Waiting for the search results to appear...
|
||||
wait-for: "#titles"
|
||||
assert-css: (
|
||||
"#titles > button > div.count",
|
||||
{"color": "rgb(136, 136, 136)"},
|
||||
ALL,
|
||||
)
|
||||
assert-css: (
|
||||
"//*[@class='desc'][text()='Just a normal struct.']",
|
||||
{"color": "rgb(221, 221, 221)"},
|
||||
@ -275,6 +285,11 @@ reload:
|
||||
|
||||
// Waiting for the search results to appear...
|
||||
wait-for: "#titles"
|
||||
assert-css: (
|
||||
"#titles > button > div.count",
|
||||
{"color": "rgb(136, 136, 136)"},
|
||||
ALL,
|
||||
)
|
||||
assert-css: (
|
||||
"//*[@class='desc'][text()='Just a normal struct.']",
|
||||
{"color": "rgb(0, 0, 0)"},
|
||||
|
@ -0,0 +1,31 @@
|
||||
// check-pass
|
||||
|
||||
#![feature(generic_const_exprs)]
|
||||
#![allow(incomplete_features)]
|
||||
#![deny(const_evaluatable_unchecked)]
|
||||
|
||||
pub struct If<const CONDITION: bool>;
|
||||
pub trait True {}
|
||||
impl True for If<true> {}
|
||||
|
||||
pub struct FixedI8<const FRAC: u32> {
|
||||
pub bits: i8,
|
||||
}
|
||||
|
||||
impl<const FRAC_LHS: u32, const FRAC_RHS: u32> PartialEq<FixedI8<FRAC_RHS>> for FixedI8<FRAC_LHS>
|
||||
where
|
||||
If<{ FRAC_RHS <= 8 }>: True,
|
||||
{
|
||||
fn eq(&self, _rhs: &FixedI8<FRAC_RHS>) -> bool {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
|
||||
impl<const FRAC: u32> PartialEq<i8> for FixedI8<FRAC> {
|
||||
fn eq(&self, rhs: &i8) -> bool {
|
||||
let rhs_as_fixed = FixedI8::<0> { bits: *rhs };
|
||||
PartialEq::eq(self, &rhs_as_fixed)
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
36
src/test/ui/consts/issue-104396.rs
Normal file
36
src/test/ui/consts/issue-104396.rs
Normal file
@ -0,0 +1,36 @@
|
||||
// compile-flags: -Zmir-opt-level=3
|
||||
// check-pass
|
||||
|
||||
#![feature(generic_const_exprs)]
|
||||
//~^ WARN the feature `generic_const_exprs` is incomplete
|
||||
|
||||
#[inline(always)]
|
||||
fn from_fn_1<const N: usize, F: FnMut(usize) -> f32>(mut f: F) -> [f32; N] {
|
||||
let mut result = [0.0; N];
|
||||
let mut i = 0;
|
||||
while i < N {
|
||||
result[i] = f(i);
|
||||
i += 1;
|
||||
}
|
||||
result
|
||||
}
|
||||
|
||||
pub struct TestArray<const N: usize>
|
||||
where
|
||||
[(); N / 2]:,
|
||||
{
|
||||
array: [f32; N / 2],
|
||||
}
|
||||
|
||||
impl<const N: usize> TestArray<N>
|
||||
where
|
||||
[(); N / 2]:,
|
||||
{
|
||||
fn from_fn_2<F: FnMut(usize) -> f32>(f: F) -> Self {
|
||||
Self { array: from_fn_1(f) }
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
TestArray::<4>::from_fn_2(|i| 0.0);
|
||||
}
|
11
src/test/ui/consts/issue-104396.stderr
Normal file
11
src/test/ui/consts/issue-104396.stderr
Normal file
@ -0,0 +1,11 @@
|
||||
warning: the feature `generic_const_exprs` is incomplete and may not be safe to use and/or cause compiler crashes
|
||||
--> $DIR/issue-104396.rs:4:12
|
||||
|
|
||||
LL | #![feature(generic_const_exprs)]
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #76560 <https://github.com/rust-lang/rust/issues/76560> for more information
|
||||
= note: `#[warn(incomplete_features)]` on by default
|
||||
|
||||
warning: 1 warning emitted
|
||||
|
15
src/test/ui/generator/unresolved-ct-var-drop-tracking.rs
Normal file
15
src/test/ui/generator/unresolved-ct-var-drop-tracking.rs
Normal file
@ -0,0 +1,15 @@
|
||||
// incremental
|
||||
// edition:2021
|
||||
// compile-flags: -Zdrop-tracking
|
||||
|
||||
fn main() {
|
||||
let _ = async {
|
||||
let s = std::array::from_fn(|_| ()).await;
|
||||
//~^ ERROR `[(); _]` is not a future
|
||||
//~| ERROR type inside `async` block must be known in this context
|
||||
//~| ERROR type inside `async` block must be known in this context
|
||||
//~| ERROR type inside `async` block must be known in this context
|
||||
//~| ERROR type inside `async` block must be known in this context
|
||||
//~| ERROR type inside `async` block must be known in this context
|
||||
};
|
||||
}
|
78
src/test/ui/generator/unresolved-ct-var-drop-tracking.stderr
Normal file
78
src/test/ui/generator/unresolved-ct-var-drop-tracking.stderr
Normal file
@ -0,0 +1,78 @@
|
||||
error[E0277]: `[(); _]` is not a future
|
||||
--> $DIR/unresolved-ct-var-drop-tracking.rs:7:44
|
||||
|
|
||||
LL | let s = std::array::from_fn(|_| ()).await;
|
||||
| ---------------------------^^^^^^
|
||||
| | |
|
||||
| | `[(); _]` is not a future
|
||||
| | help: remove the `.await`
|
||||
| this call returns `[(); _]`
|
||||
|
|
||||
= help: the trait `Future` is not implemented for `[(); _]`
|
||||
= note: [(); _] must be a future or must implement `IntoFuture` to be awaited
|
||||
= note: required for `[(); _]` to implement `IntoFuture`
|
||||
|
||||
error[E0698]: type inside `async` block must be known in this context
|
||||
--> $DIR/unresolved-ct-var-drop-tracking.rs:7:17
|
||||
|
|
||||
LL | let s = std::array::from_fn(|_| ()).await;
|
||||
| ^^^^^^^^^^^^^^^^^^^ cannot infer the value of const parameter `N` declared on the function `from_fn`
|
||||
|
|
||||
note: the type is part of the `async` block because of this `await`
|
||||
--> $DIR/unresolved-ct-var-drop-tracking.rs:7:44
|
||||
|
|
||||
LL | let s = std::array::from_fn(|_| ()).await;
|
||||
| ^^^^^^
|
||||
|
||||
error[E0698]: type inside `async` block must be known in this context
|
||||
--> $DIR/unresolved-ct-var-drop-tracking.rs:7:17
|
||||
|
|
||||
LL | let s = std::array::from_fn(|_| ()).await;
|
||||
| ^^^^^^^^^^^^^^^^^^^ cannot infer the value of const parameter `N` declared on the function `from_fn`
|
||||
|
|
||||
note: the type is part of the `async` block because of this `await`
|
||||
--> $DIR/unresolved-ct-var-drop-tracking.rs:7:44
|
||||
|
|
||||
LL | let s = std::array::from_fn(|_| ()).await;
|
||||
| ^^^^^^
|
||||
|
||||
error[E0698]: type inside `async` block must be known in this context
|
||||
--> $DIR/unresolved-ct-var-drop-tracking.rs:7:17
|
||||
|
|
||||
LL | let s = std::array::from_fn(|_| ()).await;
|
||||
| ^^^^^^^^^^^^^^^^^^^ cannot infer the value of const parameter `N` declared on the function `from_fn`
|
||||
|
|
||||
note: the type is part of the `async` block because of this `await`
|
||||
--> $DIR/unresolved-ct-var-drop-tracking.rs:7:44
|
||||
|
|
||||
LL | let s = std::array::from_fn(|_| ()).await;
|
||||
| ^^^^^^
|
||||
|
||||
error[E0698]: type inside `async` block must be known in this context
|
||||
--> $DIR/unresolved-ct-var-drop-tracking.rs:7:17
|
||||
|
|
||||
LL | let s = std::array::from_fn(|_| ()).await;
|
||||
| ^^^^^^^^^^^^^^^^^^^ cannot infer the value of const parameter `N` declared on the function `from_fn`
|
||||
|
|
||||
note: the type is part of the `async` block because of this `await`
|
||||
--> $DIR/unresolved-ct-var-drop-tracking.rs:7:44
|
||||
|
|
||||
LL | let s = std::array::from_fn(|_| ()).await;
|
||||
| ^^^^^^
|
||||
|
||||
error[E0698]: type inside `async` block must be known in this context
|
||||
--> $DIR/unresolved-ct-var-drop-tracking.rs:7:17
|
||||
|
|
||||
LL | let s = std::array::from_fn(|_| ()).await;
|
||||
| ^^^^^^^^^^^^^^^^^^^ cannot infer the value of const parameter `N` declared on the function `from_fn`
|
||||
|
|
||||
note: the type is part of the `async` block because of this `await`
|
||||
--> $DIR/unresolved-ct-var-drop-tracking.rs:7:44
|
||||
|
|
||||
LL | let s = std::array::from_fn(|_| ()).await;
|
||||
| ^^^^^^
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0277, E0698.
|
||||
For more information about an error, try `rustc --explain E0277`.
|
Loading…
x
Reference in New Issue
Block a user