Auto merge of #109001 - matthiaskrgr:rollup-a3agnwp, r=matthiaskrgr
Rollup of 8 pull requests Successful merges: - #105798 (Relax ordering rules for `asm!` operands) - #105962 (Stabilize path_as_mut_os_str) - #106085 (use problem matchers for tidy CI) - #107711 (Stabilize movbe target feature) - #108017 (Add `--no-undefined-version` link flag and fix associated breakage) - #108891 (Remove an extraneous include) - #108902 (no more do while :<) - #108912 (Document tool lints) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
e350fe4e60
@ -203,17 +203,6 @@ pub fn parse_asm_args<'a>(
|
||||
// Validate the order of named, positional & explicit register operands and
|
||||
// clobber_abi/options. We do this at the end once we have the full span
|
||||
// of the argument available.
|
||||
if !args.options_spans.is_empty() {
|
||||
diag.struct_span_err(span, "arguments are not allowed after options")
|
||||
.span_labels(args.options_spans.clone(), "previous options")
|
||||
.span_label(span, "argument")
|
||||
.emit();
|
||||
} else if let Some((_, abi_span)) = args.clobber_abis.last() {
|
||||
diag.struct_span_err(span, "arguments are not allowed after clobber_abi")
|
||||
.span_label(*abi_span, "clobber_abi")
|
||||
.span_label(span, "argument")
|
||||
.emit();
|
||||
}
|
||||
if explicit_reg {
|
||||
if name.is_some() {
|
||||
diag.struct_span_err(span, "explicit register arguments cannot have names").emit();
|
||||
@ -227,17 +216,6 @@ pub fn parse_asm_args<'a>(
|
||||
.emit();
|
||||
continue;
|
||||
}
|
||||
if !args.reg_args.is_empty() {
|
||||
let mut err = diag.struct_span_err(
|
||||
span,
|
||||
"named arguments cannot follow explicit register arguments",
|
||||
);
|
||||
err.span_label(span, "named argument");
|
||||
for pos in &args.reg_args {
|
||||
err.span_label(args.operands[*pos].1, "explicit register argument");
|
||||
}
|
||||
err.emit();
|
||||
}
|
||||
args.named_args.insert(name, slot);
|
||||
} else {
|
||||
if !args.named_args.is_empty() || !args.reg_args.is_empty() {
|
||||
@ -478,15 +456,6 @@ fn parse_clobber_abi<'a>(p: &mut Parser<'a>, args: &mut AsmArgs) -> PResult<'a,
|
||||
|
||||
let full_span = span_start.to(p.prev_token.span);
|
||||
|
||||
if !args.options_spans.is_empty() {
|
||||
let mut err = p
|
||||
.sess
|
||||
.span_diagnostic
|
||||
.struct_span_err(full_span, "clobber_abi is not allowed after options");
|
||||
err.span_labels(args.options_spans.clone(), "options");
|
||||
return Err(err);
|
||||
}
|
||||
|
||||
match &new_abis[..] {
|
||||
// should have errored above during parsing
|
||||
[] => unreachable!(),
|
||||
@ -699,6 +668,10 @@ fn expand_preparsed_asm(ecx: &mut ExtCtxt<'_>, args: AsmArgs) -> Option<ast::Inl
|
||||
args.operands[idx].1,
|
||||
"explicit register arguments cannot be used in the asm template",
|
||||
);
|
||||
err.span_help(
|
||||
args.operands[idx].1,
|
||||
"use the register name directly in the assembly code",
|
||||
);
|
||||
}
|
||||
err.emit();
|
||||
None
|
||||
|
@ -4,6 +4,7 @@
|
||||
use crate::prelude::*;
|
||||
|
||||
use rustc_ast::expand::allocator::{AllocatorKind, AllocatorTy, ALLOCATOR_METHODS};
|
||||
use rustc_codegen_ssa::base::allocator_kind_for_codegen;
|
||||
use rustc_session::config::OomStrategy;
|
||||
use rustc_span::symbol::sym;
|
||||
|
||||
@ -13,24 +14,15 @@ pub(crate) fn codegen(
|
||||
module: &mut impl Module,
|
||||
unwind_context: &mut UnwindContext,
|
||||
) -> bool {
|
||||
let any_dynamic_crate = tcx.dependency_formats(()).iter().any(|(_, list)| {
|
||||
use rustc_middle::middle::dependency_format::Linkage;
|
||||
list.iter().any(|&linkage| linkage == Linkage::Dynamic)
|
||||
});
|
||||
if any_dynamic_crate {
|
||||
false
|
||||
} else if let Some(kind) = tcx.allocator_kind(()) {
|
||||
codegen_inner(
|
||||
module,
|
||||
unwind_context,
|
||||
kind,
|
||||
tcx.alloc_error_handler_kind(()).unwrap(),
|
||||
tcx.sess.opts.unstable_opts.oom,
|
||||
);
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
let Some(kind) = allocator_kind_for_codegen(tcx) else { return false };
|
||||
codegen_inner(
|
||||
module,
|
||||
unwind_context,
|
||||
kind,
|
||||
tcx.alloc_error_handler_kind(()).unwrap(),
|
||||
tcx.sess.opts.unstable_opts.oom,
|
||||
);
|
||||
true
|
||||
}
|
||||
|
||||
fn codegen_inner(
|
||||
|
@ -720,6 +720,7 @@ fn export_symbols(&mut self, tmpdir: &Path, crate_type: CrateType, symbols: &[St
|
||||
let mut arg = OsString::from("--version-script=");
|
||||
arg.push(path);
|
||||
self.linker_arg(arg);
|
||||
self.linker_arg("--no-undefined-version");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,5 @@
|
||||
use crate::base::allocator_kind_for_codegen;
|
||||
|
||||
use std::collections::hash_map::Entry::*;
|
||||
|
||||
use rustc_ast::expand::allocator::ALLOCATOR_METHODS;
|
||||
@ -200,7 +202,8 @@ fn exported_symbols_provider_local(
|
||||
));
|
||||
}
|
||||
|
||||
if tcx.allocator_kind(()).is_some() {
|
||||
// Mark allocator shim symbols as exported only if they were generated.
|
||||
if allocator_kind_for_codegen(tcx).is_some() {
|
||||
for symbol_name in ALLOCATOR_METHODS
|
||||
.iter()
|
||||
.map(|method| format!("__rust_{}", method.name))
|
||||
|
@ -13,6 +13,7 @@
|
||||
use crate::traits::*;
|
||||
use crate::{CachedModuleCodegen, CompiledModule, CrateInfo, MemFlags, ModuleCodegen, ModuleKind};
|
||||
|
||||
use rustc_ast::expand::allocator::AllocatorKind;
|
||||
use rustc_attr as attr;
|
||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
||||
use rustc_data_structures::profiling::{get_resident_set_size, print_time_passes_entry};
|
||||
@ -545,6 +546,23 @@ pub fn collect_debugger_visualizers_transitive(
|
||||
.collect::<BTreeSet<_>>()
|
||||
}
|
||||
|
||||
/// Decide allocator kind to codegen. If `Some(_)` this will be the same as
|
||||
/// `tcx.allocator_kind`, but it may be `None` in more cases (e.g. if using
|
||||
/// allocator definitions from a dylib dependency).
|
||||
pub fn allocator_kind_for_codegen(tcx: TyCtxt<'_>) -> Option<AllocatorKind> {
|
||||
// If the crate doesn't have an `allocator_kind` set then there's definitely
|
||||
// no shim to generate. Otherwise we also check our dependency graph for all
|
||||
// our output crate types. If anything there looks like its a `Dynamic`
|
||||
// linkage, then it's already got an allocator shim and we'll be using that
|
||||
// one instead. If nothing exists then it's our job to generate the
|
||||
// allocator!
|
||||
let any_dynamic_crate = tcx.dependency_formats(()).iter().any(|(_, list)| {
|
||||
use rustc_middle::middle::dependency_format::Linkage;
|
||||
list.iter().any(|&linkage| linkage == Linkage::Dynamic)
|
||||
});
|
||||
if any_dynamic_crate { None } else { tcx.allocator_kind(()) }
|
||||
}
|
||||
|
||||
pub fn codegen_crate<B: ExtraBackendMethods>(
|
||||
backend: B,
|
||||
tcx: TyCtxt<'_>,
|
||||
@ -615,20 +633,7 @@ pub fn codegen_crate<B: ExtraBackendMethods>(
|
||||
);
|
||||
|
||||
// Codegen an allocator shim, if necessary.
|
||||
//
|
||||
// If the crate doesn't have an `allocator_kind` set then there's definitely
|
||||
// no shim to generate. Otherwise we also check our dependency graph for all
|
||||
// our output crate types. If anything there looks like its a `Dynamic`
|
||||
// linkage, then it's already got an allocator shim and we'll be using that
|
||||
// one instead. If nothing exists then it's our job to generate the
|
||||
// allocator!
|
||||
let any_dynamic_crate = tcx.dependency_formats(()).iter().any(|(_, list)| {
|
||||
use rustc_middle::middle::dependency_format::Linkage;
|
||||
list.iter().any(|&linkage| linkage == Linkage::Dynamic)
|
||||
});
|
||||
let allocator_module = if any_dynamic_crate {
|
||||
None
|
||||
} else if let Some(kind) = tcx.allocator_kind(()) {
|
||||
if let Some(kind) = allocator_kind_for_codegen(tcx) {
|
||||
let llmod_id =
|
||||
cgu_name_builder.build_cgu_name(LOCAL_CRATE, &["crate"], Some("allocator")).to_string();
|
||||
let module_llvm = tcx.sess.time("write_allocator_module", || {
|
||||
@ -642,13 +647,10 @@ pub fn codegen_crate<B: ExtraBackendMethods>(
|
||||
)
|
||||
});
|
||||
|
||||
Some(ModuleCodegen { name: llmod_id, module_llvm, kind: ModuleKind::Allocator })
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
if let Some(allocator_module) = allocator_module {
|
||||
ongoing_codegen.submit_pre_codegened_module_to_llvm(tcx, allocator_module);
|
||||
ongoing_codegen.submit_pre_codegened_module_to_llvm(
|
||||
tcx,
|
||||
ModuleCodegen { name: llmod_id, module_llvm, kind: ModuleKind::Allocator },
|
||||
);
|
||||
}
|
||||
|
||||
// For better throughput during parallel processing by LLVM, we used to sort
|
||||
|
@ -192,7 +192,7 @@
|
||||
("fxsr", None),
|
||||
("gfni", Some(sym::avx512_target_feature)),
|
||||
("lzcnt", None),
|
||||
("movbe", Some(sym::movbe_target_feature)),
|
||||
("movbe", None),
|
||||
("pclmulqdq", None),
|
||||
("popcnt", None),
|
||||
("rdrand", None),
|
||||
@ -394,7 +394,6 @@ pub fn from_target_feature(
|
||||
Some(sym::sse4a_target_feature) => rust_features.sse4a_target_feature,
|
||||
Some(sym::tbm_target_feature) => rust_features.tbm_target_feature,
|
||||
Some(sym::wasm_target_feature) => rust_features.wasm_target_feature,
|
||||
Some(sym::movbe_target_feature) => rust_features.movbe_target_feature,
|
||||
Some(sym::rtm_target_feature) => rust_features.rtm_target_feature,
|
||||
Some(sym::ermsb_target_feature) => rust_features.ermsb_target_feature,
|
||||
Some(sym::bpf_target_feature) => rust_features.bpf_target_feature,
|
||||
|
@ -90,7 +90,7 @@ macro_rules! declare_features {
|
||||
(accepted, clone_closures, "1.26.0", Some(44490), None),
|
||||
/// Allows coercing non capturing closures to function pointers.
|
||||
(accepted, closure_to_fn_coercion, "1.19.0", Some(39817), None),
|
||||
/// Allows using `cmpxchg16b` from `core::arch::x86_64`.
|
||||
/// Allows using the CMPXCHG16B target feature.
|
||||
(accepted, cmpxchg16b_target_feature, "CURRENT_RUSTC_VERSION", Some(44839), None),
|
||||
/// Allows usage of the `compile_error!` macro.
|
||||
(accepted, compile_error, "1.20.0", Some(40872), None),
|
||||
@ -238,6 +238,8 @@ macro_rules! declare_features {
|
||||
(accepted, min_const_unsafe_fn, "1.33.0", Some(55607), None),
|
||||
/// Allows using `Self` and associated types in struct expressions and patterns.
|
||||
(accepted, more_struct_aliases, "1.16.0", Some(37544), None),
|
||||
/// Allows using the MOVBE target feature.
|
||||
(accepted, movbe_target_feature, "CURRENT_RUSTC_VERSION", Some(44839), None),
|
||||
/// Allows patterns with concurrent by-move and by-ref bindings.
|
||||
/// For example, you can write `Foo(a, ref b)` where `a` is by-move and `b` is by-ref.
|
||||
(accepted, move_ref_pattern, "1.49.0", Some(68354), None),
|
||||
|
@ -259,7 +259,6 @@ pub fn set(&self, features: &mut Features, span: Span) {
|
||||
(active, ermsb_target_feature, "1.49.0", Some(44839), None),
|
||||
(active, hexagon_target_feature, "1.27.0", Some(44839), None),
|
||||
(active, mips_target_feature, "1.27.0", Some(44839), None),
|
||||
(active, movbe_target_feature, "1.34.0", Some(44839), None),
|
||||
(active, powerpc_target_feature, "1.27.0", Some(44839), None),
|
||||
(active, riscv_target_feature, "1.45.0", Some(44839), None),
|
||||
(active, rtm_target_feature, "1.35.0", Some(44839), None),
|
||||
|
@ -17,6 +17,11 @@
|
||||
use rustc_span::Span;
|
||||
|
||||
declare_tool_lint! {
|
||||
/// The `default_hash_type` lint detects use of [`std::collections::HashMap`]/[`std::collections::HashSet`],
|
||||
/// suggesting the use of `FxHashMap`/`FxHashSet`.
|
||||
///
|
||||
/// This can help as `FxHasher` can perform better than the default hasher. DOS protection is not
|
||||
/// required as input is assumed to be trusted.
|
||||
pub rustc::DEFAULT_HASH_TYPES,
|
||||
Allow,
|
||||
"forbid HashMap and HashSet and suggest the FxHash* variants",
|
||||
@ -67,6 +72,12 @@ fn typeck_results_of_method_fn<'tcx>(
|
||||
}
|
||||
|
||||
declare_tool_lint! {
|
||||
/// The `potential_query_instability` lint detects use of methods which can lead to
|
||||
/// potential query instability, such as iterating over a `HashMap`.
|
||||
///
|
||||
/// Due to the [incremental compilation](https://rustc-dev-guide.rust-lang.org/queries/incremental-compilation.html) model,
|
||||
/// queries must return deterministic, stable results. `HashMap` iteration order can change between compilations,
|
||||
/// and will introduce instability if query results expose the order.
|
||||
pub rustc::POTENTIAL_QUERY_INSTABILITY,
|
||||
Allow,
|
||||
"require explicit opt-in when using potentially unstable methods or functions",
|
||||
@ -92,6 +103,8 @@ fn check_expr(&mut self, cx: &LateContext<'_>, expr: &Expr<'_>) {
|
||||
}
|
||||
|
||||
declare_tool_lint! {
|
||||
/// The `usage_of_ty_tykind` lint detects usages of `ty::TyKind::<kind>`,
|
||||
/// where `ty::<kind>` would suffice.
|
||||
pub rustc::USAGE_OF_TY_TYKIND,
|
||||
Allow,
|
||||
"usage of `ty::TyKind` outside of the `ty::sty` module",
|
||||
@ -99,6 +112,8 @@ fn check_expr(&mut self, cx: &LateContext<'_>, expr: &Expr<'_>) {
|
||||
}
|
||||
|
||||
declare_tool_lint! {
|
||||
/// The `usage_of_qualified_ty` lint detects usages of `ty::TyKind`,
|
||||
/// where `Ty` should be used instead.
|
||||
pub rustc::USAGE_OF_QUALIFIED_TY,
|
||||
Allow,
|
||||
"using `ty::{Ty,TyCtxt}` instead of importing it",
|
||||
@ -254,6 +269,8 @@ fn gen_args(segment: &PathSegment<'_>) -> String {
|
||||
}
|
||||
|
||||
declare_tool_lint! {
|
||||
/// The `lint_pass_impl_without_macro` detects manual implementations of a lint
|
||||
/// pass, without using [`declare_lint_pass`] or [`impl_lint_pass`].
|
||||
pub rustc::LINT_PASS_IMPL_WITHOUT_MACRO,
|
||||
Allow,
|
||||
"`impl LintPass` without the `declare_lint_pass!` or `impl_lint_pass!` macros"
|
||||
@ -285,6 +302,8 @@ fn check_item(&mut self, cx: &EarlyContext<'_>, item: &ast::Item) {
|
||||
}
|
||||
|
||||
declare_tool_lint! {
|
||||
/// The `existing_doc_keyword` lint detects use `#[doc()]` keywords
|
||||
/// that don't exist, e.g. `#[doc(keyword = "..")]`.
|
||||
pub rustc::EXISTING_DOC_KEYWORD,
|
||||
Allow,
|
||||
"Check that documented keywords in std and core actually exist",
|
||||
@ -325,6 +344,10 @@ fn check_item(&mut self, cx: &LateContext<'_>, item: &rustc_hir::Item<'_>) {
|
||||
}
|
||||
|
||||
declare_tool_lint! {
|
||||
/// The `untranslatable_diagnostic` lint detects diagnostics created
|
||||
/// without using translatable Fluent strings.
|
||||
///
|
||||
/// More details on translatable diagnostics can be found [here](https://rustc-dev-guide.rust-lang.org/diagnostics/translation.html).
|
||||
pub rustc::UNTRANSLATABLE_DIAGNOSTIC,
|
||||
Allow,
|
||||
"prevent creation of diagnostics which cannot be translated",
|
||||
@ -332,6 +355,11 @@ fn check_item(&mut self, cx: &LateContext<'_>, item: &rustc_hir::Item<'_>) {
|
||||
}
|
||||
|
||||
declare_tool_lint! {
|
||||
/// The `diagnostic_outside_of_impl` lint detects diagnostics created manually,
|
||||
/// and inside an `IntoDiagnostic`/`AddToDiagnostic` implementation,
|
||||
/// or a `#[derive(Diagnostic)]`/`#[derive(Subdiagnostic)]` expansion.
|
||||
///
|
||||
/// More details on diagnostics implementations can be found [here](https://rustc-dev-guide.rust-lang.org/diagnostics/diagnostic-structs.html).
|
||||
pub rustc::DIAGNOSTIC_OUTSIDE_OF_IMPL,
|
||||
Allow,
|
||||
"prevent creation of diagnostics outside of `IntoDiagnostic`/`AddToDiagnostic` impls",
|
||||
@ -396,6 +424,8 @@ fn check_expr(&mut self, cx: &LateContext<'_>, expr: &Expr<'_>) {
|
||||
}
|
||||
|
||||
declare_tool_lint! {
|
||||
/// The `bad_opt_access` lint detects accessing options by field instad of
|
||||
/// the wrapper function.
|
||||
pub rustc::BAD_OPT_ACCESS,
|
||||
Deny,
|
||||
"prevent using options by field access when there is a wrapper function",
|
||||
|
@ -9,7 +9,6 @@
|
||||
|
||||
#include "llvm/IR/LLVMContext.h"
|
||||
#include "llvm/Object/ObjectFile.h"
|
||||
#include "llvm/ADT/Optional.h"
|
||||
|
||||
using namespace llvm;
|
||||
using namespace llvm::sys;
|
||||
|
@ -588,8 +588,8 @@ pub(crate) fn place_into_pattern(
|
||||
// let PATTERN = ... might not even exist until we do the assignment.
|
||||
// so we set it here instead.
|
||||
if set_match_place {
|
||||
let mut candidate_ref = &candidate;
|
||||
while let Some(next) = {
|
||||
let mut next = Some(&candidate);
|
||||
while let Some(candidate_ref) = next.take() {
|
||||
for binding in &candidate_ref.bindings {
|
||||
let local = self.var_local_id(binding.var_id, OutsideGuard);
|
||||
// `try_to_place` may fail if it is unable to resolve the given
|
||||
@ -617,9 +617,7 @@ pub(crate) fn place_into_pattern(
|
||||
}
|
||||
// All of the subcandidates should bind the same locals, so we
|
||||
// only visit the first one.
|
||||
candidate_ref.subcandidates.get(0)
|
||||
} {
|
||||
candidate_ref = next;
|
||||
next = candidate_ref.subcandidates.get(0)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -537,29 +537,29 @@ pub fn next(&mut self, basic_coverage_blocks: &CoverageGraph) -> Option<BasicCov
|
||||
"TraverseCoverageGraphWithLoops::next - context_stack: {:?}",
|
||||
self.context_stack.iter().rev().collect::<Vec<_>>()
|
||||
);
|
||||
while let Some(next_bcb) = {
|
||||
// Strip contexts with empty worklists from the top of the stack
|
||||
while self.context_stack.last().map_or(false, |context| context.worklist.is_empty()) {
|
||||
|
||||
while let Some(context) = self.context_stack.last_mut() {
|
||||
if let Some(next_bcb) = context.worklist.pop() {
|
||||
if !self.visited.insert(next_bcb) {
|
||||
debug!("Already visited: {:?}", next_bcb);
|
||||
continue;
|
||||
}
|
||||
debug!("Visiting {:?}", next_bcb);
|
||||
if self.backedges[next_bcb].len() > 0 {
|
||||
debug!("{:?} is a loop header! Start a new TraversalContext...", next_bcb);
|
||||
self.context_stack.push(TraversalContext {
|
||||
loop_backedges: Some((self.backedges[next_bcb].clone(), next_bcb)),
|
||||
worklist: Vec::new(),
|
||||
});
|
||||
}
|
||||
self.extend_worklist(basic_coverage_blocks, next_bcb);
|
||||
return Some(next_bcb);
|
||||
} else {
|
||||
// Strip contexts with empty worklists from the top of the stack
|
||||
self.context_stack.pop();
|
||||
}
|
||||
// Pop the next bcb off of the current context_stack. If none, all BCBs were visited.
|
||||
self.context_stack.last_mut().map_or(None, |context| context.worklist.pop())
|
||||
} {
|
||||
if !self.visited.insert(next_bcb) {
|
||||
debug!("Already visited: {:?}", next_bcb);
|
||||
continue;
|
||||
}
|
||||
debug!("Visiting {:?}", next_bcb);
|
||||
if self.backedges[next_bcb].len() > 0 {
|
||||
debug!("{:?} is a loop header! Start a new TraversalContext...", next_bcb);
|
||||
self.context_stack.push(TraversalContext {
|
||||
loop_backedges: Some((self.backedges[next_bcb].clone(), next_bcb)),
|
||||
worklist: Vec::new(),
|
||||
});
|
||||
}
|
||||
self.extend_worklist(basic_coverage_blocks, next_bcb);
|
||||
return Some(next_bcb);
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
|
@ -1498,7 +1498,6 @@ fn _set_extension(&mut self, extension: &OsStr) -> bool {
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(path_as_mut_os_str)]
|
||||
/// use std::path::{Path, PathBuf};
|
||||
///
|
||||
/// let mut path = PathBuf::from("/foo");
|
||||
@ -1510,7 +1509,7 @@ fn _set_extension(&mut self, extension: &OsStr) -> bool {
|
||||
/// path.as_mut_os_string().push("baz");
|
||||
/// assert_eq!(path, Path::new("/foo/barbaz"));
|
||||
/// ```
|
||||
#[unstable(feature = "path_as_mut_os_str", issue = "105021")]
|
||||
#[stable(feature = "path_as_mut_os_str", since = "CURRENT_RUSTC_VERSION")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub fn as_mut_os_string(&mut self) -> &mut OsString {
|
||||
@ -2066,7 +2065,6 @@ pub fn as_os_str(&self) -> &OsStr {
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(path_as_mut_os_str)]
|
||||
/// use std::path::{Path, PathBuf};
|
||||
///
|
||||
/// let mut path = PathBuf::from("Foo.TXT");
|
||||
@ -2076,7 +2074,7 @@ pub fn as_os_str(&self) -> &OsStr {
|
||||
/// path.as_mut_os_str().make_ascii_lowercase();
|
||||
/// assert_eq!(path, Path::new("foo.txt"));
|
||||
/// ```
|
||||
#[unstable(feature = "path_as_mut_os_str", issue = "105021")]
|
||||
#[stable(feature = "path_as_mut_os_str", since = "CURRENT_RUSTC_VERSION")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub fn as_mut_os_str(&mut self) -> &mut OsStr {
|
||||
|
@ -62,6 +62,4 @@ ENV SCRIPT ../x.py --stage 2 test --exclude src/tools/tidy && \
|
||||
# work.
|
||||
#
|
||||
../x.ps1 --stage 2 test tests/ui --pass=check \
|
||||
--host='' --target=i686-unknown-linux-gnu && \
|
||||
# Run tidy at the very end, after all the other tests.
|
||||
python2.7 ../x.py --stage 2 test src/tools/tidy
|
||||
--host='' --target=i686-unknown-linux-gnu
|
||||
|
15
src/ci/github-actions/problem_matchers.json
Normal file
15
src/ci/github-actions/problem_matchers.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"problemMatcher": [
|
||||
{
|
||||
"owner": "tidy-error-file-line",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^tidy error: /checkout/(.+):(\\d+): (.+)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"message": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
@ -10,6 +10,8 @@ source "$(cd "$(dirname "$0")" && pwd)/../shared.sh"
|
||||
export CI="true"
|
||||
export SRC=.
|
||||
|
||||
echo "::add-matcher::src/ci/github-actions/problem_matchers.json"
|
||||
|
||||
# Remove any preexisting rustup installation since it can interfere
|
||||
# with the cargotest step and its auto-detection of things like Clippy in
|
||||
# the environment
|
||||
|
@ -37,8 +37,7 @@ fn main() {
|
||||
asm!("", options(nomem, foo));
|
||||
//~^ ERROR expected one of
|
||||
asm!("{}", options(), const foo);
|
||||
//~^ ERROR arguments are not allowed after options
|
||||
//~^^ ERROR attempt to use a non-constant value in a constant
|
||||
//~^ ERROR attempt to use a non-constant value in a constant
|
||||
asm!("", clobber_abi(foo));
|
||||
//~^ ERROR expected string literal
|
||||
asm!("", clobber_abi("C" foo));
|
||||
@ -46,12 +45,10 @@ fn main() {
|
||||
asm!("", clobber_abi("C", foo));
|
||||
//~^ ERROR expected string literal
|
||||
asm!("{}", clobber_abi("C"), const foo);
|
||||
//~^ ERROR arguments are not allowed after clobber_abi
|
||||
//~^^ ERROR attempt to use a non-constant value in a constant
|
||||
//~^ ERROR attempt to use a non-constant value in a constant
|
||||
asm!("", options(), clobber_abi("C"));
|
||||
//~^ ERROR clobber_abi is not allowed after options
|
||||
asm!("{}", options(), clobber_abi("C"), const foo);
|
||||
//~^ ERROR clobber_abi is not allowed after options
|
||||
//~^ ERROR attempt to use a non-constant value in a constant
|
||||
asm!("{a}", a = const foo, a = const bar);
|
||||
//~^ ERROR duplicate argument named `a`
|
||||
//~^^ ERROR argument never used
|
||||
@ -60,11 +57,9 @@ fn main() {
|
||||
asm!("", a = in("x0") foo);
|
||||
//~^ ERROR explicit register arguments cannot have names
|
||||
asm!("{a}", in("x0") foo, a = const bar);
|
||||
//~^ ERROR named arguments cannot follow explicit register arguments
|
||||
//~^^ ERROR attempt to use a non-constant value in a constant
|
||||
//~^ ERROR attempt to use a non-constant value in a constant
|
||||
asm!("{a}", in("x0") foo, a = const bar);
|
||||
//~^ ERROR named arguments cannot follow explicit register arguments
|
||||
//~^^ ERROR attempt to use a non-constant value in a constant
|
||||
//~^ ERROR attempt to use a non-constant value in a constant
|
||||
asm!("{1}", in("x0") foo, const bar);
|
||||
//~^ ERROR positional arguments cannot follow named arguments or explicit register arguments
|
||||
//~^^ ERROR attempt to use a non-constant value in a constant
|
||||
@ -106,7 +101,6 @@ fn main() {
|
||||
global_asm!("", options(nomem, FOO));
|
||||
//~^ ERROR expected one of
|
||||
global_asm!("{}", options(), const FOO);
|
||||
//~^ ERROR arguments are not allowed after options
|
||||
global_asm!("", clobber_abi(FOO));
|
||||
//~^ ERROR expected string literal
|
||||
global_asm!("", clobber_abi("C" FOO));
|
||||
@ -114,12 +108,11 @@ fn main() {
|
||||
global_asm!("", clobber_abi("C", FOO));
|
||||
//~^ ERROR expected string literal
|
||||
global_asm!("{}", clobber_abi("C"), const FOO);
|
||||
//~^ ERROR arguments are not allowed after clobber_abi
|
||||
//~^^ ERROR `clobber_abi` cannot be used with `global_asm!`
|
||||
//~^ ERROR `clobber_abi` cannot be used with `global_asm!`
|
||||
global_asm!("", options(), clobber_abi("C"));
|
||||
//~^ ERROR clobber_abi is not allowed after options
|
||||
//~^ ERROR `clobber_abi` cannot be used with `global_asm!`
|
||||
global_asm!("{}", options(), clobber_abi("C"), const FOO);
|
||||
//~^ ERROR clobber_abi is not allowed after options
|
||||
//~^ ERROR `clobber_abi` cannot be used with `global_asm!`
|
||||
global_asm!("{a}", a = const FOO, a = const BAR);
|
||||
//~^ ERROR duplicate argument named `a`
|
||||
//~^^ ERROR argument never used
|
||||
|
@ -82,58 +82,26 @@ error: expected one of `)`, `att_syntax`, `may_unwind`, `nomem`, `noreturn`, `no
|
||||
LL | asm!("", options(nomem, foo));
|
||||
| ^^^ expected one of 10 possible tokens
|
||||
|
||||
error: arguments are not allowed after options
|
||||
--> $DIR/parse-error.rs:39:31
|
||||
|
|
||||
LL | asm!("{}", options(), const foo);
|
||||
| --------- ^^^^^^^^^ argument
|
||||
| |
|
||||
| previous options
|
||||
|
||||
error: expected string literal
|
||||
--> $DIR/parse-error.rs:42:30
|
||||
--> $DIR/parse-error.rs:41:30
|
||||
|
|
||||
LL | asm!("", clobber_abi(foo));
|
||||
| ^^^ not a string literal
|
||||
|
||||
error: expected one of `)` or `,`, found `foo`
|
||||
--> $DIR/parse-error.rs:44:34
|
||||
--> $DIR/parse-error.rs:43:34
|
||||
|
|
||||
LL | asm!("", clobber_abi("C" foo));
|
||||
| ^^^ expected one of `)` or `,`
|
||||
|
||||
error: expected string literal
|
||||
--> $DIR/parse-error.rs:46:35
|
||||
--> $DIR/parse-error.rs:45:35
|
||||
|
|
||||
LL | asm!("", clobber_abi("C", foo));
|
||||
| ^^^ not a string literal
|
||||
|
||||
error: arguments are not allowed after clobber_abi
|
||||
--> $DIR/parse-error.rs:48:38
|
||||
|
|
||||
LL | asm!("{}", clobber_abi("C"), const foo);
|
||||
| ---------------- ^^^^^^^^^ argument
|
||||
| |
|
||||
| clobber_abi
|
||||
|
||||
error: clobber_abi is not allowed after options
|
||||
--> $DIR/parse-error.rs:51:29
|
||||
|
|
||||
LL | asm!("", options(), clobber_abi("C"));
|
||||
| --------- ^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| options
|
||||
|
||||
error: clobber_abi is not allowed after options
|
||||
--> $DIR/parse-error.rs:53:31
|
||||
|
|
||||
LL | asm!("{}", options(), clobber_abi("C"), const foo);
|
||||
| --------- ^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| options
|
||||
|
||||
error: duplicate argument named `a`
|
||||
--> $DIR/parse-error.rs:55:36
|
||||
--> $DIR/parse-error.rs:52:36
|
||||
|
|
||||
LL | asm!("{a}", a = const foo, a = const bar);
|
||||
| ------------- ^^^^^^^^^^^^^ duplicate argument
|
||||
@ -141,7 +109,7 @@ LL | asm!("{a}", a = const foo, a = const bar);
|
||||
| previously here
|
||||
|
||||
error: argument never used
|
||||
--> $DIR/parse-error.rs:55:36
|
||||
--> $DIR/parse-error.rs:52:36
|
||||
|
|
||||
LL | asm!("{a}", a = const foo, a = const bar);
|
||||
| ^^^^^^^^^^^^^ argument never used
|
||||
@ -149,29 +117,13 @@ LL | asm!("{a}", a = const foo, a = const bar);
|
||||
= help: if this argument is intentionally unused, consider using it in an asm comment: `"/* {1} */"`
|
||||
|
||||
error: explicit register arguments cannot have names
|
||||
--> $DIR/parse-error.rs:60:18
|
||||
--> $DIR/parse-error.rs:57:18
|
||||
|
|
||||
LL | asm!("", a = in("x0") foo);
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: named arguments cannot follow explicit register arguments
|
||||
--> $DIR/parse-error.rs:62:35
|
||||
|
|
||||
LL | asm!("{a}", in("x0") foo, a = const bar);
|
||||
| ------------ ^^^^^^^^^^^^^ named argument
|
||||
| |
|
||||
| explicit register argument
|
||||
|
||||
error: named arguments cannot follow explicit register arguments
|
||||
--> $DIR/parse-error.rs:65:35
|
||||
|
|
||||
LL | asm!("{a}", in("x0") foo, a = const bar);
|
||||
| ------------ ^^^^^^^^^^^^^ named argument
|
||||
| |
|
||||
| explicit register argument
|
||||
|
||||
error: positional arguments cannot follow named arguments or explicit register arguments
|
||||
--> $DIR/parse-error.rs:68:35
|
||||
--> $DIR/parse-error.rs:63:35
|
||||
|
|
||||
LL | asm!("{1}", in("x0") foo, const bar);
|
||||
| ------------ ^^^^^^^^^ positional argument
|
||||
@ -179,19 +131,19 @@ LL | asm!("{1}", in("x0") foo, const bar);
|
||||
| explicit register argument
|
||||
|
||||
error: expected one of `clobber_abi`, `const`, `in`, `inlateout`, `inout`, `lateout`, `options`, `out`, or `sym`, found `""`
|
||||
--> $DIR/parse-error.rs:71:29
|
||||
--> $DIR/parse-error.rs:66:29
|
||||
|
|
||||
LL | asm!("", options(), "");
|
||||
| ^^ expected one of 9 possible tokens
|
||||
|
||||
error: expected one of `clobber_abi`, `const`, `in`, `inlateout`, `inout`, `lateout`, `options`, `out`, or `sym`, found `"{}"`
|
||||
--> $DIR/parse-error.rs:73:33
|
||||
--> $DIR/parse-error.rs:68:33
|
||||
|
|
||||
LL | asm!("{}", in(reg) foo, "{}", out(reg) foo);
|
||||
| ^^^^ expected one of 9 possible tokens
|
||||
|
||||
error: asm template must be a string literal
|
||||
--> $DIR/parse-error.rs:75:14
|
||||
--> $DIR/parse-error.rs:70:14
|
||||
|
|
||||
LL | asm!(format!("{{{}}}", 0), in(reg) foo);
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
@ -199,7 +151,7 @@ LL | asm!(format!("{{{}}}", 0), in(reg) foo);
|
||||
= note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: asm template must be a string literal
|
||||
--> $DIR/parse-error.rs:77:21
|
||||
--> $DIR/parse-error.rs:72:21
|
||||
|
|
||||
LL | asm!("{1}", format!("{{{}}}", 0), in(reg) foo, out(reg) bar);
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
@ -207,135 +159,115 @@ LL | asm!("{1}", format!("{{{}}}", 0), in(reg) foo, out(reg) bar);
|
||||
= note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: _ cannot be used for input operands
|
||||
--> $DIR/parse-error.rs:79:28
|
||||
--> $DIR/parse-error.rs:74:28
|
||||
|
|
||||
LL | asm!("{}", in(reg) _);
|
||||
| ^
|
||||
|
||||
error: _ cannot be used for input operands
|
||||
--> $DIR/parse-error.rs:81:31
|
||||
--> $DIR/parse-error.rs:76:31
|
||||
|
|
||||
LL | asm!("{}", inout(reg) _);
|
||||
| ^
|
||||
|
||||
error: _ cannot be used for input operands
|
||||
--> $DIR/parse-error.rs:83:35
|
||||
--> $DIR/parse-error.rs:78:35
|
||||
|
|
||||
LL | asm!("{}", inlateout(reg) _);
|
||||
| ^
|
||||
|
||||
error: requires at least a template string argument
|
||||
--> $DIR/parse-error.rs:90:1
|
||||
--> $DIR/parse-error.rs:85:1
|
||||
|
|
||||
LL | global_asm!();
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: asm template must be a string literal
|
||||
--> $DIR/parse-error.rs:92:13
|
||||
--> $DIR/parse-error.rs:87:13
|
||||
|
|
||||
LL | global_asm!(FOO);
|
||||
| ^^^
|
||||
|
||||
error: expected token: `,`
|
||||
--> $DIR/parse-error.rs:94:18
|
||||
--> $DIR/parse-error.rs:89:18
|
||||
|
|
||||
LL | global_asm!("{}" FOO);
|
||||
| ^^^ expected `,`
|
||||
|
||||
error: expected operand, options, or additional template string
|
||||
--> $DIR/parse-error.rs:96:19
|
||||
--> $DIR/parse-error.rs:91:19
|
||||
|
|
||||
LL | global_asm!("{}", FOO);
|
||||
| ^^^ expected operand, options, or additional template string
|
||||
|
||||
error: expected expression, found end of macro arguments
|
||||
--> $DIR/parse-error.rs:98:24
|
||||
--> $DIR/parse-error.rs:93:24
|
||||
|
|
||||
LL | global_asm!("{}", const);
|
||||
| ^ expected expression
|
||||
|
||||
error: expected one of `,`, `.`, `?`, or an operator, found `FOO`
|
||||
--> $DIR/parse-error.rs:100:30
|
||||
--> $DIR/parse-error.rs:95:30
|
||||
|
|
||||
LL | global_asm!("{}", const(reg) FOO);
|
||||
| ^^^ expected one of `,`, `.`, `?`, or an operator
|
||||
|
||||
error: expected one of `)`, `att_syntax`, or `raw`, found `FOO`
|
||||
--> $DIR/parse-error.rs:102:25
|
||||
--> $DIR/parse-error.rs:97:25
|
||||
|
|
||||
LL | global_asm!("", options(FOO));
|
||||
| ^^^ expected one of `)`, `att_syntax`, or `raw`
|
||||
|
||||
error: expected one of `)`, `att_syntax`, or `raw`, found `nomem`
|
||||
--> $DIR/parse-error.rs:104:25
|
||||
--> $DIR/parse-error.rs:99:25
|
||||
|
|
||||
LL | global_asm!("", options(nomem FOO));
|
||||
| ^^^^^ expected one of `)`, `att_syntax`, or `raw`
|
||||
|
||||
error: expected one of `)`, `att_syntax`, or `raw`, found `nomem`
|
||||
--> $DIR/parse-error.rs:106:25
|
||||
--> $DIR/parse-error.rs:101:25
|
||||
|
|
||||
LL | global_asm!("", options(nomem, FOO));
|
||||
| ^^^^^ expected one of `)`, `att_syntax`, or `raw`
|
||||
|
||||
error: arguments are not allowed after options
|
||||
--> $DIR/parse-error.rs:108:30
|
||||
|
|
||||
LL | global_asm!("{}", options(), const FOO);
|
||||
| --------- ^^^^^^^^^ argument
|
||||
| |
|
||||
| previous options
|
||||
|
||||
error: expected string literal
|
||||
--> $DIR/parse-error.rs:110:29
|
||||
--> $DIR/parse-error.rs:104:29
|
||||
|
|
||||
LL | global_asm!("", clobber_abi(FOO));
|
||||
| ^^^ not a string literal
|
||||
|
||||
error: expected one of `)` or `,`, found `FOO`
|
||||
--> $DIR/parse-error.rs:112:33
|
||||
--> $DIR/parse-error.rs:106:33
|
||||
|
|
||||
LL | global_asm!("", clobber_abi("C" FOO));
|
||||
| ^^^ expected one of `)` or `,`
|
||||
|
||||
error: expected string literal
|
||||
--> $DIR/parse-error.rs:114:34
|
||||
--> $DIR/parse-error.rs:108:34
|
||||
|
|
||||
LL | global_asm!("", clobber_abi("C", FOO));
|
||||
| ^^^ not a string literal
|
||||
|
||||
error: arguments are not allowed after clobber_abi
|
||||
--> $DIR/parse-error.rs:116:37
|
||||
|
|
||||
LL | global_asm!("{}", clobber_abi("C"), const FOO);
|
||||
| ---------------- ^^^^^^^^^ argument
|
||||
| |
|
||||
| clobber_abi
|
||||
|
||||
error: `clobber_abi` cannot be used with `global_asm!`
|
||||
--> $DIR/parse-error.rs:116:19
|
||||
--> $DIR/parse-error.rs:110:19
|
||||
|
|
||||
LL | global_asm!("{}", clobber_abi("C"), const FOO);
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: clobber_abi is not allowed after options
|
||||
--> $DIR/parse-error.rs:119:28
|
||||
error: `clobber_abi` cannot be used with `global_asm!`
|
||||
--> $DIR/parse-error.rs:112:28
|
||||
|
|
||||
LL | global_asm!("", options(), clobber_abi("C"));
|
||||
| --------- ^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| options
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: clobber_abi is not allowed after options
|
||||
--> $DIR/parse-error.rs:121:30
|
||||
error: `clobber_abi` cannot be used with `global_asm!`
|
||||
--> $DIR/parse-error.rs:114:30
|
||||
|
|
||||
LL | global_asm!("{}", options(), clobber_abi("C"), const FOO);
|
||||
| --------- ^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| options
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: duplicate argument named `a`
|
||||
--> $DIR/parse-error.rs:123:35
|
||||
--> $DIR/parse-error.rs:116:35
|
||||
|
|
||||
LL | global_asm!("{a}", a = const FOO, a = const BAR);
|
||||
| ------------- ^^^^^^^^^^^^^ duplicate argument
|
||||
@ -343,7 +275,7 @@ LL | global_asm!("{a}", a = const FOO, a = const BAR);
|
||||
| previously here
|
||||
|
||||
error: argument never used
|
||||
--> $DIR/parse-error.rs:123:35
|
||||
--> $DIR/parse-error.rs:116:35
|
||||
|
|
||||
LL | global_asm!("{a}", a = const FOO, a = const BAR);
|
||||
| ^^^^^^^^^^^^^ argument never used
|
||||
@ -351,19 +283,19 @@ LL | global_asm!("{a}", a = const FOO, a = const BAR);
|
||||
= help: if this argument is intentionally unused, consider using it in an asm comment: `"/* {1} */"`
|
||||
|
||||
error: expected one of `clobber_abi`, `const`, `options`, or `sym`, found `""`
|
||||
--> $DIR/parse-error.rs:126:28
|
||||
--> $DIR/parse-error.rs:119:28
|
||||
|
|
||||
LL | global_asm!("", options(), "");
|
||||
| ^^ expected one of `clobber_abi`, `const`, `options`, or `sym`
|
||||
|
||||
error: expected one of `clobber_abi`, `const`, `options`, or `sym`, found `"{}"`
|
||||
--> $DIR/parse-error.rs:128:30
|
||||
--> $DIR/parse-error.rs:121:30
|
||||
|
|
||||
LL | global_asm!("{}", const FOO, "{}", const FOO);
|
||||
| ^^^^ expected one of `clobber_abi`, `const`, `options`, or `sym`
|
||||
|
||||
error: asm template must be a string literal
|
||||
--> $DIR/parse-error.rs:130:13
|
||||
--> $DIR/parse-error.rs:123:13
|
||||
|
|
||||
LL | global_asm!(format!("{{{}}}", 0), const FOO);
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
@ -371,7 +303,7 @@ LL | global_asm!(format!("{{{}}}", 0), const FOO);
|
||||
= note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: asm template must be a string literal
|
||||
--> $DIR/parse-error.rs:132:20
|
||||
--> $DIR/parse-error.rs:125:20
|
||||
|
|
||||
LL | global_asm!("{1}", format!("{{{}}}", 0), const FOO, const BAR);
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
@ -388,7 +320,7 @@ LL | asm!("{}", options(), const foo);
|
||||
| ^^^ non-constant value
|
||||
|
||||
error[E0435]: attempt to use a non-constant value in a constant
|
||||
--> $DIR/parse-error.rs:48:44
|
||||
--> $DIR/parse-error.rs:47:44
|
||||
|
|
||||
LL | let mut foo = 0;
|
||||
| ----------- help: consider using `const` instead of `let`: `const foo`
|
||||
@ -397,7 +329,16 @@ LL | asm!("{}", clobber_abi("C"), const foo);
|
||||
| ^^^ non-constant value
|
||||
|
||||
error[E0435]: attempt to use a non-constant value in a constant
|
||||
--> $DIR/parse-error.rs:55:31
|
||||
--> $DIR/parse-error.rs:50:55
|
||||
|
|
||||
LL | let mut foo = 0;
|
||||
| ----------- help: consider using `const` instead of `let`: `const foo`
|
||||
...
|
||||
LL | asm!("{}", options(), clobber_abi("C"), const foo);
|
||||
| ^^^ non-constant value
|
||||
|
||||
error[E0435]: attempt to use a non-constant value in a constant
|
||||
--> $DIR/parse-error.rs:52:31
|
||||
|
|
||||
LL | let mut foo = 0;
|
||||
| ----------- help: consider using `const` instead of `let`: `const foo`
|
||||
@ -406,7 +347,7 @@ LL | asm!("{a}", a = const foo, a = const bar);
|
||||
| ^^^ non-constant value
|
||||
|
||||
error[E0435]: attempt to use a non-constant value in a constant
|
||||
--> $DIR/parse-error.rs:55:46
|
||||
--> $DIR/parse-error.rs:52:46
|
||||
|
|
||||
LL | let mut bar = 0;
|
||||
| ----------- help: consider using `const` instead of `let`: `const bar`
|
||||
@ -415,7 +356,7 @@ LL | asm!("{a}", a = const foo, a = const bar);
|
||||
| ^^^ non-constant value
|
||||
|
||||
error[E0435]: attempt to use a non-constant value in a constant
|
||||
--> $DIR/parse-error.rs:62:45
|
||||
--> $DIR/parse-error.rs:59:45
|
||||
|
|
||||
LL | let mut bar = 0;
|
||||
| ----------- help: consider using `const` instead of `let`: `const bar`
|
||||
@ -424,7 +365,7 @@ LL | asm!("{a}", in("x0") foo, a = const bar);
|
||||
| ^^^ non-constant value
|
||||
|
||||
error[E0435]: attempt to use a non-constant value in a constant
|
||||
--> $DIR/parse-error.rs:65:45
|
||||
--> $DIR/parse-error.rs:61:45
|
||||
|
|
||||
LL | let mut bar = 0;
|
||||
| ----------- help: consider using `const` instead of `let`: `const bar`
|
||||
@ -433,7 +374,7 @@ LL | asm!("{a}", in("x0") foo, a = const bar);
|
||||
| ^^^ non-constant value
|
||||
|
||||
error[E0435]: attempt to use a non-constant value in a constant
|
||||
--> $DIR/parse-error.rs:68:41
|
||||
--> $DIR/parse-error.rs:63:41
|
||||
|
|
||||
LL | let mut bar = 0;
|
||||
| ----------- help: consider using `const` instead of `let`: `const bar`
|
||||
@ -441,6 +382,6 @@ LL | let mut bar = 0;
|
||||
LL | asm!("{1}", in("x0") foo, const bar);
|
||||
| ^^^ non-constant value
|
||||
|
||||
error: aborting due to 64 previous errors
|
||||
error: aborting due to 57 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0435`.
|
||||
|
@ -81,6 +81,11 @@ note: explicit register arguments cannot be used in the asm template
|
||||
|
|
||||
LL | asm!("{}", in("x0") foo);
|
||||
| ^^^^^^^^^^^^
|
||||
help: use the register name directly in the assembly code
|
||||
--> $DIR/bad-template.rs:48:20
|
||||
|
|
||||
LL | asm!("{}", in("x0") foo);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: asm template modifier must be a single character
|
||||
--> $DIR/bad-template.rs:50:17
|
||||
|
@ -81,6 +81,11 @@ note: explicit register arguments cannot be used in the asm template
|
||||
|
|
||||
LL | asm!("{}", in("x0") foo);
|
||||
| ^^^^^^^^^^^^
|
||||
help: use the register name directly in the assembly code
|
||||
--> $DIR/bad-template.rs:48:20
|
||||
|
|
||||
LL | asm!("{}", in("x0") foo);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: asm template modifier must be a single character
|
||||
--> $DIR/bad-template.rs:50:17
|
||||
|
@ -81,6 +81,11 @@ note: explicit register arguments cannot be used in the asm template
|
||||
|
|
||||
LL | asm!("{}", in("eax") foo);
|
||||
| ^^^^^^^^^^^^^
|
||||
help: use the register name directly in the assembly code
|
||||
--> $DIR/bad-template.rs:45:20
|
||||
|
|
||||
LL | asm!("{}", in("eax") foo);
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: asm template modifier must be a single character
|
||||
--> $DIR/bad-template.rs:50:17
|
||||
|
@ -81,6 +81,11 @@ note: explicit register arguments cannot be used in the asm template
|
||||
|
|
||||
LL | asm!("{}", in("eax") foo);
|
||||
| ^^^^^^^^^^^^^
|
||||
help: use the register name directly in the assembly code
|
||||
--> $DIR/bad-template.rs:45:20
|
||||
|
|
||||
LL | asm!("{}", in("eax") foo);
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: asm template modifier must be a single character
|
||||
--> $DIR/bad-template.rs:50:17
|
||||
|
@ -37,8 +37,7 @@ fn main() {
|
||||
asm!("", options(nomem, foo));
|
||||
//~^ ERROR expected one of
|
||||
asm!("{}", options(), const foo);
|
||||
//~^ ERROR arguments are not allowed after options
|
||||
//~^^ ERROR attempt to use a non-constant value in a constant
|
||||
//~^ ERROR attempt to use a non-constant value in a constant
|
||||
asm!("", clobber_abi());
|
||||
//~^ ERROR at least one abi must be provided
|
||||
asm!("", clobber_abi(foo));
|
||||
@ -48,12 +47,10 @@ fn main() {
|
||||
asm!("", clobber_abi("C", foo));
|
||||
//~^ ERROR expected string literal
|
||||
asm!("{}", clobber_abi("C"), const foo);
|
||||
//~^ ERROR arguments are not allowed after clobber_abi
|
||||
//~^^ ERROR attempt to use a non-constant value in a constant
|
||||
//~^ ERROR attempt to use a non-constant value in a constant
|
||||
asm!("", options(), clobber_abi("C"));
|
||||
//~^ ERROR clobber_abi is not allowed after options
|
||||
asm!("{}", options(), clobber_abi("C"), const foo);
|
||||
//~^ ERROR clobber_abi is not allowed after options
|
||||
//~^ ERROR attempt to use a non-constant value in a constant
|
||||
asm!("{a}", a = const foo, a = const bar);
|
||||
//~^ ERROR duplicate argument named `a`
|
||||
//~^^ ERROR argument never used
|
||||
@ -62,11 +59,9 @@ fn main() {
|
||||
asm!("", a = in("eax") foo);
|
||||
//~^ ERROR explicit register arguments cannot have names
|
||||
asm!("{a}", in("eax") foo, a = const bar);
|
||||
//~^ ERROR named arguments cannot follow explicit register arguments
|
||||
//~^^ ERROR attempt to use a non-constant value in a constant
|
||||
//~^ ERROR attempt to use a non-constant value in a constant
|
||||
asm!("{a}", in("eax") foo, a = const bar);
|
||||
//~^ ERROR named arguments cannot follow explicit register arguments
|
||||
//~^^ ERROR attempt to use a non-constant value in a constant
|
||||
//~^ ERROR attempt to use a non-constant value in a constant
|
||||
asm!("{1}", in("eax") foo, const bar);
|
||||
//~^ ERROR positional arguments cannot follow named arguments or explicit register arguments
|
||||
//~^^ ERROR attempt to use a non-constant value in a constant
|
||||
@ -108,7 +103,6 @@ fn main() {
|
||||
global_asm!("", options(nomem, FOO));
|
||||
//~^ ERROR expected one of
|
||||
global_asm!("{}", options(), const FOO);
|
||||
//~^ ERROR arguments are not allowed after options
|
||||
global_asm!("", clobber_abi(FOO));
|
||||
//~^ ERROR expected string literal
|
||||
global_asm!("", clobber_abi("C" FOO));
|
||||
@ -116,12 +110,11 @@ fn main() {
|
||||
global_asm!("", clobber_abi("C", FOO));
|
||||
//~^ ERROR expected string literal
|
||||
global_asm!("{}", clobber_abi("C"), const FOO);
|
||||
//~^ ERROR arguments are not allowed after clobber_abi
|
||||
//~^^ ERROR `clobber_abi` cannot be used with `global_asm!`
|
||||
//~^ ERROR `clobber_abi` cannot be used with `global_asm!`
|
||||
global_asm!("", options(), clobber_abi("C"));
|
||||
//~^ ERROR clobber_abi is not allowed after options
|
||||
//~^ ERROR `clobber_abi` cannot be used with `global_asm!`
|
||||
global_asm!("{}", options(), clobber_abi("C"), const FOO);
|
||||
//~^ ERROR clobber_abi is not allowed after options
|
||||
//~^ ERROR `clobber_abi` cannot be used with `global_asm!`
|
||||
global_asm!("", clobber_abi("C"), clobber_abi("C"));
|
||||
//~^ ERROR `clobber_abi` cannot be used with `global_asm!`
|
||||
global_asm!("{a}", a = const FOO, a = const BAR);
|
||||
|
@ -82,64 +82,32 @@ error: expected one of `)`, `att_syntax`, `may_unwind`, `nomem`, `noreturn`, `no
|
||||
LL | asm!("", options(nomem, foo));
|
||||
| ^^^ expected one of 10 possible tokens
|
||||
|
||||
error: arguments are not allowed after options
|
||||
--> $DIR/parse-error.rs:39:31
|
||||
|
|
||||
LL | asm!("{}", options(), const foo);
|
||||
| --------- ^^^^^^^^^ argument
|
||||
| |
|
||||
| previous options
|
||||
|
||||
error: at least one abi must be provided as an argument to `clobber_abi`
|
||||
--> $DIR/parse-error.rs:42:30
|
||||
--> $DIR/parse-error.rs:41:30
|
||||
|
|
||||
LL | asm!("", clobber_abi());
|
||||
| ^
|
||||
|
||||
error: expected string literal
|
||||
--> $DIR/parse-error.rs:44:30
|
||||
--> $DIR/parse-error.rs:43:30
|
||||
|
|
||||
LL | asm!("", clobber_abi(foo));
|
||||
| ^^^ not a string literal
|
||||
|
||||
error: expected one of `)` or `,`, found `foo`
|
||||
--> $DIR/parse-error.rs:46:34
|
||||
--> $DIR/parse-error.rs:45:34
|
||||
|
|
||||
LL | asm!("", clobber_abi("C" foo));
|
||||
| ^^^ expected one of `)` or `,`
|
||||
|
||||
error: expected string literal
|
||||
--> $DIR/parse-error.rs:48:35
|
||||
--> $DIR/parse-error.rs:47:35
|
||||
|
|
||||
LL | asm!("", clobber_abi("C", foo));
|
||||
| ^^^ not a string literal
|
||||
|
||||
error: arguments are not allowed after clobber_abi
|
||||
--> $DIR/parse-error.rs:50:38
|
||||
|
|
||||
LL | asm!("{}", clobber_abi("C"), const foo);
|
||||
| ---------------- ^^^^^^^^^ argument
|
||||
| |
|
||||
| clobber_abi
|
||||
|
||||
error: clobber_abi is not allowed after options
|
||||
--> $DIR/parse-error.rs:53:29
|
||||
|
|
||||
LL | asm!("", options(), clobber_abi("C"));
|
||||
| --------- ^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| options
|
||||
|
||||
error: clobber_abi is not allowed after options
|
||||
--> $DIR/parse-error.rs:55:31
|
||||
|
|
||||
LL | asm!("{}", options(), clobber_abi("C"), const foo);
|
||||
| --------- ^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| options
|
||||
|
||||
error: duplicate argument named `a`
|
||||
--> $DIR/parse-error.rs:57:36
|
||||
--> $DIR/parse-error.rs:54:36
|
||||
|
|
||||
LL | asm!("{a}", a = const foo, a = const bar);
|
||||
| ------------- ^^^^^^^^^^^^^ duplicate argument
|
||||
@ -147,7 +115,7 @@ LL | asm!("{a}", a = const foo, a = const bar);
|
||||
| previously here
|
||||
|
||||
error: argument never used
|
||||
--> $DIR/parse-error.rs:57:36
|
||||
--> $DIR/parse-error.rs:54:36
|
||||
|
|
||||
LL | asm!("{a}", a = const foo, a = const bar);
|
||||
| ^^^^^^^^^^^^^ argument never used
|
||||
@ -155,29 +123,13 @@ LL | asm!("{a}", a = const foo, a = const bar);
|
||||
= help: if this argument is intentionally unused, consider using it in an asm comment: `"/* {1} */"`
|
||||
|
||||
error: explicit register arguments cannot have names
|
||||
--> $DIR/parse-error.rs:62:18
|
||||
--> $DIR/parse-error.rs:59:18
|
||||
|
|
||||
LL | asm!("", a = in("eax") foo);
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: named arguments cannot follow explicit register arguments
|
||||
--> $DIR/parse-error.rs:64:36
|
||||
|
|
||||
LL | asm!("{a}", in("eax") foo, a = const bar);
|
||||
| ------------- ^^^^^^^^^^^^^ named argument
|
||||
| |
|
||||
| explicit register argument
|
||||
|
||||
error: named arguments cannot follow explicit register arguments
|
||||
--> $DIR/parse-error.rs:67:36
|
||||
|
|
||||
LL | asm!("{a}", in("eax") foo, a = const bar);
|
||||
| ------------- ^^^^^^^^^^^^^ named argument
|
||||
| |
|
||||
| explicit register argument
|
||||
|
||||
error: positional arguments cannot follow named arguments or explicit register arguments
|
||||
--> $DIR/parse-error.rs:70:36
|
||||
--> $DIR/parse-error.rs:65:36
|
||||
|
|
||||
LL | asm!("{1}", in("eax") foo, const bar);
|
||||
| ------------- ^^^^^^^^^ positional argument
|
||||
@ -185,19 +137,19 @@ LL | asm!("{1}", in("eax") foo, const bar);
|
||||
| explicit register argument
|
||||
|
||||
error: expected one of `clobber_abi`, `const`, `in`, `inlateout`, `inout`, `lateout`, `options`, `out`, or `sym`, found `""`
|
||||
--> $DIR/parse-error.rs:73:29
|
||||
--> $DIR/parse-error.rs:68:29
|
||||
|
|
||||
LL | asm!("", options(), "");
|
||||
| ^^ expected one of 9 possible tokens
|
||||
|
||||
error: expected one of `clobber_abi`, `const`, `in`, `inlateout`, `inout`, `lateout`, `options`, `out`, or `sym`, found `"{}"`
|
||||
--> $DIR/parse-error.rs:75:33
|
||||
--> $DIR/parse-error.rs:70:33
|
||||
|
|
||||
LL | asm!("{}", in(reg) foo, "{}", out(reg) foo);
|
||||
| ^^^^ expected one of 9 possible tokens
|
||||
|
||||
error: asm template must be a string literal
|
||||
--> $DIR/parse-error.rs:77:14
|
||||
--> $DIR/parse-error.rs:72:14
|
||||
|
|
||||
LL | asm!(format!("{{{}}}", 0), in(reg) foo);
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
@ -205,7 +157,7 @@ LL | asm!(format!("{{{}}}", 0), in(reg) foo);
|
||||
= note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: asm template must be a string literal
|
||||
--> $DIR/parse-error.rs:79:21
|
||||
--> $DIR/parse-error.rs:74:21
|
||||
|
|
||||
LL | asm!("{1}", format!("{{{}}}", 0), in(reg) foo, out(reg) bar);
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
@ -213,141 +165,121 @@ LL | asm!("{1}", format!("{{{}}}", 0), in(reg) foo, out(reg) bar);
|
||||
= note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: _ cannot be used for input operands
|
||||
--> $DIR/parse-error.rs:81:28
|
||||
--> $DIR/parse-error.rs:76:28
|
||||
|
|
||||
LL | asm!("{}", in(reg) _);
|
||||
| ^
|
||||
|
||||
error: _ cannot be used for input operands
|
||||
--> $DIR/parse-error.rs:83:31
|
||||
--> $DIR/parse-error.rs:78:31
|
||||
|
|
||||
LL | asm!("{}", inout(reg) _);
|
||||
| ^
|
||||
|
||||
error: _ cannot be used for input operands
|
||||
--> $DIR/parse-error.rs:85:35
|
||||
--> $DIR/parse-error.rs:80:35
|
||||
|
|
||||
LL | asm!("{}", inlateout(reg) _);
|
||||
| ^
|
||||
|
||||
error: requires at least a template string argument
|
||||
--> $DIR/parse-error.rs:92:1
|
||||
--> $DIR/parse-error.rs:87:1
|
||||
|
|
||||
LL | global_asm!();
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: asm template must be a string literal
|
||||
--> $DIR/parse-error.rs:94:13
|
||||
--> $DIR/parse-error.rs:89:13
|
||||
|
|
||||
LL | global_asm!(FOO);
|
||||
| ^^^
|
||||
|
||||
error: expected token: `,`
|
||||
--> $DIR/parse-error.rs:96:18
|
||||
--> $DIR/parse-error.rs:91:18
|
||||
|
|
||||
LL | global_asm!("{}" FOO);
|
||||
| ^^^ expected `,`
|
||||
|
||||
error: expected operand, options, or additional template string
|
||||
--> $DIR/parse-error.rs:98:19
|
||||
--> $DIR/parse-error.rs:93:19
|
||||
|
|
||||
LL | global_asm!("{}", FOO);
|
||||
| ^^^ expected operand, options, or additional template string
|
||||
|
||||
error: expected expression, found end of macro arguments
|
||||
--> $DIR/parse-error.rs:100:24
|
||||
--> $DIR/parse-error.rs:95:24
|
||||
|
|
||||
LL | global_asm!("{}", const);
|
||||
| ^ expected expression
|
||||
|
||||
error: expected one of `,`, `.`, `?`, or an operator, found `FOO`
|
||||
--> $DIR/parse-error.rs:102:30
|
||||
--> $DIR/parse-error.rs:97:30
|
||||
|
|
||||
LL | global_asm!("{}", const(reg) FOO);
|
||||
| ^^^ expected one of `,`, `.`, `?`, or an operator
|
||||
|
||||
error: expected one of `)`, `att_syntax`, or `raw`, found `FOO`
|
||||
--> $DIR/parse-error.rs:104:25
|
||||
--> $DIR/parse-error.rs:99:25
|
||||
|
|
||||
LL | global_asm!("", options(FOO));
|
||||
| ^^^ expected one of `)`, `att_syntax`, or `raw`
|
||||
|
||||
error: expected one of `)`, `att_syntax`, or `raw`, found `nomem`
|
||||
--> $DIR/parse-error.rs:106:25
|
||||
--> $DIR/parse-error.rs:101:25
|
||||
|
|
||||
LL | global_asm!("", options(nomem FOO));
|
||||
| ^^^^^ expected one of `)`, `att_syntax`, or `raw`
|
||||
|
||||
error: expected one of `)`, `att_syntax`, or `raw`, found `nomem`
|
||||
--> $DIR/parse-error.rs:108:25
|
||||
--> $DIR/parse-error.rs:103:25
|
||||
|
|
||||
LL | global_asm!("", options(nomem, FOO));
|
||||
| ^^^^^ expected one of `)`, `att_syntax`, or `raw`
|
||||
|
||||
error: arguments are not allowed after options
|
||||
--> $DIR/parse-error.rs:110:30
|
||||
|
|
||||
LL | global_asm!("{}", options(), const FOO);
|
||||
| --------- ^^^^^^^^^ argument
|
||||
| |
|
||||
| previous options
|
||||
|
||||
error: expected string literal
|
||||
--> $DIR/parse-error.rs:112:29
|
||||
--> $DIR/parse-error.rs:106:29
|
||||
|
|
||||
LL | global_asm!("", clobber_abi(FOO));
|
||||
| ^^^ not a string literal
|
||||
|
||||
error: expected one of `)` or `,`, found `FOO`
|
||||
--> $DIR/parse-error.rs:114:33
|
||||
--> $DIR/parse-error.rs:108:33
|
||||
|
|
||||
LL | global_asm!("", clobber_abi("C" FOO));
|
||||
| ^^^ expected one of `)` or `,`
|
||||
|
||||
error: expected string literal
|
||||
--> $DIR/parse-error.rs:116:34
|
||||
--> $DIR/parse-error.rs:110:34
|
||||
|
|
||||
LL | global_asm!("", clobber_abi("C", FOO));
|
||||
| ^^^ not a string literal
|
||||
|
||||
error: arguments are not allowed after clobber_abi
|
||||
--> $DIR/parse-error.rs:118:37
|
||||
|
|
||||
LL | global_asm!("{}", clobber_abi("C"), const FOO);
|
||||
| ---------------- ^^^^^^^^^ argument
|
||||
| |
|
||||
| clobber_abi
|
||||
|
||||
error: `clobber_abi` cannot be used with `global_asm!`
|
||||
--> $DIR/parse-error.rs:118:19
|
||||
--> $DIR/parse-error.rs:112:19
|
||||
|
|
||||
LL | global_asm!("{}", clobber_abi("C"), const FOO);
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: clobber_abi is not allowed after options
|
||||
--> $DIR/parse-error.rs:121:28
|
||||
error: `clobber_abi` cannot be used with `global_asm!`
|
||||
--> $DIR/parse-error.rs:114:28
|
||||
|
|
||||
LL | global_asm!("", options(), clobber_abi("C"));
|
||||
| --------- ^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| options
|
||||
|
||||
error: clobber_abi is not allowed after options
|
||||
--> $DIR/parse-error.rs:123:30
|
||||
|
|
||||
LL | global_asm!("{}", options(), clobber_abi("C"), const FOO);
|
||||
| --------- ^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| options
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: `clobber_abi` cannot be used with `global_asm!`
|
||||
--> $DIR/parse-error.rs:125:17
|
||||
--> $DIR/parse-error.rs:116:30
|
||||
|
|
||||
LL | global_asm!("{}", options(), clobber_abi("C"), const FOO);
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: `clobber_abi` cannot be used with `global_asm!`
|
||||
--> $DIR/parse-error.rs:118:17
|
||||
|
|
||||
LL | global_asm!("", clobber_abi("C"), clobber_abi("C"));
|
||||
| ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: duplicate argument named `a`
|
||||
--> $DIR/parse-error.rs:127:35
|
||||
--> $DIR/parse-error.rs:120:35
|
||||
|
|
||||
LL | global_asm!("{a}", a = const FOO, a = const BAR);
|
||||
| ------------- ^^^^^^^^^^^^^ duplicate argument
|
||||
@ -355,7 +287,7 @@ LL | global_asm!("{a}", a = const FOO, a = const BAR);
|
||||
| previously here
|
||||
|
||||
error: argument never used
|
||||
--> $DIR/parse-error.rs:127:35
|
||||
--> $DIR/parse-error.rs:120:35
|
||||
|
|
||||
LL | global_asm!("{a}", a = const FOO, a = const BAR);
|
||||
| ^^^^^^^^^^^^^ argument never used
|
||||
@ -363,19 +295,19 @@ LL | global_asm!("{a}", a = const FOO, a = const BAR);
|
||||
= help: if this argument is intentionally unused, consider using it in an asm comment: `"/* {1} */"`
|
||||
|
||||
error: expected one of `clobber_abi`, `const`, `options`, or `sym`, found `""`
|
||||
--> $DIR/parse-error.rs:130:28
|
||||
--> $DIR/parse-error.rs:123:28
|
||||
|
|
||||
LL | global_asm!("", options(), "");
|
||||
| ^^ expected one of `clobber_abi`, `const`, `options`, or `sym`
|
||||
|
||||
error: expected one of `clobber_abi`, `const`, `options`, or `sym`, found `"{}"`
|
||||
--> $DIR/parse-error.rs:132:30
|
||||
--> $DIR/parse-error.rs:125:30
|
||||
|
|
||||
LL | global_asm!("{}", const FOO, "{}", const FOO);
|
||||
| ^^^^ expected one of `clobber_abi`, `const`, `options`, or `sym`
|
||||
|
||||
error: asm template must be a string literal
|
||||
--> $DIR/parse-error.rs:134:13
|
||||
--> $DIR/parse-error.rs:127:13
|
||||
|
|
||||
LL | global_asm!(format!("{{{}}}", 0), const FOO);
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
@ -383,7 +315,7 @@ LL | global_asm!(format!("{{{}}}", 0), const FOO);
|
||||
= note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: asm template must be a string literal
|
||||
--> $DIR/parse-error.rs:136:20
|
||||
--> $DIR/parse-error.rs:129:20
|
||||
|
|
||||
LL | global_asm!("{1}", format!("{{{}}}", 0), const FOO, const BAR);
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
@ -400,7 +332,7 @@ LL | asm!("{}", options(), const foo);
|
||||
| ^^^ non-constant value
|
||||
|
||||
error[E0435]: attempt to use a non-constant value in a constant
|
||||
--> $DIR/parse-error.rs:50:44
|
||||
--> $DIR/parse-error.rs:49:44
|
||||
|
|
||||
LL | let mut foo = 0;
|
||||
| ----------- help: consider using `const` instead of `let`: `const foo`
|
||||
@ -409,7 +341,16 @@ LL | asm!("{}", clobber_abi("C"), const foo);
|
||||
| ^^^ non-constant value
|
||||
|
||||
error[E0435]: attempt to use a non-constant value in a constant
|
||||
--> $DIR/parse-error.rs:57:31
|
||||
--> $DIR/parse-error.rs:52:55
|
||||
|
|
||||
LL | let mut foo = 0;
|
||||
| ----------- help: consider using `const` instead of `let`: `const foo`
|
||||
...
|
||||
LL | asm!("{}", options(), clobber_abi("C"), const foo);
|
||||
| ^^^ non-constant value
|
||||
|
||||
error[E0435]: attempt to use a non-constant value in a constant
|
||||
--> $DIR/parse-error.rs:54:31
|
||||
|
|
||||
LL | let mut foo = 0;
|
||||
| ----------- help: consider using `const` instead of `let`: `const foo`
|
||||
@ -418,7 +359,7 @@ LL | asm!("{a}", a = const foo, a = const bar);
|
||||
| ^^^ non-constant value
|
||||
|
||||
error[E0435]: attempt to use a non-constant value in a constant
|
||||
--> $DIR/parse-error.rs:57:46
|
||||
--> $DIR/parse-error.rs:54:46
|
||||
|
|
||||
LL | let mut bar = 0;
|
||||
| ----------- help: consider using `const` instead of `let`: `const bar`
|
||||
@ -427,7 +368,7 @@ LL | asm!("{a}", a = const foo, a = const bar);
|
||||
| ^^^ non-constant value
|
||||
|
||||
error[E0435]: attempt to use a non-constant value in a constant
|
||||
--> $DIR/parse-error.rs:64:46
|
||||
--> $DIR/parse-error.rs:61:46
|
||||
|
|
||||
LL | let mut bar = 0;
|
||||
| ----------- help: consider using `const` instead of `let`: `const bar`
|
||||
@ -436,7 +377,7 @@ LL | asm!("{a}", in("eax") foo, a = const bar);
|
||||
| ^^^ non-constant value
|
||||
|
||||
error[E0435]: attempt to use a non-constant value in a constant
|
||||
--> $DIR/parse-error.rs:67:46
|
||||
--> $DIR/parse-error.rs:63:46
|
||||
|
|
||||
LL | let mut bar = 0;
|
||||
| ----------- help: consider using `const` instead of `let`: `const bar`
|
||||
@ -445,7 +386,7 @@ LL | asm!("{a}", in("eax") foo, a = const bar);
|
||||
| ^^^ non-constant value
|
||||
|
||||
error[E0435]: attempt to use a non-constant value in a constant
|
||||
--> $DIR/parse-error.rs:70:42
|
||||
--> $DIR/parse-error.rs:65:42
|
||||
|
|
||||
LL | let mut bar = 0;
|
||||
| ----------- help: consider using `const` instead of `let`: `const bar`
|
||||
@ -453,6 +394,6 @@ LL | let mut bar = 0;
|
||||
LL | asm!("{1}", in("eax") foo, const bar);
|
||||
| ^^^ non-constant value
|
||||
|
||||
error: aborting due to 66 previous errors
|
||||
error: aborting due to 59 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0435`.
|
||||
|
Loading…
Reference in New Issue
Block a user