Auto merge of #111798 - GuillaumeGomez:rollup-t3bus8o, r=GuillaumeGomez

Rollup of 5 pull requests

Successful merges:

 - #111450 (Use `OpaqueTypeKey` in query response)
 - #111726 (Migrate GUI colors test to original CSS color format)
 - #111746 (Merge some query impl modules into one)
 - #111765 (Migrate GUI colors test to original CSS color format)
 - #111771 (add `--remote-time` flag to curl for bootstrap)

r? `@ghost`
`@rustbot` modify labels: rollup
This commit is contained in:
bors 2023-05-20 16:07:54 +00:00
commit 6bacf5a544
8 changed files with 181 additions and 183 deletions

View file

@ -153,20 +153,22 @@ fn make_query_response<T>(
/// Used by the new solver as that one takes the opaque types at the end of a probe /// Used by the new solver as that one takes the opaque types at the end of a probe
/// to deal with multiple candidates without having to recompute them. /// to deal with multiple candidates without having to recompute them.
pub fn clone_opaque_types_for_query_response(&self) -> Vec<(Ty<'tcx>, Ty<'tcx>)> { pub fn clone_opaque_types_for_query_response(
&self,
) -> Vec<(ty::OpaqueTypeKey<'tcx>, Ty<'tcx>)> {
self.inner self.inner
.borrow() .borrow()
.opaque_type_storage .opaque_type_storage
.opaque_types .opaque_types
.iter() .iter()
.map(|(k, v)| (self.tcx.mk_opaque(k.def_id.to_def_id(), k.substs), v.hidden_type.ty)) .map(|(k, v)| (*k, v.hidden_type.ty))
.collect() .collect()
} }
fn take_opaque_types_for_query_response(&self) -> Vec<(Ty<'tcx>, Ty<'tcx>)> { fn take_opaque_types_for_query_response(&self) -> Vec<(ty::OpaqueTypeKey<'tcx>, Ty<'tcx>)> {
std::mem::take(&mut self.inner.borrow_mut().opaque_type_storage.opaque_types) std::mem::take(&mut self.inner.borrow_mut().opaque_type_storage.opaque_types)
.into_iter() .into_iter()
.map(|(k, v)| (self.tcx.mk_opaque(k.def_id.to_def_id(), k.substs), v.hidden_type.ty)) .map(|(k, v)| (k, v.hidden_type.ty))
.collect() .collect()
} }
@ -507,8 +509,22 @@ fn query_response_substitution_guess<R>(
let a = substitute_value(self.tcx, &result_subst, a); let a = substitute_value(self.tcx, &result_subst, a);
let b = substitute_value(self.tcx, &result_subst, b); let b = substitute_value(self.tcx, &result_subst, b);
debug!(?a, ?b, "constrain opaque type"); debug!(?a, ?b, "constrain opaque type");
obligations // We use equate here instead of, for example, just registering the
.extend(self.at(cause, param_env).eq(DefineOpaqueTypes::Yes, a, b)?.obligations); // opaque type's hidden value directly, because we may be instantiating
// a query response that was canonicalized in an InferCtxt that had
// a different defining anchor. In that case, we may have inferred
// `NonLocalOpaque := LocalOpaque` but can only instantiate it in
// the other direction as `LocalOpaque := NonLocalOpaque`. Using eq
// here allows us to try both directions (in `InferCtxt::handle_opaque_type`).
obligations.extend(
self.at(cause, param_env)
.eq(
DefineOpaqueTypes::Yes,
self.tcx.mk_opaque(a.def_id.to_def_id(), a.substs),
b,
)?
.obligations,
);
} }
Ok(InferOk { value: result_subst, obligations }) Ok(InferOk { value: result_subst, obligations })

View file

@ -280,7 +280,7 @@ pub struct QueryResponse<'tcx, R> {
/// should get its hidden type inferred. So we bubble the opaque type /// should get its hidden type inferred. So we bubble the opaque type
/// and the type it was compared against upwards and let the query caller /// and the type it was compared against upwards and let the query caller
/// handle it. /// handle it.
pub opaque_types: Vec<(Ty<'tcx>, Ty<'tcx>)>, pub opaque_types: Vec<(ty::OpaqueTypeKey<'tcx>, Ty<'tcx>)>,
pub value: R, pub value: R,
} }

View file

@ -124,7 +124,7 @@ fn deref(&self) -> &Self::Target {
pub struct ExternalConstraintsData<'tcx> { pub struct ExternalConstraintsData<'tcx> {
// FIXME: implement this. // FIXME: implement this.
pub region_constraints: QueryRegionConstraints<'tcx>, pub region_constraints: QueryRegionConstraints<'tcx>,
pub opaque_types: Vec<(Ty<'tcx>, Ty<'tcx>)>, pub opaque_types: Vec<(ty::OpaqueTypeKey<'tcx>, Ty<'tcx>)>,
} }
// FIXME: Having to clone `region_constraints` for folding feels bad and // FIXME: Having to clone `region_constraints` for folding feels bad and

View file

@ -506,169 +506,151 @@ macro_rules! define_queries {
( (
$($(#[$attr:meta])* $($(#[$attr:meta])*
[$($modifiers:tt)*] fn $name:ident($($K:tt)*) -> $V:ty,)*) => { [$($modifiers:tt)*] fn $name:ident($($K:tt)*) -> $V:ty,)*) => {
mod get_query_incr {
use super::*;
$( pub(crate) mod query_impl { $(pub mod $name {
use super::super::*;
use std::marker::PhantomData;
pub mod get_query_incr {
use super::*;
// Adding `__rust_end_short_backtrace` marker to backtraces so that we emit the frames // Adding `__rust_end_short_backtrace` marker to backtraces so that we emit the frames
// when `RUST_BACKTRACE=1`, add a new mod with `$name` here is to allow duplicate naming // when `RUST_BACKTRACE=1`, add a new mod with `$name` here is to allow duplicate naming
pub mod $name { #[inline(never)]
use super::*; pub fn __rust_end_short_backtrace<'tcx>(
#[inline(never)] tcx: TyCtxt<'tcx>,
pub fn __rust_end_short_backtrace<'tcx>( span: Span,
tcx: TyCtxt<'tcx>, key: queries::$name::Key<'tcx>,
span: Span, mode: QueryMode,
key: queries::$name::Key<'tcx>, ) -> Option<Erase<queries::$name::Value<'tcx>>> {
mode: QueryMode, get_query_incr(
) -> Option<Erase<queries::$name::Value<'tcx>>> { QueryType::config(tcx),
get_query_incr( QueryCtxt::new(tcx),
query_config::$name::config(tcx), span,
QueryCtxt::new(tcx), key,
span, mode
key, )
mode }
}
pub mod get_query_non_incr {
use super::*;
#[inline(never)]
pub fn __rust_end_short_backtrace<'tcx>(
tcx: TyCtxt<'tcx>,
span: Span,
key: queries::$name::Key<'tcx>,
__mode: QueryMode,
) -> Option<Erase<queries::$name::Value<'tcx>>> {
Some(get_query_non_incr(
QueryType::config(tcx),
QueryCtxt::new(tcx),
span,
key,
))
}
}
pub fn dynamic_query<'tcx>() -> DynamicQuery<'tcx, queries::$name::Storage<'tcx>> {
DynamicQuery {
name: stringify!($name),
eval_always: is_eval_always!([$($modifiers)*]),
dep_kind: dep_graph::DepKind::$name,
handle_cycle_error: handle_cycle_error!([$($modifiers)*]),
query_state: offset_of!(QueryStates<'tcx> => $name),
query_cache: offset_of!(QueryCaches<'tcx> => $name),
cache_on_disk: |tcx, key| ::rustc_middle::query::cached::$name(tcx, key),
execute_query: |tcx, key| erase(tcx.$name(key)),
compute: |tcx, key| {
__rust_begin_short_backtrace(||
queries::$name::provided_to_erased(
tcx,
call_provider!([$($modifiers)*][tcx, $name, key])
)
) )
},
can_load_from_disk: should_ever_cache_on_disk!([$($modifiers)*] true false),
try_load_from_disk: should_ever_cache_on_disk!([$($modifiers)*] {
|tcx, key, prev_index, index| {
if ::rustc_middle::query::cached::$name(tcx, key) {
let value = $crate::plumbing::try_load_from_disk::<
queries::$name::ProvidedValue<'tcx>
>(
tcx,
prev_index,
index,
);
value.map(|value| queries::$name::provided_to_erased(tcx, value))
} else {
None
}
}
} {
|_tcx, _key, _prev_index, _index| None
}),
value_from_cycle_error: |tcx, cycle| {
let result: queries::$name::Value<'tcx> = Value::from_cycle_error(tcx, cycle);
erase(result)
},
loadable_from_disk: |_tcx, _key, _index| {
should_ever_cache_on_disk!([$($modifiers)*] {
::rustc_middle::query::cached::$name(_tcx, _key) &&
$crate::plumbing::loadable_from_disk(_tcx, _index)
} {
false
})
},
hash_result: hash_result!([$($modifiers)*][queries::$name::Value<'tcx>]),
format_value: |value| format!("{:?}", restore::<queries::$name::Value<'tcx>>(*value)),
}
}
#[derive(Copy, Clone, Default)]
pub struct QueryType<'tcx> {
data: PhantomData<&'tcx ()>
}
impl<'tcx> QueryConfigRestored<'tcx> for QueryType<'tcx> {
type RestoredValue = queries::$name::Value<'tcx>;
type Config = DynamicConfig<
'tcx,
queries::$name::Storage<'tcx>,
{ is_anon!([$($modifiers)*]) },
{ depth_limit!([$($modifiers)*]) },
{ feedable!([$($modifiers)*]) },
>;
#[inline(always)]
fn config(tcx: TyCtxt<'tcx>) -> Self::Config {
DynamicConfig {
dynamic: &tcx.query_system.dynamic_queries.$name,
} }
} }
)*
}
mod get_query_non_incr { #[inline(always)]
use super::*; fn restore(value: <Self::Config as QueryConfig<QueryCtxt<'tcx>>>::Value) -> Self::RestoredValue {
restore::<queries::$name::Value<'tcx>>(value)
$(
pub mod $name {
use super::*;
#[inline(never)]
pub fn __rust_end_short_backtrace<'tcx>(
tcx: TyCtxt<'tcx>,
span: Span,
key: queries::$name::Key<'tcx>,
__mode: QueryMode,
) -> Option<Erase<queries::$name::Value<'tcx>>> {
Some(get_query_non_incr(
query_config::$name::config(tcx),
QueryCtxt::new(tcx),
span,
key,
))
}
} }
)* }
} })*}
pub(crate) fn engine(incremental: bool) -> QueryEngine { pub(crate) fn engine(incremental: bool) -> QueryEngine {
if incremental { if incremental {
QueryEngine { QueryEngine {
$($name: get_query_incr::$name::__rust_end_short_backtrace,)* $($name: query_impl::$name::get_query_incr::__rust_end_short_backtrace,)*
} }
} else { } else {
QueryEngine { QueryEngine {
$($name: get_query_non_incr::$name::__rust_end_short_backtrace,)* $($name: query_impl::$name::get_query_non_incr::__rust_end_short_backtrace,)*
} }
} }
} }
#[allow(nonstandard_style)]
mod query_config {
use std::marker::PhantomData;
$(
#[derive(Copy, Clone, Default)]
pub struct $name<'tcx> {
data: PhantomData<&'tcx ()>
}
)*
}
#[allow(nonstandard_style)]
mod dynamic_query {
use super::*;
$(
pub(super) fn $name<'tcx>() -> DynamicQuery<'tcx, queries::$name::Storage<'tcx>> {
DynamicQuery {
name: stringify!($name),
eval_always: is_eval_always!([$($modifiers)*]),
dep_kind: dep_graph::DepKind::$name,
handle_cycle_error: handle_cycle_error!([$($modifiers)*]),
query_state: offset_of!(QueryStates<'tcx> => $name),
query_cache: offset_of!(QueryCaches<'tcx> => $name),
cache_on_disk: |tcx, key| ::rustc_middle::query::cached::$name(tcx, key),
execute_query: |tcx, key| erase(tcx.$name(key)),
compute: |tcx, key| {
__rust_begin_short_backtrace(||
queries::$name::provided_to_erased(
tcx,
call_provider!([$($modifiers)*][tcx, $name, key])
)
)
},
can_load_from_disk: should_ever_cache_on_disk!([$($modifiers)*] true false),
try_load_from_disk: should_ever_cache_on_disk!([$($modifiers)*] {
|tcx, key, prev_index, index| {
if ::rustc_middle::query::cached::$name(tcx, key) {
let value = $crate::plumbing::try_load_from_disk::<
queries::$name::ProvidedValue<'tcx>
>(
tcx,
prev_index,
index,
);
value.map(|value| queries::$name::provided_to_erased(tcx, value))
} else {
None
}
}
} {
|_tcx, _key, _prev_index, _index| None
}),
value_from_cycle_error: |tcx, cycle| {
let result: queries::$name::Value<'tcx> = Value::from_cycle_error(tcx, cycle);
erase(result)
},
loadable_from_disk: |_tcx, _key, _index| {
should_ever_cache_on_disk!([$($modifiers)*] {
::rustc_middle::query::cached::$name(_tcx, _key) &&
$crate::plumbing::loadable_from_disk(_tcx, _index)
} {
false
})
},
hash_result: hash_result!([$($modifiers)*][queries::$name::Value<'tcx>]),
format_value: |value| format!("{:?}", restore::<queries::$name::Value<'tcx>>(*value)),
}
}
)*
}
$(impl<'tcx> QueryConfigRestored<'tcx> for query_config::$name<'tcx> {
type RestoredValue = queries::$name::Value<'tcx>;
type Config = DynamicConfig<
'tcx,
queries::$name::Storage<'tcx>,
{ is_anon!([$($modifiers)*]) },
{ depth_limit!([$($modifiers)*]) },
{ feedable!([$($modifiers)*]) },
>;
#[inline(always)]
fn config(tcx: TyCtxt<'tcx>) -> Self::Config {
DynamicConfig {
dynamic: &tcx.query_system.dynamic_queries.$name,
}
}
#[inline(always)]
fn restore(value: <Self::Config as QueryConfig<QueryCtxt<'tcx>>>::Value) -> Self::RestoredValue {
restore::<queries::$name::Value<'tcx>>(value)
}
})*
pub fn dynamic_queries<'tcx>() -> DynamicQueries<'tcx> { pub fn dynamic_queries<'tcx>() -> DynamicQueries<'tcx> {
DynamicQueries { DynamicQueries {
$( $(
$name: dynamic_query::$name(), $name: query_impl::$name::dynamic_query(),
)* )*
} }
} }
@ -731,7 +713,7 @@ pub fn CompileMonoItem<'tcx>() -> DepKindStruct<'tcx> {
} }
$(pub(crate) fn $name<'tcx>()-> DepKindStruct<'tcx> { $(pub(crate) fn $name<'tcx>()-> DepKindStruct<'tcx> {
$crate::plumbing::query_callback::<query_config::$name<'tcx>>( $crate::plumbing::query_callback::<query_impl::$name::QueryType<'tcx>>(
is_anon!([$($modifiers)*]), is_anon!([$($modifiers)*]),
is_eval_always!([$($modifiers)*]), is_eval_always!([$($modifiers)*]),
) )
@ -786,8 +768,8 @@ pub(super) const fn $name<'tcx>() -> QueryStruct<'tcx> { QueryStruct {
) )
}, },
encode_query_results: expand_if_cached!([$($modifiers)*], |tcx, encoder, query_result_index| encode_query_results: expand_if_cached!([$($modifiers)*], |tcx, encoder, query_result_index|
$crate::plumbing::encode_query_results::<super::query_config::$name<'tcx>>( $crate::plumbing::encode_query_results::<query_impl::$name::QueryType<'tcx>>(
super::query_config::$name::config(tcx), query_impl::$name::QueryType::config(tcx),
QueryCtxt::new(tcx), QueryCtxt::new(tcx),
encoder, encoder,
query_result_index, query_result_index,

View file

@ -109,7 +109,7 @@ def _download(path, url, probably_big, verbose, exception):
"-L", # Follow redirect. "-L", # Follow redirect.
"-y", "30", "-Y", "10", # timeout if speed is < 10 bytes/sec for > 30 seconds "-y", "30", "-Y", "10", # timeout if speed is < 10 bytes/sec for > 30 seconds
"--connect-timeout", "30", # timeout if cannot connect within 30 seconds "--connect-timeout", "30", # timeout if cannot connect within 30 seconds
"--retry", "3", "-Sf", url], "--retry", "3", "-SRf", url],
stdout=outfile, #Implements cli redirect operator '>' stdout=outfile, #Implements cli redirect operator '>'
verbose=verbose, verbose=verbose,
exception=True, # Will raise RuntimeError on failure exception=True, # Will raise RuntimeError on failure

View file

@ -219,7 +219,7 @@ fn download_http_with_retries(&self, tempfile: &Path, url: &str, help_on_error:
"30", // timeout if cannot connect within 30 seconds "30", // timeout if cannot connect within 30 seconds
"--retry", "--retry",
"3", "3",
"-Sf", "-SRf",
]); ]);
curl.arg(url); curl.arg(url);
let f = File::create(tempfile).unwrap(); let f = File::create(tempfile).unwrap();

View file

@ -33,30 +33,30 @@ define-function: (
call-function: ("check-colors", { call-function: ("check-colors", {
"theme": "ayu", "theme": "ayu",
"highlight": "rgb(91, 59, 1)", "highlight": "#5b3b01",
"highlight_focus": "rgb(124, 75, 15)", "highlight_focus": "#7c4b0f",
"help_border": "rgb(170, 170, 170)", "help_border": "#aaa",
"help_color": "rgb(238, 238, 238)", "help_color": "#eee",
"help_hover_border": "rgb(255, 255, 255)", "help_hover_border": "#fff",
"help_hover_color": "rgb(255, 255, 255)", "help_hover_color": "#fff",
}) })
call-function: ("check-colors", { call-function: ("check-colors", {
"theme": "dark", "theme": "dark",
"highlight": "rgb(91, 59, 1)", "highlight": "#5b3b01",
"highlight_focus": "rgb(124, 75, 15)", "highlight_focus": "#7c4b0f",
"help_border": "rgb(170, 170, 170)", "help_border": "#aaa",
"help_color": "rgb(238, 238, 238)", "help_color": "#eee",
"help_hover_border": "rgb(255, 255, 255)", "help_hover_border": "#fff",
"help_hover_color": "rgb(255, 255, 255)", "help_hover_color": "#fff",
}) })
call-function: ("check-colors", { call-function: ("check-colors", {
"theme": "light", "theme": "light",
"highlight": "rgb(252, 255, 214)", "highlight": "#fcffd6",
"highlight_focus": "rgb(246, 253, 176)", "highlight_focus": "#f6fdb0",
"help_border": "rgb(85, 85, 85)", "help_border": "#555",
"help_color": "rgb(51, 51, 51)", "help_color": "#333",
"help_hover_border": "rgb(0, 0, 0)", "help_hover_border": "#000",
"help_hover_color": "rgb(0, 0, 0)", "help_hover_color": "#000",
}) })
// Now testing the top and bottom background in case there is only one scraped examples. // Now testing the top and bottom background in case there is only one scraped examples.

View file

@ -40,24 +40,24 @@ define-function: (
call-function: ("check-colors", { call-function: ("check-colors", {
"theme": "ayu", "theme": "ayu",
"color": "rgb(92, 103, 115)", "color": "#5c6773",
"background_color": "rgba(0, 0, 0, 0)", "background_color": "transparent",
"highlight_color": "rgb(112, 128, 144)", "highlight_color": "#708090",
"highlight_background_color": "rgba(255, 236, 164, 0.06)", "highlight_background_color": "rgba(255, 236, 164, 0.06)",
}) })
call-function: ("check-colors", { call-function: ("check-colors", {
"theme": "dark", "theme": "dark",
"color": "rgb(59, 145, 226)", "color": "#3b91e2",
"background_color": "rgba(0, 0, 0, 0)", "background_color": "transparent",
"highlight_color": "rgb(59, 145, 226)", "highlight_color": "#3b91e2",
"highlight_background_color": "rgb(10, 4, 47)", "highlight_background_color": "#0a042f",
}) })
call-function: ("check-colors", { call-function: ("check-colors", {
"theme": "light", "theme": "light",
"color": "rgb(198, 126, 45)", "color": "#c67e2d",
"background_color": "rgba(0, 0, 0, 0)", "background_color": "transparent",
"highlight_color": "rgb(198, 126, 45)", "highlight_color": "#c67e2d",
"highlight_background_color": "rgb(253, 255, 211)", "highlight_background_color": "#fdffd3",
}) })
// This is to ensure that the content is correctly align with the line numbers. // This is to ensure that the content is correctly align with the line numbers.