mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
Auto merge of #116260 - matthiaskrgr:rollup-q3sge0i, r=matthiaskrgr
Rollup of 7 pull requests Successful merges: - #116133 (ref(bootstrap.py): add `eprint` function) - #116201 (Fix `noop_method_call` detection) - #116231 (Remove `rustc_lint_defs::lint_array`) - #116234 (Miri subtree update) - #116239 (Only visit reachable nodes in SsaLocals.) - #116245 (Clippy backport: Move needless_raw_string_hashes to pedantic) - #116253 (Make `adt_const_params` feature suggestion consistent with other features and improve when it is emitted) r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
a66e334bc5
17
Cargo.lock
17
Cargo.lock
@ -2419,7 +2419,7 @@ dependencies = [
|
||||
"rustc_version",
|
||||
"serde",
|
||||
"smallvec",
|
||||
"ui_test 0.11.7",
|
||||
"ui_test 0.21.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -5621,18 +5621,23 @@ checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
|
||||
|
||||
[[package]]
|
||||
name = "ui_test"
|
||||
version = "0.11.7"
|
||||
version = "0.20.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c21899b59f53717dfad29e4f46e5b21a200a1b6888ab86532a07cfc8b48dd78c"
|
||||
checksum = "bfd8fb9b15c8332cf51bfc2dc4830063b2446a9c9d732421b56f2478024a3971"
|
||||
dependencies = [
|
||||
"annotate-snippets",
|
||||
"anyhow",
|
||||
"bstr",
|
||||
"cargo-platform",
|
||||
"cargo_metadata",
|
||||
"color-eyre",
|
||||
"colored",
|
||||
"comma",
|
||||
"crossbeam-channel",
|
||||
"diff",
|
||||
"indicatif",
|
||||
"lazy_static",
|
||||
"levenshtein",
|
||||
"prettydiff",
|
||||
"regex",
|
||||
"rustc_version",
|
||||
"rustfix",
|
||||
@ -5643,9 +5648,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ui_test"
|
||||
version = "0.20.0"
|
||||
version = "0.21.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bfd8fb9b15c8332cf51bfc2dc4830063b2446a9c9d732421b56f2478024a3971"
|
||||
checksum = "aaf4bf7c184b8dfc7a4d3b90df789b1eb992ee42811cd115f32a7a1eb781058d"
|
||||
dependencies = [
|
||||
"annotate-snippets",
|
||||
"anyhow",
|
||||
|
@ -24,6 +24,9 @@ use rustc_span::symbol::{sym, Ident, Symbol};
|
||||
use rustc_span::{Span, DUMMY_SP};
|
||||
use rustc_target::spec::abi::Abi;
|
||||
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt;
|
||||
use rustc_trait_selection::traits::misc::{
|
||||
type_allowed_to_implement_const_param_ty, ConstParamTyImplementationError,
|
||||
};
|
||||
use rustc_trait_selection::traits::outlives_bounds::InferCtxtExt as _;
|
||||
use rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt as _;
|
||||
use rustc_trait_selection::traits::{
|
||||
@ -865,43 +868,65 @@ fn check_param_wf(tcx: TyCtxt<'_>, param: &hir::GenericParam<'_>) {
|
||||
);
|
||||
});
|
||||
} else {
|
||||
let err_ty_str;
|
||||
let mut is_ptr = true;
|
||||
|
||||
let err = match ty.kind() {
|
||||
let diag = match ty.kind() {
|
||||
ty::Bool | ty::Char | ty::Int(_) | ty::Uint(_) | ty::Error(_) => None,
|
||||
ty::FnPtr(_) => Some("function pointers"),
|
||||
ty::RawPtr(_) => Some("raw pointers"),
|
||||
_ => {
|
||||
is_ptr = false;
|
||||
err_ty_str = format!("`{ty}`");
|
||||
Some(err_ty_str.as_str())
|
||||
}
|
||||
ty::FnPtr(_) => Some(tcx.sess.struct_span_err(
|
||||
hir_ty.span,
|
||||
"using function pointers as const generic parameters is forbidden",
|
||||
)),
|
||||
ty::RawPtr(_) => Some(tcx.sess.struct_span_err(
|
||||
hir_ty.span,
|
||||
"using raw pointers as const generic parameters is forbidden",
|
||||
)),
|
||||
_ => Some(tcx.sess.struct_span_err(
|
||||
hir_ty.span,
|
||||
format!("`{}` is forbidden as the type of a const generic parameter", ty),
|
||||
)),
|
||||
};
|
||||
|
||||
if let Some(unsupported_type) = err {
|
||||
if is_ptr {
|
||||
tcx.sess.span_err(
|
||||
hir_ty.span,
|
||||
format!(
|
||||
"using {unsupported_type} as const generic parameters is forbidden",
|
||||
),
|
||||
);
|
||||
} else {
|
||||
let mut err = tcx.sess.struct_span_err(
|
||||
hir_ty.span,
|
||||
format!(
|
||||
"{unsupported_type} is forbidden as the type of a const generic parameter",
|
||||
),
|
||||
);
|
||||
err.note("the only supported types are integers, `bool` and `char`");
|
||||
if tcx.sess.is_nightly_build() {
|
||||
err.help(
|
||||
"more complex types are supported with `#![feature(adt_const_params)]`",
|
||||
);
|
||||
if let Some(mut diag) = diag {
|
||||
diag.note("the only supported types are integers, `bool` and `char`");
|
||||
|
||||
let cause = ObligationCause::misc(hir_ty.span, param.def_id);
|
||||
let may_suggest_feature = match type_allowed_to_implement_const_param_ty(
|
||||
tcx,
|
||||
tcx.param_env(param.def_id),
|
||||
ty,
|
||||
cause,
|
||||
) {
|
||||
// Can never implement `ConstParamTy`, don't suggest anything.
|
||||
Err(ConstParamTyImplementationError::NotAnAdtOrBuiltinAllowed) => false,
|
||||
// May be able to implement `ConstParamTy`. Only emit the feature help
|
||||
// if the type is local, since the user may be able to fix the local type.
|
||||
Err(ConstParamTyImplementationError::InfrigingFields(..)) => {
|
||||
fn ty_is_local(ty: Ty<'_>) -> bool {
|
||||
match ty.kind() {
|
||||
ty::Adt(adt_def, ..) => adt_def.did().is_local(),
|
||||
// Arrays and slices use the inner type's `ConstParamTy`.
|
||||
ty::Array(ty, ..) => ty_is_local(*ty),
|
||||
ty::Slice(ty) => ty_is_local(*ty),
|
||||
// `&` references use the inner type's `ConstParamTy`.
|
||||
// `&mut` are not supported.
|
||||
ty::Ref(_, ty, ast::Mutability::Not) => ty_is_local(*ty),
|
||||
// Say that a tuple is local if any of its components are local.
|
||||
// This is not strictly correct, but it's likely that the user can fix the local component.
|
||||
ty::Tuple(tys) => tys.iter().any(|ty| ty_is_local(ty)),
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
|
||||
ty_is_local(ty)
|
||||
}
|
||||
err.emit();
|
||||
// Implments `ConstParamTy`, suggest adding the feature to enable.
|
||||
Ok(..) => true,
|
||||
};
|
||||
if may_suggest_feature && tcx.sess.is_nightly_build() {
|
||||
diag.help(
|
||||
"add `#![feature(adt_const_params)]` to the crate attributes to enable more complex and user defined types",
|
||||
);
|
||||
}
|
||||
|
||||
diag.emit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,19 +5,18 @@ use rustc_hir::def::DefKind;
|
||||
use rustc_middle::query::Providers;
|
||||
use rustc_middle::ty::layout::LayoutError;
|
||||
use rustc_middle::ty::{self, Instance, Ty, TyCtxt};
|
||||
use rustc_session::lint::{lint_array, LintArray};
|
||||
use rustc_span::{sym, Span, Symbol};
|
||||
use rustc_target::abi::FIRST_VARIANT;
|
||||
|
||||
use crate::lints::{BuiltinClashingExtern, BuiltinClashingExternSub};
|
||||
use crate::types;
|
||||
use crate::{types, LintVec};
|
||||
|
||||
pub(crate) fn provide(providers: &mut Providers) {
|
||||
*providers = Providers { clashing_extern_declarations, ..*providers };
|
||||
}
|
||||
|
||||
pub(crate) fn get_lints() -> LintArray {
|
||||
lint_array!(CLASHING_EXTERN_DECLARATIONS)
|
||||
pub(crate) fn get_lints() -> LintVec {
|
||||
vec![CLASHING_EXTERN_DECLARATIONS]
|
||||
}
|
||||
|
||||
fn clashing_extern_declarations(tcx: TyCtxt<'_>, (): ()) {
|
||||
|
@ -130,7 +130,7 @@ pub use late::{check_crate, late_lint_mod, unerased_lint_store};
|
||||
pub use passes::{EarlyLintPass, LateLintPass};
|
||||
pub use rustc_session::lint::Level::{self, *};
|
||||
pub use rustc_session::lint::{BufferedEarlyLint, FutureIncompatibleInfo, Lint, LintId};
|
||||
pub use rustc_session::lint::{LintArray, LintPass};
|
||||
pub use rustc_session::lint::{LintPass, LintVec};
|
||||
|
||||
fluent_messages! { "../messages.ftl" }
|
||||
|
||||
|
@ -98,6 +98,12 @@ impl<'tcx> LateLintPass<'tcx> for NoopMethodCall {
|
||||
let Ok(Some(i)) = ty::Instance::resolve(cx.tcx, cx.param_env, did, args) else { return };
|
||||
// (Re)check that it implements the noop diagnostic.
|
||||
let Some(name) = cx.tcx.get_diagnostic_name(i.def_id()) else { return };
|
||||
if !matches!(
|
||||
name,
|
||||
sym::noop_method_borrow | sym::noop_method_clone | sym::noop_method_deref
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
let receiver_ty = cx.typeck_results().expr_ty(receiver);
|
||||
let expr_ty = cx.typeck_results().expr_ty_adjusted(expr);
|
||||
|
@ -111,7 +111,7 @@ macro_rules! declare_combined_late_lint_pass {
|
||||
}
|
||||
}
|
||||
|
||||
$v fn get_lints() -> $crate::LintArray {
|
||||
$v fn get_lints() -> $crate::LintVec {
|
||||
let mut lints = Vec::new();
|
||||
$(lints.extend_from_slice(&$pass::get_lints());)*
|
||||
lints
|
||||
@ -226,7 +226,7 @@ macro_rules! declare_combined_early_lint_pass {
|
||||
}
|
||||
}
|
||||
|
||||
$v fn get_lints() -> $crate::LintArray {
|
||||
$v fn get_lints() -> $crate::LintVec {
|
||||
let mut lints = Vec::new();
|
||||
$(lints.extend_from_slice(&$pass::get_lints());)*
|
||||
lints
|
||||
|
@ -785,16 +785,7 @@ macro_rules! declare_tool_lint {
|
||||
);
|
||||
}
|
||||
|
||||
/// Declares a static `LintArray` and return it as an expression.
|
||||
#[macro_export]
|
||||
macro_rules! lint_array {
|
||||
($( $lint:expr ),* ,) => { lint_array!( $($lint),* ) };
|
||||
($( $lint:expr ),*) => {{
|
||||
vec![$($lint),*]
|
||||
}}
|
||||
}
|
||||
|
||||
pub type LintArray = Vec<&'static Lint>;
|
||||
pub type LintVec = Vec<&'static Lint>;
|
||||
|
||||
pub trait LintPass {
|
||||
fn name(&self) -> &'static str;
|
||||
@ -808,7 +799,7 @@ macro_rules! impl_lint_pass {
|
||||
fn name(&self) -> &'static str { stringify!($ty) }
|
||||
}
|
||||
impl $ty {
|
||||
pub fn get_lints() -> $crate::LintArray { $crate::lint_array!($($lint),*) }
|
||||
pub fn get_lints() -> $crate::LintVec { vec![$($lint),*] }
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -78,14 +78,10 @@ impl SsaLocals {
|
||||
visitor.assignments[local] = Set1::One(LocationExtended::Arg);
|
||||
}
|
||||
|
||||
if body.basic_blocks.len() > 2 {
|
||||
for (bb, data) in traversal::reverse_postorder(body) {
|
||||
visitor.visit_basic_block_data(bb, data);
|
||||
}
|
||||
} else {
|
||||
for (bb, data) in body.basic_blocks.iter_enumerated() {
|
||||
visitor.visit_basic_block_data(bb, data);
|
||||
}
|
||||
// For SSA assignments, a RPO visit will see the assignment before it sees any use.
|
||||
// We only visit reachable nodes: computing `dominates` on an unreachable node ICEs.
|
||||
for (bb, data) in traversal::reverse_postorder(body) {
|
||||
visitor.visit_basic_block_data(bb, data);
|
||||
}
|
||||
|
||||
for var_debug_info in &body.var_debug_info {
|
||||
|
@ -41,6 +41,10 @@ def get_cpus():
|
||||
return 1
|
||||
|
||||
|
||||
def eprint(*args, **kwargs):
|
||||
kwargs["file"] = sys.stderr
|
||||
print(*args, **kwargs)
|
||||
|
||||
|
||||
def get(base, url, path, checksums, verbose=False):
|
||||
with tempfile.NamedTemporaryFile(delete=False) as temp_file:
|
||||
@ -57,23 +61,23 @@ def get(base, url, path, checksums, verbose=False):
|
||||
if os.path.exists(path):
|
||||
if verify(path, sha256, False):
|
||||
if verbose:
|
||||
print("using already-download file", path, file=sys.stderr)
|
||||
eprint("using already-download file", path)
|
||||
return
|
||||
else:
|
||||
if verbose:
|
||||
print("ignoring already-download file",
|
||||
path, "due to failed verification", file=sys.stderr)
|
||||
eprint("ignoring already-download file",
|
||||
path, "due to failed verification")
|
||||
os.unlink(path)
|
||||
download(temp_path, "{}/{}".format(base, url), True, verbose)
|
||||
if not verify(temp_path, sha256, verbose):
|
||||
raise RuntimeError("failed verification")
|
||||
if verbose:
|
||||
print("moving {} to {}".format(temp_path, path), file=sys.stderr)
|
||||
eprint("moving {} to {}".format(temp_path, path))
|
||||
shutil.move(temp_path, path)
|
||||
finally:
|
||||
if os.path.isfile(temp_path):
|
||||
if verbose:
|
||||
print("removing", temp_path, file=sys.stderr)
|
||||
eprint("removing", temp_path)
|
||||
os.unlink(temp_path)
|
||||
|
||||
|
||||
@ -83,7 +87,7 @@ def download(path, url, probably_big, verbose):
|
||||
_download(path, url, probably_big, verbose, True)
|
||||
return
|
||||
except RuntimeError:
|
||||
print("\nspurious failure, trying again", file=sys.stderr)
|
||||
eprint("\nspurious failure, trying again")
|
||||
_download(path, url, probably_big, verbose, False)
|
||||
|
||||
|
||||
@ -94,7 +98,7 @@ def _download(path, url, probably_big, verbose, exception):
|
||||
# - If we are on win32 fallback to powershell
|
||||
# - Otherwise raise the error if appropriate
|
||||
if probably_big or verbose:
|
||||
print("downloading {}".format(url), file=sys.stderr)
|
||||
eprint("downloading {}".format(url))
|
||||
|
||||
try:
|
||||
if (probably_big or verbose) and "GITHUB_ACTIONS" not in os.environ:
|
||||
@ -129,20 +133,20 @@ def _download(path, url, probably_big, verbose, exception):
|
||||
def verify(path, expected, verbose):
|
||||
"""Check if the sha256 sum of the given path is valid"""
|
||||
if verbose:
|
||||
print("verifying", path, file=sys.stderr)
|
||||
eprint("verifying", path)
|
||||
with open(path, "rb") as source:
|
||||
found = hashlib.sha256(source.read()).hexdigest()
|
||||
verified = found == expected
|
||||
if not verified:
|
||||
print("invalid checksum:\n"
|
||||
eprint("invalid checksum:\n"
|
||||
" found: {}\n"
|
||||
" expected: {}".format(found, expected), file=sys.stderr)
|
||||
" expected: {}".format(found, expected))
|
||||
return verified
|
||||
|
||||
|
||||
def unpack(tarball, tarball_suffix, dst, verbose=False, match=None):
|
||||
"""Unpack the given tarball file"""
|
||||
print("extracting", tarball, file=sys.stderr)
|
||||
eprint("extracting", tarball)
|
||||
fname = os.path.basename(tarball).replace(tarball_suffix, "")
|
||||
with contextlib.closing(tarfile.open(tarball)) as tar:
|
||||
for member in tar.getnames():
|
||||
@ -155,7 +159,7 @@ def unpack(tarball, tarball_suffix, dst, verbose=False, match=None):
|
||||
|
||||
dst_path = os.path.join(dst, name)
|
||||
if verbose:
|
||||
print(" extracting", member, file=sys.stderr)
|
||||
eprint(" extracting", member)
|
||||
tar.extract(member, dst)
|
||||
src_path = os.path.join(dst, member)
|
||||
if os.path.isdir(src_path) and os.path.exists(dst_path):
|
||||
@ -167,7 +171,7 @@ def unpack(tarball, tarball_suffix, dst, verbose=False, match=None):
|
||||
def run(args, verbose=False, exception=False, is_bootstrap=False, **kwargs):
|
||||
"""Run a child program in a new process"""
|
||||
if verbose:
|
||||
print("running: " + ' '.join(args), file=sys.stderr)
|
||||
eprint("running: " + ' '.join(args))
|
||||
sys.stdout.flush()
|
||||
# Ensure that the .exe is used on Windows just in case a Linux ELF has been
|
||||
# compiled in the same directory.
|
||||
@ -207,8 +211,8 @@ def require(cmd, exit=True, exception=False):
|
||||
if exception:
|
||||
raise
|
||||
elif exit:
|
||||
print("error: unable to run `{}`: {}".format(' '.join(cmd), exc), file=sys.stderr)
|
||||
print("Please make sure it's installed and in the path.", file=sys.stderr)
|
||||
eprint("error: unable to run `{}`: {}".format(' '.join(cmd), exc))
|
||||
eprint("Please make sure it's installed and in the path.")
|
||||
sys.exit(1)
|
||||
return None
|
||||
|
||||
@ -239,14 +243,12 @@ def default_build_triple(verbose):
|
||||
host = next(x for x in version.split('\n') if x.startswith("host: "))
|
||||
triple = host.split("host: ")[1]
|
||||
if verbose:
|
||||
print("detected default triple {} from pre-installed rustc".format(triple),
|
||||
file=sys.stderr)
|
||||
eprint("detected default triple {} from pre-installed rustc".format(triple))
|
||||
return triple
|
||||
except Exception as e:
|
||||
if verbose:
|
||||
print("pre-installed rustc not detected: {}".format(e),
|
||||
file=sys.stderr)
|
||||
print("falling back to auto-detect", file=sys.stderr)
|
||||
eprint("pre-installed rustc not detected: {}".format(e))
|
||||
eprint("falling back to auto-detect")
|
||||
|
||||
required = not platform_is_win32()
|
||||
uname = require(["uname", "-smp"], exit=required)
|
||||
@ -672,15 +674,14 @@ class RustBuild(object):
|
||||
if not is_nixos:
|
||||
in_nix_shell = os.getenv('IN_NIX_SHELL')
|
||||
if in_nix_shell:
|
||||
print("The IN_NIX_SHELL environment variable is `{}`;".format(in_nix_shell),
|
||||
"you may need to set `patch-binaries-for-nix=true` in config.toml",
|
||||
file=sys.stderr)
|
||||
eprint("The IN_NIX_SHELL environment variable is `{}`;".format(in_nix_shell),
|
||||
"you may need to set `patch-binaries-for-nix=true` in config.toml")
|
||||
|
||||
return is_nixos
|
||||
|
||||
answer = self._should_fix_bins_and_dylibs = get_answer()
|
||||
if answer:
|
||||
print("info: You seem to be using Nix.", file=sys.stderr)
|
||||
eprint("info: You seem to be using Nix.")
|
||||
return answer
|
||||
|
||||
def fix_bin_or_dylib(self, fname):
|
||||
@ -693,7 +694,7 @@ class RustBuild(object):
|
||||
Please see https://nixos.org/patchelf.html for more information
|
||||
"""
|
||||
assert self._should_fix_bins_and_dylibs is True
|
||||
print("attempting to patch", fname, file=sys.stderr)
|
||||
eprint("attempting to patch", fname)
|
||||
|
||||
# Only build `.nix-deps` once.
|
||||
nix_deps_dir = self.nix_deps_dir
|
||||
@ -726,7 +727,7 @@ class RustBuild(object):
|
||||
"nix-build", "-E", nix_expr, "-o", nix_deps_dir,
|
||||
])
|
||||
except subprocess.CalledProcessError as reason:
|
||||
print("warning: failed to call nix-build:", reason, file=sys.stderr)
|
||||
eprint("warning: failed to call nix-build:", reason)
|
||||
return
|
||||
self.nix_deps_dir = nix_deps_dir
|
||||
|
||||
@ -746,7 +747,7 @@ class RustBuild(object):
|
||||
try:
|
||||
subprocess.check_output([patchelf] + patchelf_args + [fname])
|
||||
except subprocess.CalledProcessError as reason:
|
||||
print("warning: failed to call patchelf:", reason, file=sys.stderr)
|
||||
eprint("warning: failed to call patchelf:", reason)
|
||||
return
|
||||
|
||||
def rustc_stamp(self):
|
||||
@ -888,7 +889,7 @@ class RustBuild(object):
|
||||
if "GITHUB_ACTIONS" in env:
|
||||
print("::group::Building bootstrap")
|
||||
else:
|
||||
print("Building bootstrap", file=sys.stderr)
|
||||
eprint("Building bootstrap")
|
||||
|
||||
args = self.build_bootstrap_cmd(env)
|
||||
# Run this from the source directory so cargo finds .cargo/config
|
||||
@ -997,12 +998,9 @@ class RustBuild(object):
|
||||
if 'SUDO_USER' in os.environ and not self.use_vendored_sources:
|
||||
if os.getuid() == 0:
|
||||
self.use_vendored_sources = True
|
||||
print('info: looks like you\'re trying to run this command as root',
|
||||
file=sys.stderr)
|
||||
print(' and so in order to preserve your $HOME this will now',
|
||||
file=sys.stderr)
|
||||
print(' use vendored sources by default.',
|
||||
file=sys.stderr)
|
||||
eprint('info: looks like you\'re trying to run this command as root')
|
||||
eprint(' and so in order to preserve your $HOME this will now')
|
||||
eprint(' use vendored sources by default.')
|
||||
|
||||
cargo_dir = os.path.join(self.rust_root, '.cargo')
|
||||
if self.use_vendored_sources:
|
||||
@ -1012,18 +1010,14 @@ class RustBuild(object):
|
||||
"--sync ./src/tools/rust-analyzer/Cargo.toml " \
|
||||
"--sync ./compiler/rustc_codegen_cranelift/Cargo.toml " \
|
||||
"--sync ./src/bootstrap/Cargo.toml "
|
||||
print('error: vendoring required, but vendor directory does not exist.',
|
||||
file=sys.stderr)
|
||||
print(' Run `cargo vendor {}` to initialize the '
|
||||
'vendor directory.'.format(sync_dirs),
|
||||
file=sys.stderr)
|
||||
print('Alternatively, use the pre-vendored `rustc-src` dist component.',
|
||||
file=sys.stderr)
|
||||
eprint('error: vendoring required, but vendor directory does not exist.')
|
||||
eprint(' Run `cargo vendor {}` to initialize the '
|
||||
'vendor directory.'.format(sync_dirs))
|
||||
eprint('Alternatively, use the pre-vendored `rustc-src` dist component.')
|
||||
raise Exception("{} not found".format(vendor_dir))
|
||||
|
||||
if not os.path.exists(cargo_dir):
|
||||
print('error: vendoring required, but .cargo/config does not exist.',
|
||||
file=sys.stderr)
|
||||
eprint('error: vendoring required, but .cargo/config does not exist.')
|
||||
raise Exception("{} not found".format(cargo_dir))
|
||||
else:
|
||||
if os.path.exists(cargo_dir):
|
||||
@ -1117,10 +1111,9 @@ def main():
|
||||
# If the user is asking for help, let them know that the whole download-and-build
|
||||
# process has to happen before anything is printed out.
|
||||
if help_triggered:
|
||||
print(
|
||||
eprint(
|
||||
"info: Downloading and building bootstrap before processing --help command.\n"
|
||||
" See src/bootstrap/README.md for help with common commands."
|
||||
, file=sys.stderr)
|
||||
" See src/bootstrap/README.md for help with common commands.")
|
||||
|
||||
exit_code = 0
|
||||
success_word = "successfully"
|
||||
@ -1131,12 +1124,11 @@ def main():
|
||||
exit_code = error.code
|
||||
else:
|
||||
exit_code = 1
|
||||
print(error, file=sys.stderr)
|
||||
eprint(error)
|
||||
success_word = "unsuccessfully"
|
||||
|
||||
if not help_triggered:
|
||||
print("Build completed", success_word, "in", format_build_time(time() - start_time),
|
||||
file=sys.stderr)
|
||||
eprint("Build completed", success_word, "in", format_build_time(time() - start_time))
|
||||
sys.exit(exit_code)
|
||||
|
||||
|
||||
|
@ -43,14 +43,14 @@ extern crate rustc_ast;
|
||||
|
||||
// Load rustc as a plugin to get macros
|
||||
extern crate rustc_driver;
|
||||
#[macro_use]
|
||||
extern crate rustc_lint;
|
||||
#[macro_use]
|
||||
extern crate rustc_session;
|
||||
|
||||
use rustc_driver::plugin::Registry;
|
||||
use rustc_lint::{EarlyContext, EarlyLintPass, LintArray, LintContext, LintPass};
|
||||
use rustc_ast::ast;
|
||||
use rustc_driver::plugin::Registry;
|
||||
use rustc_lint::{EarlyContext, EarlyLintPass, LintContext};
|
||||
|
||||
declare_lint!(TEST_LINT, Warn, "Warn about items named 'lintme'");
|
||||
|
||||
declare_lint_pass!(Pass => [TEST_LINT]);
|
||||
@ -58,9 +58,7 @@ declare_lint_pass!(Pass => [TEST_LINT]);
|
||||
impl EarlyLintPass for Pass {
|
||||
fn check_item(&mut self, cx: &EarlyContext, it: &ast::Item) {
|
||||
if it.ident.name.as_str() == "lintme" {
|
||||
cx.lint(TEST_LINT, |lint| {
|
||||
lint.build("item is named 'lintme'").set_span(it.span).emit()
|
||||
});
|
||||
cx.lint(TEST_LINT, "item is named 'lintme'", |lint| lint.set_span(it.span));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ declare_clippy_lint! {
|
||||
/// ```
|
||||
#[clippy::version = "1.72.0"]
|
||||
pub NEEDLESS_RAW_STRING_HASHES,
|
||||
style,
|
||||
pedantic,
|
||||
"suggests reducing the number of hashes around a raw string literal"
|
||||
}
|
||||
impl_lint_pass!(RawStrings => [NEEDLESS_RAW_STRINGS, NEEDLESS_RAW_STRING_HASHES]);
|
||||
|
@ -28,8 +28,8 @@ declare_clippy_lint! {
|
||||
/// know the name of the lint.
|
||||
///
|
||||
/// ### Known problems
|
||||
/// Only checks for lints associated using the
|
||||
/// `declare_lint_pass!`, `impl_lint_pass!`, and `lint_array!` macros.
|
||||
/// Only checks for lints associated using the `declare_lint_pass!` and
|
||||
/// `impl_lint_pass!` macros.
|
||||
///
|
||||
/// ### Example
|
||||
/// ```rust,ignore
|
||||
|
@ -26,6 +26,25 @@ dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "annotate-snippets"
|
||||
version = "0.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c3b9d411ecbaf79885c6df4d75fff75858d5995ff25385657a28af47e82f9c36"
|
||||
dependencies = [
|
||||
"unicode-width",
|
||||
"yansi-term",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ansi_term"
|
||||
version = "0.12.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
|
||||
dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anyhow"
|
||||
version = "1.0.71"
|
||||
@ -159,6 +178,25 @@ dependencies = [
|
||||
"windows-sys 0.48.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "comma"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "55b672471b4e9f9e95499ea597ff64941a309b2cdbffcc46f2cc5e2d971fd335"
|
||||
|
||||
[[package]]
|
||||
name = "console"
|
||||
version = "0.15.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8"
|
||||
dependencies = [
|
||||
"encode_unicode",
|
||||
"lazy_static",
|
||||
"libc",
|
||||
"unicode-width",
|
||||
"windows-sys 0.45.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-channel"
|
||||
version = "0.5.8"
|
||||
@ -189,10 +227,10 @@ dependencies = [
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "diff"
|
||||
version = "0.1.13"
|
||||
name = "encode_unicode"
|
||||
version = "0.3.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
|
||||
checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
|
||||
|
||||
[[package]]
|
||||
name = "env_logger"
|
||||
@ -282,6 +320,19 @@ version = "0.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
|
||||
|
||||
[[package]]
|
||||
name = "indicatif"
|
||||
version = "0.17.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25"
|
||||
dependencies = [
|
||||
"console",
|
||||
"instant",
|
||||
"number_prefix",
|
||||
"portable-atomic",
|
||||
"unicode-width",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "instant"
|
||||
version = "0.1.12"
|
||||
@ -325,6 +376,12 @@ version = "1.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||
|
||||
[[package]]
|
||||
name = "levenshtein"
|
||||
version = "1.0.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760"
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.148"
|
||||
@ -463,6 +520,12 @@ dependencies = [
|
||||
"static_assertions",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "number_prefix"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
|
||||
|
||||
[[package]]
|
||||
name = "object"
|
||||
version = "0.30.3"
|
||||
@ -484,6 +547,15 @@ version = "3.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
|
||||
|
||||
[[package]]
|
||||
name = "pad"
|
||||
version = "0.1.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d2ad9b889f1b12e0b9ee24db044b5129150d5eada288edc800f789928dc8c0e3"
|
||||
dependencies = [
|
||||
"unicode-width",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "parking_lot"
|
||||
version = "0.11.2"
|
||||
@ -524,12 +596,28 @@ version = "0.2.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
|
||||
|
||||
[[package]]
|
||||
name = "portable-atomic"
|
||||
version = "1.4.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "31114a898e107c51bb1609ffaf55a0e011cf6a4d7f1170d0015a165082c0338b"
|
||||
|
||||
[[package]]
|
||||
name = "ppv-lite86"
|
||||
version = "0.2.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
|
||||
|
||||
[[package]]
|
||||
name = "prettydiff"
|
||||
version = "0.6.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8ff1fec61082821f8236cf6c0c14e8172b62ce8a72a0eedc30d3b247bb68dc11"
|
||||
dependencies = [
|
||||
"ansi_term",
|
||||
"pad",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.66"
|
||||
@ -859,18 +947,23 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ui_test"
|
||||
version = "0.11.7"
|
||||
version = "0.21.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c21899b59f53717dfad29e4f46e5b21a200a1b6888ab86532a07cfc8b48dd78c"
|
||||
checksum = "accffe020b57a6dd50014d457b5842c5a2ca73cd84f07d86d0a19c460a6509ae"
|
||||
dependencies = [
|
||||
"annotate-snippets",
|
||||
"anyhow",
|
||||
"bstr",
|
||||
"cargo-platform",
|
||||
"cargo_metadata",
|
||||
"color-eyre",
|
||||
"colored",
|
||||
"comma",
|
||||
"crossbeam-channel",
|
||||
"diff",
|
||||
"indicatif",
|
||||
"lazy_static",
|
||||
"levenshtein",
|
||||
"prettydiff",
|
||||
"regex",
|
||||
"rustc_version",
|
||||
"rustfix",
|
||||
@ -885,6 +978,12 @@ version = "1.0.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-width"
|
||||
version = "0.1.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
|
||||
|
||||
[[package]]
|
||||
name = "valuable"
|
||||
version = "0.1.0"
|
||||
@ -1059,3 +1158,12 @@ name = "windows_x86_64_msvc"
|
||||
version = "0.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
|
||||
|
||||
[[package]]
|
||||
name = "yansi-term"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fe5c30ade05e61656247b2e334a031dfd0cc466fadef865bdcdea8d537951bf1"
|
||||
dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
@ -36,7 +36,7 @@ libloading = "0.7"
|
||||
|
||||
[dev-dependencies]
|
||||
colored = "2"
|
||||
ui_test = "0.11.7"
|
||||
ui_test = "0.21.1"
|
||||
rustc_version = "0.4"
|
||||
# Features chosen to match those required by env_logger, to avoid rebuilds
|
||||
regex = { version = "1.5.5", default-features = false, features = ["perf", "std"] }
|
||||
|
@ -478,6 +478,8 @@ Moreover, Miri recognizes some environment variables:
|
||||
* `MIRI_TEST_TARGET` (recognized by the test suite and the `./miri` script) indicates which target
|
||||
architecture to test against. `miri` and `cargo miri` accept the `--target` flag for the same
|
||||
purpose.
|
||||
* `MIRI_TEST_THREADS` (recognized by the test suite): set the number of threads to use for running tests.
|
||||
By default the number of cores is used.
|
||||
* `MIRI_NO_STD` (recognized by `cargo miri` and the test suite) makes sure that the target's
|
||||
sysroot is built without libstd. This allows testing and running no_std programs.
|
||||
* `RUSTC_BLESS` (recognized by the test suite and `cargo-miri-test/run-test.py`): overwrite all
|
||||
|
7
src/tools/miri/bench-cargo-miri/invalidate/Cargo.lock
Normal file
7
src/tools/miri/bench-cargo-miri/invalidate/Cargo.lock
Normal file
@ -0,0 +1,7 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "invalidate"
|
||||
version = "0.1.0"
|
8
src/tools/miri/bench-cargo-miri/invalidate/Cargo.toml
Normal file
8
src/tools/miri/bench-cargo-miri/invalidate/Cargo.toml
Normal file
@ -0,0 +1,8 @@
|
||||
[package]
|
||||
name = "invalidate"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
4
src/tools/miri/bench-cargo-miri/invalidate/src/main.rs
Normal file
4
src/tools/miri/bench-cargo-miri/invalidate/src/main.rs
Normal file
@ -0,0 +1,4 @@
|
||||
fn main() {
|
||||
// The end of the range is just chosen to make the benchmark run for a few seconds.
|
||||
for _ in 0..200_000 {}
|
||||
}
|
@ -10,7 +10,7 @@ use rustc_version::VersionMeta;
|
||||
|
||||
use crate::{setup::*, util::*};
|
||||
|
||||
const CARGO_MIRI_HELP: &str = r#"Runs binary crates and tests in Miri
|
||||
const CARGO_MIRI_HELP: &str = r"Runs binary crates and tests in Miri
|
||||
|
||||
Usage:
|
||||
cargo miri [subcommand] [<cargo options>...] [--] [<program/test suite options>...]
|
||||
@ -31,7 +31,7 @@ Examples:
|
||||
This will print the path to the generated sysroot (and nothing else) on stdout.
|
||||
stderr will still contain progress information about how the build is doing.
|
||||
|
||||
"#;
|
||||
";
|
||||
|
||||
fn show_help() {
|
||||
println!("{CARGO_MIRI_HELP}");
|
||||
|
@ -1 +1 @@
|
||||
42ca6e4e5760a548a6fa858482de6d237f6fb3b8
|
||||
2ba4eb2d49e774b5fbc2a06258ac7b0f60b92b7e
|
||||
|
@ -1,6 +1,7 @@
|
||||
use smallvec::SmallVec;
|
||||
use std::fmt;
|
||||
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_middle::mir::interpret::{alloc_range, AllocId, AllocRange, InterpError};
|
||||
use rustc_span::{Span, SpanData};
|
||||
use rustc_target::abi::Size;
|
||||
@ -233,6 +234,12 @@ impl AllocHistory {
|
||||
protectors: SmallVec::new(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn retain(&mut self, live_tags: &FxHashSet<BorTag>) {
|
||||
self.invalidations.retain(|event| live_tags.contains(&event.tag));
|
||||
self.creations.retain(|event| live_tags.contains(&event.retag.new_tag));
|
||||
self.protectors.retain(|event| live_tags.contains(&event.tag));
|
||||
}
|
||||
}
|
||||
|
||||
impl<'history, 'ecx, 'mir, 'tcx> DiagnosticCx<'history, 'ecx, 'mir, 'tcx> {
|
||||
|
@ -456,6 +456,7 @@ impl Stacks {
|
||||
stack.retain(live_tags);
|
||||
}
|
||||
}
|
||||
self.history.retain(live_tags);
|
||||
self.modified_since_last_gc = false;
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,11 @@
|
||||
use colored::*;
|
||||
use regex::bytes::Regex;
|
||||
use std::ffi::OsString;
|
||||
use std::num::NonZeroUsize;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::{env, process::Command};
|
||||
use ui_test::{color_eyre::Result, Config, Match, Mode, OutputConflictHandling};
|
||||
use ui_test::{status_emitter, CommandBuilder};
|
||||
use ui_test::{status_emitter, CommandBuilder, Format, RustfixMode};
|
||||
|
||||
fn miri_path() -> PathBuf {
|
||||
PathBuf::from(option_env!("MIRI").unwrap_or(env!("CARGO_BIN_EXE_miri")))
|
||||
@ -78,26 +79,18 @@ fn test_config(target: &str, path: &str, mode: Mode, with_dependencies: bool) ->
|
||||
program.args.push(flag);
|
||||
}
|
||||
|
||||
let bless = env::var_os("RUSTC_BLESS").is_some_and(|v| v != "0");
|
||||
let skip_ui_checks = env::var_os("MIRI_SKIP_UI_CHECKS").is_some();
|
||||
|
||||
let output_conflict_handling = match (bless, skip_ui_checks) {
|
||||
(false, false) => OutputConflictHandling::Error("./miri test --bless".into()),
|
||||
(true, false) => OutputConflictHandling::Bless,
|
||||
(false, true) => OutputConflictHandling::Ignore,
|
||||
(true, true) => panic!("cannot use RUSTC_BLESS and MIRI_SKIP_UI_CHECKS at the same time"),
|
||||
};
|
||||
|
||||
let mut config = Config {
|
||||
target: Some(target.to_owned()),
|
||||
stderr_filters: STDERR.clone(),
|
||||
stdout_filters: STDOUT.clone(),
|
||||
mode,
|
||||
program,
|
||||
output_conflict_handling,
|
||||
out_dir: PathBuf::from(std::env::var_os("CARGO_TARGET_DIR").unwrap()).join("ui"),
|
||||
edition: Some("2021".into()),
|
||||
..Config::rustc(path.into())
|
||||
threads: std::env::var("MIRI_TEST_THREADS")
|
||||
.ok()
|
||||
.map(|threads| NonZeroUsize::new(threads.parse().unwrap()).unwrap()),
|
||||
..Config::rustc(path)
|
||||
};
|
||||
|
||||
let use_std = env::var_os("MIRI_NO_STD").is_none();
|
||||
@ -120,51 +113,32 @@ fn test_config(target: &str, path: &str, mode: Mode, with_dependencies: bool) ->
|
||||
}
|
||||
|
||||
fn run_tests(mode: Mode, path: &str, target: &str, with_dependencies: bool) -> Result<()> {
|
||||
let config = test_config(target, path, mode, with_dependencies);
|
||||
let mut config = test_config(target, path, mode, with_dependencies);
|
||||
|
||||
// Handle command-line arguments.
|
||||
let mut after_dashdash = false;
|
||||
let mut quiet = false;
|
||||
let filters = std::env::args()
|
||||
.skip(1)
|
||||
.filter(|arg| {
|
||||
if after_dashdash {
|
||||
// Just propagate everything.
|
||||
return true;
|
||||
}
|
||||
match &**arg {
|
||||
"--quiet" => {
|
||||
quiet = true;
|
||||
false
|
||||
}
|
||||
"--" => {
|
||||
after_dashdash = true;
|
||||
false
|
||||
}
|
||||
s if s.starts_with('-') => {
|
||||
panic!("unknown compiletest flag `{s}`");
|
||||
}
|
||||
_ => true,
|
||||
}
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
let args = ui_test::Args::test()?;
|
||||
let default_bless = env::var_os("RUSTC_BLESS").is_some_and(|v| v != "0");
|
||||
config.with_args(&args, default_bless);
|
||||
if let OutputConflictHandling::Error(msg) = &mut config.output_conflict_handling {
|
||||
*msg = "./miri test --bless".into();
|
||||
}
|
||||
if env::var_os("MIRI_SKIP_UI_CHECKS").is_some() {
|
||||
assert!(!default_bless, "cannot use RUSTC_BLESS and MIRI_SKIP_UI_CHECKS at the same time");
|
||||
config.output_conflict_handling = OutputConflictHandling::Ignore;
|
||||
}
|
||||
eprintln!(" Compiler: {}", config.program.display());
|
||||
ui_test::run_tests_generic(
|
||||
config,
|
||||
// Only run one test suite. In the future we can add all test suites to one `Vec` and run
|
||||
// them all at once, making best use of systems with high parallelism.
|
||||
vec![config],
|
||||
// The files we're actually interested in (all `.rs` files).
|
||||
|path| {
|
||||
path.extension().is_some_and(|ext| ext == "rs")
|
||||
&& (filters.is_empty()
|
||||
|| filters.iter().any(|f| path.display().to_string().contains(f)))
|
||||
},
|
||||
ui_test::default_file_filter,
|
||||
// This could be used to overwrite the `Config` on a per-test basis.
|
||||
|_, _| None,
|
||||
|_, _, _| {},
|
||||
(
|
||||
if quiet {
|
||||
Box::<status_emitter::Quiet>::default()
|
||||
as Box<dyn status_emitter::StatusEmitter + Send>
|
||||
} else {
|
||||
Box::new(status_emitter::Text)
|
||||
match args.format {
|
||||
Format::Terse => status_emitter::Text::quiet(),
|
||||
Format::Pretty => status_emitter::Text::verbose(),
|
||||
},
|
||||
status_emitter::Gha::</* GHA Actions groups*/ false> {
|
||||
name: format!("{mode:?} {path} ({target})"),
|
||||
@ -205,8 +179,6 @@ regexes! {
|
||||
r" +at (.*\.rs)" => " at $1",
|
||||
// erase generics in backtraces
|
||||
"([0-9]+: .*)::<.*>" => "$1",
|
||||
// erase addresses in backtraces
|
||||
"([0-9]+: ) +0x[0-9a-f]+ - (.*)" => "$1$2",
|
||||
// erase long hexadecimals
|
||||
r"0x[0-9a-fA-F]+[0-9a-fA-F]{2,2}" => "$$HEX",
|
||||
// erase specific alignments
|
||||
@ -218,7 +190,7 @@ regexes! {
|
||||
// Windows file paths
|
||||
r"\\" => "/",
|
||||
// erase Rust stdlib path
|
||||
"[^ `]*/(rust[^/]*|checkout)/library/" => "RUSTLIB/",
|
||||
"[^ \n`]*/(rust[^/]*|checkout)/library/" => "RUSTLIB/",
|
||||
// erase platform file paths
|
||||
"sys/[a-z]+/" => "sys/PLATFORM/",
|
||||
// erase paths into the crate registry
|
||||
@ -269,11 +241,22 @@ fn main() -> Result<()> {
|
||||
ui(Mode::Pass, "tests/pass", &target, WithoutDependencies)?;
|
||||
ui(Mode::Pass, "tests/pass-dep", &target, WithDependencies)?;
|
||||
ui(Mode::Panic, "tests/panic", &target, WithDependencies)?;
|
||||
ui(Mode::Fail { require_patterns: true }, "tests/fail", &target, WithDependencies)?;
|
||||
ui(
|
||||
Mode::Fail { require_patterns: true, rustfix: RustfixMode::Disabled },
|
||||
"tests/fail",
|
||||
&target,
|
||||
WithoutDependencies,
|
||||
)?;
|
||||
ui(
|
||||
Mode::Fail { require_patterns: true, rustfix: RustfixMode::Disabled },
|
||||
"tests/fail-dep",
|
||||
&target,
|
||||
WithDependencies,
|
||||
)?;
|
||||
if cfg!(target_os = "linux") {
|
||||
ui(Mode::Pass, "tests/extern-so/pass", &target, WithoutDependencies)?;
|
||||
ui(
|
||||
Mode::Fail { require_patterns: true },
|
||||
Mode::Fail { require_patterns: true, rustfix: RustfixMode::Disabled },
|
||||
"tests/extern-so/fail",
|
||||
&target,
|
||||
WithoutDependencies,
|
||||
@ -285,11 +268,17 @@ fn main() -> Result<()> {
|
||||
|
||||
fn run_dep_mode(target: String, mut args: impl Iterator<Item = OsString>) -> Result<()> {
|
||||
let path = args.next().expect("./miri run-dep must be followed by a file name");
|
||||
let mut config = test_config(&target, "", Mode::Yolo, /* with dependencies */ true);
|
||||
let mut config = test_config(
|
||||
&target,
|
||||
"",
|
||||
Mode::Yolo { rustfix: RustfixMode::Disabled },
|
||||
/* with dependencies */ true,
|
||||
);
|
||||
config.program.args.clear(); // We want to give the user full control over flags
|
||||
config.build_dependencies_and_link_them()?;
|
||||
let dep_args = config.build_dependencies()?;
|
||||
|
||||
let mut cmd = config.program.build(&config.out_dir);
|
||||
cmd.args(dep_args);
|
||||
|
||||
cmd.arg(path);
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user