Auto merge of #109966 - JohnTitor:rollup-eoqjr5j, r=JohnTitor
Rollup of 6 pull requests Successful merges: - #107236 (Add T-bootstrap label to tools) - #109847 (Only create graphviz nodes for reachable MIR bb's) - #109848 (submodule detection for proper fix on #96188) - #109932 (Source code scrollbar) - #109952 (Move comment about python2 closer to the place it's used) - #109956 (Tweak debug outputs to make debugging new solver easier) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
4cb92cc83a
18 changed files with 145 additions and 67 deletions
|
@ -35,9 +35,9 @@ use std::ops::Index;
|
||||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, TyDecodable, TyEncodable)]
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, TyDecodable, TyEncodable)]
|
||||||
#[derive(HashStable, TypeFoldable, TypeVisitable, Lift)]
|
#[derive(HashStable, TypeFoldable, TypeVisitable, Lift)]
|
||||||
pub struct Canonical<'tcx, V> {
|
pub struct Canonical<'tcx, V> {
|
||||||
|
pub value: V,
|
||||||
pub max_universe: ty::UniverseIndex,
|
pub max_universe: ty::UniverseIndex,
|
||||||
pub variables: CanonicalVarInfos<'tcx>,
|
pub variables: CanonicalVarInfos<'tcx>,
|
||||||
pub value: V,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type CanonicalVarInfos<'tcx> = &'tcx List<CanonicalVarInfo<'tcx>>;
|
pub type CanonicalVarInfos<'tcx> = &'tcx List<CanonicalVarInfo<'tcx>>;
|
||||||
|
|
|
@ -20,8 +20,8 @@ pub type EvaluationCache<'tcx> = Cache<CanonicalGoal<'tcx>, QueryResult<'tcx>>;
|
||||||
/// we're currently typechecking while the `predicate` is some trait bound.
|
/// we're currently typechecking while the `predicate` is some trait bound.
|
||||||
#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash, TypeFoldable, TypeVisitable)]
|
#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash, TypeFoldable, TypeVisitable)]
|
||||||
pub struct Goal<'tcx, P> {
|
pub struct Goal<'tcx, P> {
|
||||||
pub param_env: ty::ParamEnv<'tcx>,
|
|
||||||
pub predicate: P,
|
pub predicate: P,
|
||||||
|
pub param_env: ty::ParamEnv<'tcx>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx, P> Goal<'tcx, P> {
|
impl<'tcx, P> Goal<'tcx, P> {
|
||||||
|
@ -41,10 +41,10 @@ impl<'tcx, P> Goal<'tcx, P> {
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash, TypeFoldable, TypeVisitable)]
|
#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash, TypeFoldable, TypeVisitable)]
|
||||||
pub struct Response<'tcx> {
|
pub struct Response<'tcx> {
|
||||||
|
pub certainty: Certainty,
|
||||||
pub var_values: CanonicalVarValues<'tcx>,
|
pub var_values: CanonicalVarValues<'tcx>,
|
||||||
/// Additional constraints returned by this query.
|
/// Additional constraints returned by this query.
|
||||||
pub external_constraints: ExternalConstraints<'tcx>,
|
pub external_constraints: ExternalConstraints<'tcx>,
|
||||||
pub certainty: Certainty,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash, TypeFoldable, TypeVisitable)]
|
#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash, TypeFoldable, TypeVisitable)]
|
||||||
|
|
|
@ -6,6 +6,7 @@ use std::{io, ops, str};
|
||||||
|
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
use rustc_graphviz as dot;
|
use rustc_graphviz as dot;
|
||||||
|
use rustc_index::bit_set::BitSet;
|
||||||
use rustc_middle::mir::graphviz_safe_def_name;
|
use rustc_middle::mir::graphviz_safe_def_name;
|
||||||
use rustc_middle::mir::{self, BasicBlock, Body, Location};
|
use rustc_middle::mir::{self, BasicBlock, Body, Location};
|
||||||
|
|
||||||
|
@ -34,6 +35,7 @@ where
|
||||||
body: &'a Body<'tcx>,
|
body: &'a Body<'tcx>,
|
||||||
results: &'a Results<'tcx, A>,
|
results: &'a Results<'tcx, A>,
|
||||||
style: OutputStyle,
|
style: OutputStyle,
|
||||||
|
reachable: BitSet<BasicBlock>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx, A> Formatter<'a, 'tcx, A>
|
impl<'a, 'tcx, A> Formatter<'a, 'tcx, A>
|
||||||
|
@ -41,7 +43,8 @@ where
|
||||||
A: Analysis<'tcx>,
|
A: Analysis<'tcx>,
|
||||||
{
|
{
|
||||||
pub fn new(body: &'a Body<'tcx>, results: &'a Results<'tcx, A>, style: OutputStyle) -> Self {
|
pub fn new(body: &'a Body<'tcx>, results: &'a Results<'tcx, A>, style: OutputStyle) -> Self {
|
||||||
Formatter { body, results, style }
|
let reachable = mir::traversal::reachable_as_bitset(body);
|
||||||
|
Formatter { body, results, style, reachable }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,7 +111,12 @@ where
|
||||||
type Edge = CfgEdge;
|
type Edge = CfgEdge;
|
||||||
|
|
||||||
fn nodes(&self) -> dot::Nodes<'_, Self::Node> {
|
fn nodes(&self) -> dot::Nodes<'_, Self::Node> {
|
||||||
self.body.basic_blocks.indices().collect::<Vec<_>>().into()
|
self.body
|
||||||
|
.basic_blocks
|
||||||
|
.indices()
|
||||||
|
.filter(|&idx| self.reachable.contains(idx))
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
.into()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn edges(&self) -> dot::Edges<'_, Self::Edge> {
|
fn edges(&self) -> dot::Edges<'_, Self::Edge> {
|
||||||
|
|
|
@ -270,6 +270,7 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {
|
||||||
/// To deal with this, we first try to normalize the self type and add the candidates for the normalized
|
/// To deal with this, we first try to normalize the self type and add the candidates for the normalized
|
||||||
/// self type to the list of candidates in case that succeeds. We also have to consider candidates with the
|
/// self type to the list of candidates in case that succeeds. We also have to consider candidates with the
|
||||||
/// projection as a self type as well
|
/// projection as a self type as well
|
||||||
|
#[instrument(level = "debug", skip_all)]
|
||||||
fn assemble_candidates_after_normalizing_self_ty<G: GoalKind<'tcx>>(
|
fn assemble_candidates_after_normalizing_self_ty<G: GoalKind<'tcx>>(
|
||||||
&mut self,
|
&mut self,
|
||||||
goal: Goal<'tcx, G>,
|
goal: Goal<'tcx, G>,
|
||||||
|
@ -315,6 +316,7 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[instrument(level = "debug", skip_all)]
|
||||||
fn assemble_impl_candidates<G: GoalKind<'tcx>>(
|
fn assemble_impl_candidates<G: GoalKind<'tcx>>(
|
||||||
&mut self,
|
&mut self,
|
||||||
goal: Goal<'tcx, G>,
|
goal: Goal<'tcx, G>,
|
||||||
|
@ -333,6 +335,7 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[instrument(level = "debug", skip_all)]
|
||||||
fn assemble_builtin_impl_candidates<G: GoalKind<'tcx>>(
|
fn assemble_builtin_impl_candidates<G: GoalKind<'tcx>>(
|
||||||
&mut self,
|
&mut self,
|
||||||
goal: Goal<'tcx, G>,
|
goal: Goal<'tcx, G>,
|
||||||
|
@ -390,6 +393,7 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[instrument(level = "debug", skip_all)]
|
||||||
fn assemble_param_env_candidates<G: GoalKind<'tcx>>(
|
fn assemble_param_env_candidates<G: GoalKind<'tcx>>(
|
||||||
&mut self,
|
&mut self,
|
||||||
goal: Goal<'tcx, G>,
|
goal: Goal<'tcx, G>,
|
||||||
|
@ -405,6 +409,7 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[instrument(level = "debug", skip_all)]
|
||||||
fn assemble_alias_bound_candidates<G: GoalKind<'tcx>>(
|
fn assemble_alias_bound_candidates<G: GoalKind<'tcx>>(
|
||||||
&mut self,
|
&mut self,
|
||||||
goal: Goal<'tcx, G>,
|
goal: Goal<'tcx, G>,
|
||||||
|
@ -452,6 +457,7 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[instrument(level = "debug", skip_all)]
|
||||||
fn assemble_object_bound_candidates<G: GoalKind<'tcx>>(
|
fn assemble_object_bound_candidates<G: GoalKind<'tcx>>(
|
||||||
&mut self,
|
&mut self,
|
||||||
goal: Goal<'tcx, G>,
|
goal: Goal<'tcx, G>,
|
||||||
|
@ -514,6 +520,7 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[instrument(level = "debug", skip_all)]
|
||||||
fn assemble_coherence_unknowable_candidates<G: GoalKind<'tcx>>(
|
fn assemble_coherence_unknowable_candidates<G: GoalKind<'tcx>>(
|
||||||
&mut self,
|
&mut self,
|
||||||
goal: Goal<'tcx, G>,
|
goal: Goal<'tcx, G>,
|
||||||
|
|
|
@ -106,7 +106,7 @@ pub trait InferCtxtEvalExt<'tcx> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx> InferCtxtEvalExt<'tcx> for InferCtxt<'tcx> {
|
impl<'tcx> InferCtxtEvalExt<'tcx> for InferCtxt<'tcx> {
|
||||||
#[instrument(level = "debug", skip(self))]
|
#[instrument(level = "debug", skip(self), ret)]
|
||||||
fn evaluate_root_goal(
|
fn evaluate_root_goal(
|
||||||
&self,
|
&self,
|
||||||
goal: Goal<'tcx, ty::Predicate<'tcx>>,
|
goal: Goal<'tcx, ty::Predicate<'tcx>>,
|
||||||
|
@ -552,7 +552,7 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {
|
||||||
///
|
///
|
||||||
/// If possible, try using `eq` instead which automatically handles nested
|
/// If possible, try using `eq` instead which automatically handles nested
|
||||||
/// goals correctly.
|
/// goals correctly.
|
||||||
#[instrument(level = "debug", skip(self, param_env), ret)]
|
#[instrument(level = "trace", skip(self, param_env), ret)]
|
||||||
pub(super) fn eq_and_get_goals<T: ToTrace<'tcx>>(
|
pub(super) fn eq_and_get_goals<T: ToTrace<'tcx>>(
|
||||||
&self,
|
&self,
|
||||||
param_env: ty::ParamEnv<'tcx>,
|
param_env: ty::ParamEnv<'tcx>,
|
||||||
|
|
|
@ -153,13 +153,22 @@ impl<'a, 'tcx> EvalCtxt<'a, 'tcx> {
|
||||||
) -> QueryResult<'tcx> {
|
) -> QueryResult<'tcx> {
|
||||||
let tcx = self.tcx();
|
let tcx = self.tcx();
|
||||||
// We may need to invert the alias relation direction if dealing an alias on the RHS.
|
// We may need to invert the alias relation direction if dealing an alias on the RHS.
|
||||||
|
#[derive(Debug)]
|
||||||
enum Invert {
|
enum Invert {
|
||||||
No,
|
No,
|
||||||
Yes,
|
Yes,
|
||||||
}
|
}
|
||||||
let evaluate_normalizes_to =
|
let evaluate_normalizes_to =
|
||||||
|ecx: &mut EvalCtxt<'_, 'tcx>, alias, other, direction, invert| {
|
|ecx: &mut EvalCtxt<'_, 'tcx>, alias, other, direction, invert| {
|
||||||
debug!("evaluate_normalizes_to(alias={:?}, other={:?})", alias, other);
|
let span = tracing::span!(
|
||||||
|
tracing::Level::DEBUG,
|
||||||
|
"compute_alias_relate_goal(evaluate_normalizes_to)",
|
||||||
|
?alias,
|
||||||
|
?other,
|
||||||
|
?direction,
|
||||||
|
?invert
|
||||||
|
);
|
||||||
|
let _enter = span.enter();
|
||||||
let result = ecx.probe(|ecx| {
|
let result = ecx.probe(|ecx| {
|
||||||
let other = match direction {
|
let other = match direction {
|
||||||
// This is purely an optimization.
|
// This is purely an optimization.
|
||||||
|
@ -184,7 +193,7 @@ impl<'a, 'tcx> EvalCtxt<'a, 'tcx> {
|
||||||
));
|
));
|
||||||
ecx.evaluate_added_goals_and_make_canonical_response(Certainty::Yes)
|
ecx.evaluate_added_goals_and_make_canonical_response(Certainty::Yes)
|
||||||
});
|
});
|
||||||
debug!("evaluate_normalizes_to({alias}, {other}, {direction:?}) -> {result:?}");
|
debug!(?result);
|
||||||
result
|
result
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -210,7 +219,7 @@ impl<'a, 'tcx> EvalCtxt<'a, 'tcx> {
|
||||||
}
|
}
|
||||||
|
|
||||||
(Some(alias_lhs), Some(alias_rhs)) => {
|
(Some(alias_lhs), Some(alias_rhs)) => {
|
||||||
debug!("compute_alias_relate_goal: both sides are aliases");
|
debug!("both sides are aliases");
|
||||||
|
|
||||||
let candidates = vec![
|
let candidates = vec![
|
||||||
// LHS normalizes-to RHS
|
// LHS normalizes-to RHS
|
||||||
|
@ -219,9 +228,14 @@ impl<'a, 'tcx> EvalCtxt<'a, 'tcx> {
|
||||||
evaluate_normalizes_to(self, alias_rhs, lhs, direction, Invert::Yes),
|
evaluate_normalizes_to(self, alias_rhs, lhs, direction, Invert::Yes),
|
||||||
// Relate via substs
|
// Relate via substs
|
||||||
self.probe(|ecx| {
|
self.probe(|ecx| {
|
||||||
debug!(
|
let span = tracing::span!(
|
||||||
"compute_alias_relate_goal: alias defids are equal, equating substs"
|
tracing::Level::DEBUG,
|
||||||
|
"compute_alias_relate_goal(relate_via_substs)",
|
||||||
|
?alias_lhs,
|
||||||
|
?alias_rhs,
|
||||||
|
?direction
|
||||||
);
|
);
|
||||||
|
let _enter = span.enter();
|
||||||
|
|
||||||
match direction {
|
match direction {
|
||||||
ty::AliasRelationDirection::Equate => {
|
ty::AliasRelationDirection::Equate => {
|
||||||
|
@ -275,6 +289,7 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {
|
||||||
debug!("added_goals={:?}", &self.nested_goals.goals[current_len..]);
|
debug!("added_goals={:?}", &self.nested_goals.goals[current_len..]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[instrument(level = "debug", skip(self, responses))]
|
||||||
fn try_merge_responses(
|
fn try_merge_responses(
|
||||||
&mut self,
|
&mut self,
|
||||||
responses: impl Iterator<Item = QueryResult<'tcx>>,
|
responses: impl Iterator<Item = QueryResult<'tcx>>,
|
||||||
|
@ -304,6 +319,7 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {
|
||||||
});
|
});
|
||||||
// FIXME(-Ztrait-solver=next): We should take the intersection of the constraints on all the
|
// FIXME(-Ztrait-solver=next): We should take the intersection of the constraints on all the
|
||||||
// responses and use that for the constraints of this ambiguous response.
|
// responses and use that for the constraints of this ambiguous response.
|
||||||
|
debug!(">1 response, bailing with {certainty:?}");
|
||||||
let response = self.evaluate_added_goals_and_make_canonical_response(certainty);
|
let response = self.evaluate_added_goals_and_make_canonical_response(certainty);
|
||||||
if let Ok(response) = &response {
|
if let Ok(response) = &response {
|
||||||
assert!(response.has_no_inference_or_external_constraints());
|
assert!(response.has_no_inference_or_external_constraints());
|
||||||
|
|
|
@ -209,6 +209,7 @@ impl<'tcx> SearchGraph<'tcx> {
|
||||||
) -> QueryResult<'tcx> {
|
) -> QueryResult<'tcx> {
|
||||||
if self.should_use_global_cache() {
|
if self.should_use_global_cache() {
|
||||||
if let Some(result) = tcx.new_solver_evaluation_cache.get(&canonical_goal, tcx) {
|
if let Some(result) = tcx.new_solver_evaluation_cache.get(&canonical_goal, tcx) {
|
||||||
|
debug!(?canonical_goal, ?result, "cache hit");
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,8 +4,9 @@ use std::collections::BTreeSet;
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::ffi::OsStr;
|
use std::ffi::OsStr;
|
||||||
use std::fmt::{Debug, Write};
|
use std::fmt::{Debug, Write};
|
||||||
use std::fs::{self};
|
use std::fs::{self, File};
|
||||||
use std::hash::Hash;
|
use std::hash::Hash;
|
||||||
|
use std::io::{BufRead, BufReader};
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
use std::path::{Component, Path, PathBuf};
|
use std::path::{Component, Path, PathBuf};
|
||||||
use std::process::Command;
|
use std::process::Command;
|
||||||
|
@ -28,8 +29,11 @@ use crate::{clean, dist};
|
||||||
use crate::{Build, CLang, DocTests, GitRepo, Mode};
|
use crate::{Build, CLang, DocTests, GitRepo, Mode};
|
||||||
|
|
||||||
pub use crate::Compiler;
|
pub use crate::Compiler;
|
||||||
// FIXME: replace with std::lazy after it gets stabilized and reaches beta
|
// FIXME:
|
||||||
use once_cell::sync::Lazy;
|
// - use std::lazy for `Lazy`
|
||||||
|
// - use std::cell for `OnceCell`
|
||||||
|
// Once they get stabilized and reach beta.
|
||||||
|
use once_cell::sync::{Lazy, OnceCell};
|
||||||
|
|
||||||
pub struct Builder<'a> {
|
pub struct Builder<'a> {
|
||||||
pub build: &'a Build,
|
pub build: &'a Build,
|
||||||
|
@ -484,17 +488,43 @@ impl<'a> ShouldRun<'a> {
|
||||||
|
|
||||||
// multiple aliases for the same job
|
// multiple aliases for the same job
|
||||||
pub fn paths(mut self, paths: &[&str]) -> Self {
|
pub fn paths(mut self, paths: &[&str]) -> Self {
|
||||||
|
static SUBMODULES_PATHS: OnceCell<Vec<String>> = OnceCell::new();
|
||||||
|
|
||||||
|
let init_submodules_paths = |src: &PathBuf| {
|
||||||
|
let file = File::open(src.join(".gitmodules")).unwrap();
|
||||||
|
|
||||||
|
let mut submodules_paths = vec![];
|
||||||
|
for line in BufReader::new(file).lines() {
|
||||||
|
if let Ok(line) = line {
|
||||||
|
let line = line.trim();
|
||||||
|
|
||||||
|
if line.starts_with("path") {
|
||||||
|
let actual_path =
|
||||||
|
line.split(' ').last().expect("Couldn't get value of path");
|
||||||
|
submodules_paths.push(actual_path.to_owned());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
submodules_paths
|
||||||
|
};
|
||||||
|
|
||||||
|
let submodules_paths =
|
||||||
|
SUBMODULES_PATHS.get_or_init(|| init_submodules_paths(&self.builder.src));
|
||||||
|
|
||||||
self.paths.insert(PathSet::Set(
|
self.paths.insert(PathSet::Set(
|
||||||
paths
|
paths
|
||||||
.iter()
|
.iter()
|
||||||
.map(|p| {
|
.map(|p| {
|
||||||
// FIXME(#96188): make sure this is actually a path.
|
// assert only if `p` isn't submodule
|
||||||
// This currently breaks for paths within submodules.
|
if !submodules_paths.iter().find(|sm_p| p.contains(*sm_p)).is_some() {
|
||||||
//assert!(
|
assert!(
|
||||||
// self.builder.src.join(p).exists(),
|
self.builder.src.join(p).exists(),
|
||||||
// "`should_run.paths` should correspond to real on-disk paths - use `alias` if there is no relevant path: {}",
|
"`should_run.paths` should correspond to real on-disk paths - use `alias` if there is no relevant path: {}",
|
||||||
// p
|
p
|
||||||
//);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
TaskPath { path: p.into(), kind: Some(self.kind) }
|
TaskPath { path: p.into(), kind: Some(self.kind) }
|
||||||
})
|
})
|
||||||
.collect(),
|
.collect(),
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
FROM ubuntu:22.04
|
FROM ubuntu:22.04
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
# NOTE: intentionally uses python2 for x.py so we can test it still works.
|
|
||||||
# validate-toolstate only runs in our CI, so it's ok for it to only support python3.
|
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
g++ \
|
g++ \
|
||||||
make \
|
make \
|
||||||
|
@ -33,4 +31,6 @@ RUN pip3 install --no-deps --no-cache-dir --require-hashes -r /tmp/reuse-require
|
||||||
COPY host-x86_64/mingw-check/validate-toolstate.sh /scripts/
|
COPY host-x86_64/mingw-check/validate-toolstate.sh /scripts/
|
||||||
COPY host-x86_64/mingw-check/validate-error-codes.sh /scripts/
|
COPY host-x86_64/mingw-check/validate-error-codes.sh /scripts/
|
||||||
|
|
||||||
|
# NOTE: intentionally uses python2 for x.py so we can test it still works.
|
||||||
|
# validate-toolstate only runs in our CI, so it's ok for it to only support python3.
|
||||||
ENV SCRIPT python2.7 ../x.py test --stage 0 src/tools/tidy tidyselftest
|
ENV SCRIPT python2.7 ../x.py test --stage 0 src/tools/tidy tidyselftest
|
||||||
|
|
|
@ -392,6 +392,7 @@ img {
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
/* The sidebar is by default hidden */
|
/* The sidebar is by default hidden */
|
||||||
overflow-y: hidden;
|
overflow-y: hidden;
|
||||||
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar, .mobile-topbar, .sidebar-menu-toggle,
|
.sidebar, .mobile-topbar, .sidebar-menu-toggle,
|
||||||
|
@ -535,6 +536,9 @@ ul.block, .block li {
|
||||||
.rustdoc .example-wrap > pre {
|
.rustdoc .example-wrap > pre {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rustdoc:not(.source) .example-wrap > pre {
|
||||||
overflow: auto hidden;
|
overflow: auto hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,36 +1,36 @@
|
||||||
// MIR for `address_of_reborrow` after SimplifyCfg-initial
|
// MIR for `address_of_reborrow` after SimplifyCfg-initial
|
||||||
|
|
||||||
| User Type Annotations
|
| User Type Annotations
|
||||||
| 0: user_ty: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }], value: Ty(*const ^0) }, span: $DIR/address_of.rs:7:5: 7:18, inferred_ty: *const [i32; 10]
|
| 0: user_ty: Canonical { value: Ty(*const ^0), max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }] }, span: $DIR/address_of.rs:7:5: 7:18, inferred_ty: *const [i32; 10]
|
||||||
| 1: user_ty: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }], value: Ty(*const dyn std::marker::Send) }, span: $DIR/address_of.rs:9:5: 9:25, inferred_ty: *const dyn std::marker::Send
|
| 1: user_ty: Canonical { value: Ty(*const dyn std::marker::Send), max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }] }, span: $DIR/address_of.rs:9:5: 9:25, inferred_ty: *const dyn std::marker::Send
|
||||||
| 2: user_ty: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }], value: Ty(*const ^0) }, span: $DIR/address_of.rs:13:12: 13:20, inferred_ty: *const [i32; 10]
|
| 2: user_ty: Canonical { value: Ty(*const ^0), max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }] }, span: $DIR/address_of.rs:13:12: 13:20, inferred_ty: *const [i32; 10]
|
||||||
| 3: user_ty: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }], value: Ty(*const ^0) }, span: $DIR/address_of.rs:13:12: 13:20, inferred_ty: *const [i32; 10]
|
| 3: user_ty: Canonical { value: Ty(*const ^0), max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }] }, span: $DIR/address_of.rs:13:12: 13:20, inferred_ty: *const [i32; 10]
|
||||||
| 4: user_ty: Canonical { max_universe: U0, variables: [], value: Ty(*const [i32; 10]) }, span: $DIR/address_of.rs:14:12: 14:28, inferred_ty: *const [i32; 10]
|
| 4: user_ty: Canonical { value: Ty(*const [i32; 10]), max_universe: U0, variables: [] }, span: $DIR/address_of.rs:14:12: 14:28, inferred_ty: *const [i32; 10]
|
||||||
| 5: user_ty: Canonical { max_universe: U0, variables: [], value: Ty(*const [i32; 10]) }, span: $DIR/address_of.rs:14:12: 14:28, inferred_ty: *const [i32; 10]
|
| 5: user_ty: Canonical { value: Ty(*const [i32; 10]), max_universe: U0, variables: [] }, span: $DIR/address_of.rs:14:12: 14:28, inferred_ty: *const [i32; 10]
|
||||||
| 6: user_ty: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }], value: Ty(*const dyn std::marker::Send) }, span: $DIR/address_of.rs:15:12: 15:27, inferred_ty: *const dyn std::marker::Send
|
| 6: user_ty: Canonical { value: Ty(*const dyn std::marker::Send), max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }] }, span: $DIR/address_of.rs:15:12: 15:27, inferred_ty: *const dyn std::marker::Send
|
||||||
| 7: user_ty: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }], value: Ty(*const dyn std::marker::Send) }, span: $DIR/address_of.rs:15:12: 15:27, inferred_ty: *const dyn std::marker::Send
|
| 7: user_ty: Canonical { value: Ty(*const dyn std::marker::Send), max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }] }, span: $DIR/address_of.rs:15:12: 15:27, inferred_ty: *const dyn std::marker::Send
|
||||||
| 8: user_ty: Canonical { max_universe: U0, variables: [], value: Ty(*const [i32]) }, span: $DIR/address_of.rs:16:12: 16:24, inferred_ty: *const [i32]
|
| 8: user_ty: Canonical { value: Ty(*const [i32]), max_universe: U0, variables: [] }, span: $DIR/address_of.rs:16:12: 16:24, inferred_ty: *const [i32]
|
||||||
| 9: user_ty: Canonical { max_universe: U0, variables: [], value: Ty(*const [i32]) }, span: $DIR/address_of.rs:16:12: 16:24, inferred_ty: *const [i32]
|
| 9: user_ty: Canonical { value: Ty(*const [i32]), max_universe: U0, variables: [] }, span: $DIR/address_of.rs:16:12: 16:24, inferred_ty: *const [i32]
|
||||||
| 10: user_ty: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }], value: Ty(*const ^0) }, span: $DIR/address_of.rs:18:5: 18:18, inferred_ty: *const [i32; 10]
|
| 10: user_ty: Canonical { value: Ty(*const ^0), max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }] }, span: $DIR/address_of.rs:18:5: 18:18, inferred_ty: *const [i32; 10]
|
||||||
| 11: user_ty: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }], value: Ty(*const dyn std::marker::Send) }, span: $DIR/address_of.rs:20:5: 20:25, inferred_ty: *const dyn std::marker::Send
|
| 11: user_ty: Canonical { value: Ty(*const dyn std::marker::Send), max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }] }, span: $DIR/address_of.rs:20:5: 20:25, inferred_ty: *const dyn std::marker::Send
|
||||||
| 12: user_ty: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }], value: Ty(*const ^0) }, span: $DIR/address_of.rs:23:12: 23:20, inferred_ty: *const [i32; 10]
|
| 12: user_ty: Canonical { value: Ty(*const ^0), max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }] }, span: $DIR/address_of.rs:23:12: 23:20, inferred_ty: *const [i32; 10]
|
||||||
| 13: user_ty: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }], value: Ty(*const ^0) }, span: $DIR/address_of.rs:23:12: 23:20, inferred_ty: *const [i32; 10]
|
| 13: user_ty: Canonical { value: Ty(*const ^0), max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }] }, span: $DIR/address_of.rs:23:12: 23:20, inferred_ty: *const [i32; 10]
|
||||||
| 14: user_ty: Canonical { max_universe: U0, variables: [], value: Ty(*const [i32; 10]) }, span: $DIR/address_of.rs:24:12: 24:28, inferred_ty: *const [i32; 10]
|
| 14: user_ty: Canonical { value: Ty(*const [i32; 10]), max_universe: U0, variables: [] }, span: $DIR/address_of.rs:24:12: 24:28, inferred_ty: *const [i32; 10]
|
||||||
| 15: user_ty: Canonical { max_universe: U0, variables: [], value: Ty(*const [i32; 10]) }, span: $DIR/address_of.rs:24:12: 24:28, inferred_ty: *const [i32; 10]
|
| 15: user_ty: Canonical { value: Ty(*const [i32; 10]), max_universe: U0, variables: [] }, span: $DIR/address_of.rs:24:12: 24:28, inferred_ty: *const [i32; 10]
|
||||||
| 16: user_ty: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }], value: Ty(*const dyn std::marker::Send) }, span: $DIR/address_of.rs:25:12: 25:27, inferred_ty: *const dyn std::marker::Send
|
| 16: user_ty: Canonical { value: Ty(*const dyn std::marker::Send), max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }] }, span: $DIR/address_of.rs:25:12: 25:27, inferred_ty: *const dyn std::marker::Send
|
||||||
| 17: user_ty: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }], value: Ty(*const dyn std::marker::Send) }, span: $DIR/address_of.rs:25:12: 25:27, inferred_ty: *const dyn std::marker::Send
|
| 17: user_ty: Canonical { value: Ty(*const dyn std::marker::Send), max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }] }, span: $DIR/address_of.rs:25:12: 25:27, inferred_ty: *const dyn std::marker::Send
|
||||||
| 18: user_ty: Canonical { max_universe: U0, variables: [], value: Ty(*const [i32]) }, span: $DIR/address_of.rs:26:12: 26:24, inferred_ty: *const [i32]
|
| 18: user_ty: Canonical { value: Ty(*const [i32]), max_universe: U0, variables: [] }, span: $DIR/address_of.rs:26:12: 26:24, inferred_ty: *const [i32]
|
||||||
| 19: user_ty: Canonical { max_universe: U0, variables: [], value: Ty(*const [i32]) }, span: $DIR/address_of.rs:26:12: 26:24, inferred_ty: *const [i32]
|
| 19: user_ty: Canonical { value: Ty(*const [i32]), max_universe: U0, variables: [] }, span: $DIR/address_of.rs:26:12: 26:24, inferred_ty: *const [i32]
|
||||||
| 20: user_ty: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }], value: Ty(*mut ^0) }, span: $DIR/address_of.rs:28:5: 28:16, inferred_ty: *mut [i32; 10]
|
| 20: user_ty: Canonical { value: Ty(*mut ^0), max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }] }, span: $DIR/address_of.rs:28:5: 28:16, inferred_ty: *mut [i32; 10]
|
||||||
| 21: user_ty: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }], value: Ty(*mut dyn std::marker::Send) }, span: $DIR/address_of.rs:30:5: 30:23, inferred_ty: *mut dyn std::marker::Send
|
| 21: user_ty: Canonical { value: Ty(*mut dyn std::marker::Send), max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }] }, span: $DIR/address_of.rs:30:5: 30:23, inferred_ty: *mut dyn std::marker::Send
|
||||||
| 22: user_ty: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }], value: Ty(*mut ^0) }, span: $DIR/address_of.rs:33:12: 33:18, inferred_ty: *mut [i32; 10]
|
| 22: user_ty: Canonical { value: Ty(*mut ^0), max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }] }, span: $DIR/address_of.rs:33:12: 33:18, inferred_ty: *mut [i32; 10]
|
||||||
| 23: user_ty: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }], value: Ty(*mut ^0) }, span: $DIR/address_of.rs:33:12: 33:18, inferred_ty: *mut [i32; 10]
|
| 23: user_ty: Canonical { value: Ty(*mut ^0), max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }] }, span: $DIR/address_of.rs:33:12: 33:18, inferred_ty: *mut [i32; 10]
|
||||||
| 24: user_ty: Canonical { max_universe: U0, variables: [], value: Ty(*mut [i32; 10]) }, span: $DIR/address_of.rs:34:12: 34:26, inferred_ty: *mut [i32; 10]
|
| 24: user_ty: Canonical { value: Ty(*mut [i32; 10]), max_universe: U0, variables: [] }, span: $DIR/address_of.rs:34:12: 34:26, inferred_ty: *mut [i32; 10]
|
||||||
| 25: user_ty: Canonical { max_universe: U0, variables: [], value: Ty(*mut [i32; 10]) }, span: $DIR/address_of.rs:34:12: 34:26, inferred_ty: *mut [i32; 10]
|
| 25: user_ty: Canonical { value: Ty(*mut [i32; 10]), max_universe: U0, variables: [] }, span: $DIR/address_of.rs:34:12: 34:26, inferred_ty: *mut [i32; 10]
|
||||||
| 26: user_ty: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }], value: Ty(*mut dyn std::marker::Send) }, span: $DIR/address_of.rs:35:12: 35:25, inferred_ty: *mut dyn std::marker::Send
|
| 26: user_ty: Canonical { value: Ty(*mut dyn std::marker::Send), max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }] }, span: $DIR/address_of.rs:35:12: 35:25, inferred_ty: *mut dyn std::marker::Send
|
||||||
| 27: user_ty: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }], value: Ty(*mut dyn std::marker::Send) }, span: $DIR/address_of.rs:35:12: 35:25, inferred_ty: *mut dyn std::marker::Send
|
| 27: user_ty: Canonical { value: Ty(*mut dyn std::marker::Send), max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }] }, span: $DIR/address_of.rs:35:12: 35:25, inferred_ty: *mut dyn std::marker::Send
|
||||||
| 28: user_ty: Canonical { max_universe: U0, variables: [], value: Ty(*mut [i32]) }, span: $DIR/address_of.rs:36:12: 36:22, inferred_ty: *mut [i32]
|
| 28: user_ty: Canonical { value: Ty(*mut [i32]), max_universe: U0, variables: [] }, span: $DIR/address_of.rs:36:12: 36:22, inferred_ty: *mut [i32]
|
||||||
| 29: user_ty: Canonical { max_universe: U0, variables: [], value: Ty(*mut [i32]) }, span: $DIR/address_of.rs:36:12: 36:22, inferred_ty: *mut [i32]
|
| 29: user_ty: Canonical { value: Ty(*mut [i32]), max_universe: U0, variables: [] }, span: $DIR/address_of.rs:36:12: 36:22, inferred_ty: *mut [i32]
|
||||||
|
|
|
|
||||||
fn address_of_reborrow() -> () {
|
fn address_of_reborrow() -> () {
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/address_of.rs:+0:26: +0:26
|
let mut _0: (); // return place in scope 0 at $DIR/address_of.rs:+0:26: +0:26
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
// MIR for `main` after SimplifyCfg-initial
|
// MIR for `main` after SimplifyCfg-initial
|
||||||
|
|
||||||
| User Type Annotations
|
| User Type Annotations
|
||||||
| 0: user_ty: Canonical { max_universe: U0, variables: [], value: Ty(std::option::Option<std::boxed::Box<u32>>) }, span: $DIR/basic_assignment.rs:20:17: 20:33, inferred_ty: std::option::Option<std::boxed::Box<u32>>
|
| 0: user_ty: Canonical { value: Ty(std::option::Option<std::boxed::Box<u32>>), max_universe: U0, variables: [] }, span: $DIR/basic_assignment.rs:20:17: 20:33, inferred_ty: std::option::Option<std::boxed::Box<u32>>
|
||||||
| 1: user_ty: Canonical { max_universe: U0, variables: [], value: Ty(std::option::Option<std::boxed::Box<u32>>) }, span: $DIR/basic_assignment.rs:20:17: 20:33, inferred_ty: std::option::Option<std::boxed::Box<u32>>
|
| 1: user_ty: Canonical { value: Ty(std::option::Option<std::boxed::Box<u32>>), max_universe: U0, variables: [] }, span: $DIR/basic_assignment.rs:20:17: 20:33, inferred_ty: std::option::Option<std::boxed::Box<u32>>
|
||||||
|
|
|
|
||||||
fn main() -> () {
|
fn main() -> () {
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/basic_assignment.rs:+0:11: +0:11
|
let mut _0: (); // return place in scope 0 at $DIR/basic_assignment.rs:+0:11: +0:11
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
// MIR for `main` after built
|
// MIR for `main` after built
|
||||||
|
|
||||||
| User Type Annotations
|
| User Type Annotations
|
||||||
| 0: user_ty: Canonical { max_universe: U0, variables: [], value: Ty(std::option::Option<u8>) }, span: $DIR/issue_101867.rs:3:12: 3:22, inferred_ty: std::option::Option<u8>
|
| 0: user_ty: Canonical { value: Ty(std::option::Option<u8>), max_universe: U0, variables: [] }, span: $DIR/issue_101867.rs:3:12: 3:22, inferred_ty: std::option::Option<u8>
|
||||||
| 1: user_ty: Canonical { max_universe: U0, variables: [], value: Ty(std::option::Option<u8>) }, span: $DIR/issue_101867.rs:3:12: 3:22, inferred_ty: std::option::Option<u8>
|
| 1: user_ty: Canonical { value: Ty(std::option::Option<u8>), max_universe: U0, variables: [] }, span: $DIR/issue_101867.rs:3:12: 3:22, inferred_ty: std::option::Option<u8>
|
||||||
|
|
|
|
||||||
fn main() -> () {
|
fn main() -> () {
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/issue_101867.rs:+0:11: +0:11
|
let mut _0: (); // return place in scope 0 at $DIR/issue_101867.rs:+0:11: +0:11
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
// MIR for `main` after built
|
// MIR for `main` after built
|
||||||
|
|
||||||
| User Type Annotations
|
| User Type Annotations
|
||||||
| 0: user_ty: Canonical { max_universe: U0, variables: [], value: Ty(*mut Test) }, span: $DIR/receiver_ptr_mutability.rs:14:14: 14:23, inferred_ty: *mut Test
|
| 0: user_ty: Canonical { value: Ty(*mut Test), max_universe: U0, variables: [] }, span: $DIR/receiver_ptr_mutability.rs:14:14: 14:23, inferred_ty: *mut Test
|
||||||
| 1: user_ty: Canonical { max_universe: U0, variables: [], value: Ty(*mut Test) }, span: $DIR/receiver_ptr_mutability.rs:14:14: 14:23, inferred_ty: *mut Test
|
| 1: user_ty: Canonical { value: Ty(*mut Test), max_universe: U0, variables: [] }, span: $DIR/receiver_ptr_mutability.rs:14:14: 14:23, inferred_ty: *mut Test
|
||||||
| 2: user_ty: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }, CanonicalVarInfo { kind: Region(U0) }, CanonicalVarInfo { kind: Region(U0) }, CanonicalVarInfo { kind: Region(U0) }], value: Ty(&&&&*mut Test) }, span: $DIR/receiver_ptr_mutability.rs:18:18: 18:31, inferred_ty: &&&&*mut Test
|
| 2: user_ty: Canonical { value: Ty(&&&&*mut Test), max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }, CanonicalVarInfo { kind: Region(U0) }, CanonicalVarInfo { kind: Region(U0) }, CanonicalVarInfo { kind: Region(U0) }] }, span: $DIR/receiver_ptr_mutability.rs:18:18: 18:31, inferred_ty: &&&&*mut Test
|
||||||
| 3: user_ty: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }, CanonicalVarInfo { kind: Region(U0) }, CanonicalVarInfo { kind: Region(U0) }, CanonicalVarInfo { kind: Region(U0) }], value: Ty(&&&&*mut Test) }, span: $DIR/receiver_ptr_mutability.rs:18:18: 18:31, inferred_ty: &&&&*mut Test
|
| 3: user_ty: Canonical { value: Ty(&&&&*mut Test), max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }, CanonicalVarInfo { kind: Region(U0) }, CanonicalVarInfo { kind: Region(U0) }, CanonicalVarInfo { kind: Region(U0) }] }, span: $DIR/receiver_ptr_mutability.rs:18:18: 18:31, inferred_ty: &&&&*mut Test
|
||||||
|
|
|
|
||||||
fn main() -> () {
|
fn main() -> () {
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/receiver_ptr_mutability.rs:+0:11: +0:11
|
let mut _0: (); // return place in scope 0 at $DIR/receiver_ptr_mutability.rs:+0:11: +0:11
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
// MIR for `main` after built
|
// MIR for `main` after built
|
||||||
|
|
||||||
| User Type Annotations
|
| User Type Annotations
|
||||||
| 0: user_ty: Canonical { max_universe: U0, variables: [], value: Ty(Void) }, span: $DIR/issue_72181_1.rs:16:12: 16:16, inferred_ty: Void
|
| 0: user_ty: Canonical { value: Ty(Void), max_universe: U0, variables: [] }, span: $DIR/issue_72181_1.rs:16:12: 16:16, inferred_ty: Void
|
||||||
| 1: user_ty: Canonical { max_universe: U0, variables: [], value: Ty(Void) }, span: $DIR/issue_72181_1.rs:16:12: 16:16, inferred_ty: Void
|
| 1: user_ty: Canonical { value: Ty(Void), max_universe: U0, variables: [] }, span: $DIR/issue_72181_1.rs:16:12: 16:16, inferred_ty: Void
|
||||||
|
|
|
|
||||||
fn main() -> () {
|
fn main() -> () {
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/issue_72181_1.rs:+0:11: +0:11
|
let mut _0: (); // return place in scope 0 at $DIR/issue_72181_1.rs:+0:11: +0:11
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
// MIR for `main` after built
|
// MIR for `main` after built
|
||||||
|
|
||||||
| User Type Annotations
|
| User Type Annotations
|
||||||
| 0: user_ty: Canonical { max_universe: U0, variables: [], value: TypeOf(DefId(0:3 ~ issue_99325[8f58]::function_with_bytes), UserSubsts { substs: [Const { ty: &'static [u8; 4], kind: Value(Branch([Leaf(0x41), Leaf(0x41), Leaf(0x41), Leaf(0x41)])) }], user_self_ty: None }) }, span: $DIR/issue_99325.rs:10:16: 10:46, inferred_ty: fn() -> &'static [u8] {function_with_bytes::<&*b"AAAA">}
|
| 0: user_ty: Canonical { value: TypeOf(DefId(0:3 ~ issue_99325[8f58]::function_with_bytes), UserSubsts { substs: [Const { ty: &'static [u8; 4], kind: Value(Branch([Leaf(0x41), Leaf(0x41), Leaf(0x41), Leaf(0x41)])) }], user_self_ty: None }), max_universe: U0, variables: [] }, span: $DIR/issue_99325.rs:10:16: 10:46, inferred_ty: fn() -> &'static [u8] {function_with_bytes::<&*b"AAAA">}
|
||||||
| 1: user_ty: Canonical { max_universe: U0, variables: [], value: TypeOf(DefId(0:3 ~ issue_99325[8f58]::function_with_bytes), UserSubsts { substs: [Const { ty: &'static [u8; 4], kind: Unevaluated(UnevaluatedConst { def: WithOptConstParam { did: DefId(0:8 ~ issue_99325[8f58]::main::{constant#1}), const_param_did: Some(DefId(0:4 ~ issue_99325[8f58]::function_with_bytes::BYTES)) }, substs: [] }) }], user_self_ty: None }) }, span: $DIR/issue_99325.rs:11:16: 11:68, inferred_ty: fn() -> &'static [u8] {function_with_bytes::<&*b"AAAA">}
|
| 1: user_ty: Canonical { value: TypeOf(DefId(0:3 ~ issue_99325[8f58]::function_with_bytes), UserSubsts { substs: [Const { ty: &'static [u8; 4], kind: Unevaluated(UnevaluatedConst { def: WithOptConstParam { did: DefId(0:8 ~ issue_99325[8f58]::main::{constant#1}), const_param_did: Some(DefId(0:4 ~ issue_99325[8f58]::function_with_bytes::BYTES)) }, substs: [] }) }], user_self_ty: None }), max_universe: U0, variables: [] }, span: $DIR/issue_99325.rs:11:16: 11:68, inferred_ty: fn() -> &'static [u8] {function_with_bytes::<&*b"AAAA">}
|
||||||
|
|
|
|
||||||
fn main() -> () {
|
fn main() -> () {
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/issue_99325.rs:+0:15: +0:15
|
let mut _0: (); // return place in scope 0 at $DIR/issue_99325.rs:+0:15: +0:15
|
||||||
|
|
8
tests/rustdoc-gui/source-code-page-code-scroll.goml
Normal file
8
tests/rustdoc-gui/source-code-page-code-scroll.goml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
// Checks that the scrollbar is visible on the page rather than the code block.
|
||||||
|
goto: "file://" + |DOC_PATH| + "/src/test_docs/lib.rs.html"
|
||||||
|
size: (800, 1000)
|
||||||
|
// "scrollWidth" should be superior than "clientWidth".
|
||||||
|
assert-property: ("body", {"scrollWidth": 1047, "clientWidth": 800})
|
||||||
|
|
||||||
|
// Both properties should be equal (ie, no scroll on the code block).
|
||||||
|
assert-property: (".example-wrap .rust", {"scrollWidth": 933, "clientWidth": 933})
|
|
@ -186,13 +186,17 @@ trigger_files = [
|
||||||
"configure",
|
"configure",
|
||||||
"Cargo.toml",
|
"Cargo.toml",
|
||||||
"config.example.toml",
|
"config.example.toml",
|
||||||
"src/stage0.json"
|
"src/stage0.json",
|
||||||
|
"src/tools/compiletest",
|
||||||
|
"src/tools/tidy",
|
||||||
]
|
]
|
||||||
|
|
||||||
[autolabel."T-infra"]
|
[autolabel."T-infra"]
|
||||||
trigger_files = [
|
trigger_files = [
|
||||||
"src/ci",
|
"src/ci",
|
||||||
"src/tools/bump-stage0",
|
"src/tools/bump-stage0",
|
||||||
|
"src/tools/cargotest",
|
||||||
|
"src/tools/tier-check",
|
||||||
]
|
]
|
||||||
|
|
||||||
[autolabel."T-style"]
|
[autolabel."T-style"]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue