Auto merge of #143267 - matthiaskrgr:rollup-suvzar6, r=matthiaskrgr
Rollup of 8 pull requests Successful merges: - rust-lang/rust#143125 (Disable f16 on Aarch64 without neon for llvm < 20.1.1) - rust-lang/rust#143156 (inherit `#[align]` from trait method prototypes) - rust-lang/rust#143178 (rustdoc default faviocon) - rust-lang/rust#143234 (Replace `ItemCtxt::report_placeholder_type_error` match with a call to `TyCtxt::def_descr`) - rust-lang/rust#143245 (mbe: Add tests and restructure metavariable expressions) - rust-lang/rust#143257 (Upgrade dependencies in run-make-support) - rust-lang/rust#143263 (linkify CodeSuggestion in doc comments) - rust-lang/rust#143264 (fix: Emit suggestion filename if primary diagnostic span is dummy) Failed merges: - rust-lang/rust#143251 (bootstrap: add build.tidy-extra-checks option) r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
44
Cargo.lock
44
Cargo.lock
@@ -8,7 +8,7 @@ version = "0.24.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
|
||||
dependencies = [
|
||||
"gimli",
|
||||
"gimli 0.31.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1483,6 +1483,17 @@ dependencies = [
|
||||
"stable_deref_trait",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gimli"
|
||||
version = "0.32.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "93563d740bc9ef04104f9ed6f86f1e3275c2cdafb95664e26584b9ca807a8ffe"
|
||||
dependencies = [
|
||||
"fallible-iterator",
|
||||
"indexmap",
|
||||
"stable_deref_trait",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "glob"
|
||||
version = "0.3.2"
|
||||
@@ -2568,7 +2579,7 @@ dependencies = [
|
||||
"hashbrown",
|
||||
"indexmap",
|
||||
"memchr",
|
||||
"ruzstd",
|
||||
"ruzstd 0.7.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -2578,9 +2589,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "03fd943161069e1768b4b3d050890ba48730e590f57e56d4aa04e7e090e61b4a"
|
||||
dependencies = [
|
||||
"crc32fast",
|
||||
"flate2",
|
||||
"hashbrown",
|
||||
"indexmap",
|
||||
"memchr",
|
||||
"ruzstd 0.8.1",
|
||||
"wasmparser 0.234.0",
|
||||
]
|
||||
|
||||
@@ -3194,9 +3207,9 @@ version = "0.2.0"
|
||||
dependencies = [
|
||||
"bstr",
|
||||
"build_helper",
|
||||
"gimli",
|
||||
"gimli 0.32.0",
|
||||
"libc",
|
||||
"object 0.36.7",
|
||||
"object 0.37.1",
|
||||
"regex",
|
||||
"serde_json",
|
||||
"similar",
|
||||
@@ -3498,7 +3511,7 @@ name = "rustc_codegen_llvm"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"gimli",
|
||||
"gimli 0.31.1",
|
||||
"itertools",
|
||||
"libc",
|
||||
"measureme",
|
||||
@@ -4473,7 +4486,7 @@ dependencies = [
|
||||
"rustc_target",
|
||||
"rustc_trait_selection",
|
||||
"tracing",
|
||||
"twox-hash",
|
||||
"twox-hash 1.6.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -4857,7 +4870,16 @@ version = "0.7.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fad02996bfc73da3e301efe90b1837be9ed8f4a462b6ed410aa35d00381de89f"
|
||||
dependencies = [
|
||||
"twox-hash",
|
||||
"twox-hash 1.6.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ruzstd"
|
||||
version = "0.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3640bec8aad418d7d03c72ea2de10d5c646a598f9883c7babc160d91e3c1b26c"
|
||||
dependencies = [
|
||||
"twox-hash 2.1.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -5338,7 +5360,7 @@ version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9e9c1e705f82a260173f3eec93f2ff6d7807f23ad5a8cc2e7316a891733ea7a1"
|
||||
dependencies = [
|
||||
"gimli",
|
||||
"gimli 0.31.1",
|
||||
"hashbrown",
|
||||
"object 0.36.7",
|
||||
"tracing",
|
||||
@@ -5580,6 +5602,12 @@ dependencies = [
|
||||
"static_assertions",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "twox-hash"
|
||||
version = "2.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8b907da542cbced5261bd3256de1b3a1bf340a3d37f93425a07362a1d687de56"
|
||||
|
||||
[[package]]
|
||||
name = "type-map"
|
||||
version = "0.5.1"
|
||||
|
||||
@@ -370,10 +370,18 @@ fn update_target_reliable_float_cfg(sess: &Session, cfg: &mut TargetConfig) {
|
||||
let target_env = sess.target.options.env.as_ref();
|
||||
let target_abi = sess.target.options.abi.as_ref();
|
||||
let target_pointer_width = sess.target.pointer_width;
|
||||
let version = get_version();
|
||||
|
||||
cfg.has_reliable_f16 = match (target_arch, target_os) {
|
||||
// Selection failure <https://github.com/llvm/llvm-project/issues/50374>
|
||||
("s390x", _) => false,
|
||||
// LLVM crash without neon <https://github.com/llvm/llvm-project/issues/129394> (now fixed)
|
||||
("aarch64", _)
|
||||
if !cfg.target_features.iter().any(|f| f.as_str() == "neon")
|
||||
&& version < (20, 1, 1) =>
|
||||
{
|
||||
false
|
||||
}
|
||||
// Unsupported <https://github.com/llvm/llvm-project/issues/94434>
|
||||
("arm64ec", _) => false,
|
||||
// MinGW ABI bugs <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115054>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use std::str::FromStr;
|
||||
|
||||
use rustc_abi::ExternAbi;
|
||||
use rustc_abi::{Align, ExternAbi};
|
||||
use rustc_ast::expand::autodiff_attrs::{AutoDiffAttrs, DiffActivity, DiffMode};
|
||||
use rustc_ast::{LitKind, MetaItem, MetaItemInner, attr};
|
||||
use rustc_attr_data_structures::{
|
||||
@@ -395,6 +395,9 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, did: LocalDefId) -> CodegenFnAttrs {
|
||||
codegen_fn_attrs.alignment =
|
||||
Ord::max(codegen_fn_attrs.alignment, tcx.sess.opts.unstable_opts.min_function_alignment);
|
||||
|
||||
// On trait methods, inherit the `#[align]` of the trait's method prototype.
|
||||
codegen_fn_attrs.alignment = Ord::max(codegen_fn_attrs.alignment, tcx.inherited_align(did));
|
||||
|
||||
let inline_span;
|
||||
(codegen_fn_attrs.inline, inline_span) = if let Some((inline_attr, span)) =
|
||||
find_attr!(attrs, AttributeKind::Inline(i, span) => (*i, *span))
|
||||
@@ -549,17 +552,26 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, did: LocalDefId) -> CodegenFnAttrs {
|
||||
codegen_fn_attrs
|
||||
}
|
||||
|
||||
/// If the provided DefId is a method in a trait impl, return the DefId of the method prototype.
|
||||
fn opt_trait_item(tcx: TyCtxt<'_>, def_id: DefId) -> Option<DefId> {
|
||||
let impl_item = tcx.opt_associated_item(def_id)?;
|
||||
match impl_item.container {
|
||||
ty::AssocItemContainer::Impl => impl_item.trait_item_def_id,
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
/// Checks if the provided DefId is a method in a trait impl for a trait which has track_caller
|
||||
/// applied to the method prototype.
|
||||
fn should_inherit_track_caller(tcx: TyCtxt<'_>, def_id: DefId) -> bool {
|
||||
if let Some(impl_item) = tcx.opt_associated_item(def_id)
|
||||
&& let ty::AssocItemContainer::Impl = impl_item.container
|
||||
&& let Some(trait_item) = impl_item.trait_item_def_id
|
||||
{
|
||||
return tcx.codegen_fn_attrs(trait_item).flags.intersects(CodegenFnAttrFlags::TRACK_CALLER);
|
||||
}
|
||||
let Some(trait_item) = opt_trait_item(tcx, def_id) else { return false };
|
||||
tcx.codegen_fn_attrs(trait_item).flags.intersects(CodegenFnAttrFlags::TRACK_CALLER)
|
||||
}
|
||||
|
||||
false
|
||||
/// If the provided DefId is a method in a trait impl, return the value of the `#[align]`
|
||||
/// attribute on the method prototype (if any).
|
||||
fn inherited_align<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId) -> Option<Align> {
|
||||
tcx.codegen_fn_attrs(opt_trait_item(tcx, def_id)?).alignment
|
||||
}
|
||||
|
||||
fn check_link_ordinal(tcx: TyCtxt<'_>, attr: &hir::Attribute) -> Option<u16> {
|
||||
@@ -727,5 +739,6 @@ fn autodiff_attrs(tcx: TyCtxt<'_>, id: DefId) -> Option<AutoDiffAttrs> {
|
||||
}
|
||||
|
||||
pub(crate) fn provide(providers: &mut Providers) {
|
||||
*providers = Providers { codegen_fn_attrs, should_inherit_track_caller, ..*providers };
|
||||
*providers =
|
||||
Providers { codegen_fn_attrs, should_inherit_track_caller, inherited_align, ..*providers };
|
||||
}
|
||||
|
||||
@@ -1005,7 +1005,7 @@ impl<'a, G: EmissionGuarantee> Diag<'a, G> {
|
||||
/// * may look like "to do xyz, use" or "to do xyz, use abc"
|
||||
/// * may contain a name of a function, variable, or type, but not whole expressions
|
||||
///
|
||||
/// See `CodeSuggestion` for more information.
|
||||
/// See [`CodeSuggestion`] for more information.
|
||||
#[rustc_lint_diagnostics]
|
||||
pub fn span_suggestion(
|
||||
&mut self,
|
||||
@@ -1166,7 +1166,7 @@ impl<'a, G: EmissionGuarantee> Diag<'a, G> {
|
||||
/// Prints out a message with a suggested edit of the code. If the suggestion is presented
|
||||
/// inline, it will only show the message and not the suggestion.
|
||||
///
|
||||
/// See `CodeSuggestion` for more information.
|
||||
/// See [`CodeSuggestion`] for more information.
|
||||
#[rustc_lint_diagnostics]
|
||||
pub fn span_suggestion_short(
|
||||
&mut self,
|
||||
|
||||
@@ -2078,7 +2078,9 @@ impl HumanEmitter {
|
||||
// file name, saving in verbosity, but if it *isn't* we do need it, otherwise we're
|
||||
// telling users to make a change but not clarifying *where*.
|
||||
let loc = sm.lookup_char_pos(parts[0].span.lo());
|
||||
if loc.file.name != sm.span_to_filename(span) && loc.file.name.is_real() {
|
||||
if (span.is_dummy() || loc.file.name != sm.span_to_filename(span))
|
||||
&& loc.file.name.is_real()
|
||||
{
|
||||
// --> file.rs:line:col
|
||||
// |
|
||||
let arrow = self.file_start();
|
||||
|
||||
@@ -109,9 +109,6 @@ expand_malformed_feature_attribute =
|
||||
|
||||
expand_meta_var_dif_seq_matchers = {$msg}
|
||||
|
||||
expand_meta_var_expr_unrecognized_var =
|
||||
variable `{$key}` is not recognized in meta-variable expression
|
||||
|
||||
expand_missing_fragment_specifier = missing fragment specifier
|
||||
.note = fragment specifiers must be provided
|
||||
.suggestion_add_fragspec = try adding a specifier here
|
||||
@@ -136,6 +133,9 @@ expand_module_multiple_candidates =
|
||||
expand_must_repeat_once =
|
||||
this must repeat at least once
|
||||
|
||||
expand_mve_unrecognized_var =
|
||||
variable `{$key}` is not recognized in meta-variable expression
|
||||
|
||||
expand_non_inline_modules_in_proc_macro_input_are_unstable =
|
||||
non-inline modules in proc macro input are unstable
|
||||
|
||||
|
||||
@@ -27,14 +27,6 @@ pub(crate) struct CountRepetitionMisplaced {
|
||||
pub span: Span,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(expand_meta_var_expr_unrecognized_var)]
|
||||
pub(crate) struct MetaVarExprUnrecognizedVar {
|
||||
#[primary_span]
|
||||
pub span: Span,
|
||||
pub key: MacroRulesNormalizedIdent,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(expand_var_still_repeating)]
|
||||
pub(crate) struct VarStillRepeating {
|
||||
@@ -499,3 +491,16 @@ pub(crate) struct ProcMacroBackCompat {
|
||||
pub crate_name: String,
|
||||
pub fixed_version: String,
|
||||
}
|
||||
|
||||
pub(crate) use metavar_exprs::*;
|
||||
mod metavar_exprs {
|
||||
use super::*;
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(expand_mve_unrecognized_var)]
|
||||
pub(crate) struct MveUnrecognizedVar {
|
||||
#[primary_span]
|
||||
pub span: Span,
|
||||
pub key: MacroRulesNormalizedIdent,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,46 +47,7 @@ impl MetaVarExpr {
|
||||
check_trailing_token(&mut iter, psess)?;
|
||||
let mut iter = args.iter();
|
||||
let rslt = match ident.as_str() {
|
||||
"concat" => {
|
||||
let mut result = Vec::new();
|
||||
loop {
|
||||
let is_var = try_eat_dollar(&mut iter);
|
||||
let token = parse_token(&mut iter, psess, outer_span)?;
|
||||
let element = if is_var {
|
||||
MetaVarExprConcatElem::Var(parse_ident_from_token(psess, token)?)
|
||||
} else if let TokenKind::Literal(Lit {
|
||||
kind: token::LitKind::Str,
|
||||
symbol,
|
||||
suffix: None,
|
||||
}) = token.kind
|
||||
{
|
||||
MetaVarExprConcatElem::Literal(symbol)
|
||||
} else {
|
||||
match parse_ident_from_token(psess, token) {
|
||||
Err(err) => {
|
||||
err.cancel();
|
||||
return Err(psess
|
||||
.dcx()
|
||||
.struct_span_err(token.span, UNSUPPORTED_CONCAT_ELEM_ERR));
|
||||
}
|
||||
Ok(elem) => MetaVarExprConcatElem::Ident(elem),
|
||||
}
|
||||
};
|
||||
result.push(element);
|
||||
if iter.peek().is_none() {
|
||||
break;
|
||||
}
|
||||
if !try_eat_comma(&mut iter) {
|
||||
return Err(psess.dcx().struct_span_err(outer_span, "expected comma"));
|
||||
}
|
||||
}
|
||||
if result.len() < 2 {
|
||||
return Err(psess
|
||||
.dcx()
|
||||
.struct_span_err(ident.span, "`concat` must have at least two elements"));
|
||||
}
|
||||
MetaVarExpr::Concat(result.into())
|
||||
}
|
||||
"concat" => parse_concat(&mut iter, psess, outer_span, ident.span)?,
|
||||
"count" => parse_count(&mut iter, psess, ident.span)?,
|
||||
"ignore" => {
|
||||
eat_dollar(&mut iter, psess, ident.span)?;
|
||||
@@ -126,20 +87,6 @@ impl MetaVarExpr {
|
||||
}
|
||||
}
|
||||
|
||||
/// Indicates what is placed in a `concat` parameter. For example, literals
|
||||
/// (`${concat("foo", "bar")}`) or adhoc identifiers (`${concat(foo, bar)}`).
|
||||
#[derive(Debug, Decodable, Encodable, PartialEq)]
|
||||
pub(crate) enum MetaVarExprConcatElem {
|
||||
/// Identifier WITHOUT a preceding dollar sign, which means that this identifier should be
|
||||
/// interpreted as a literal.
|
||||
Ident(Ident),
|
||||
/// For example, a number or a string.
|
||||
Literal(Symbol),
|
||||
/// Identifier WITH a preceding dollar sign, which means that this identifier should be
|
||||
/// expanded and interpreted as a variable.
|
||||
Var(Ident),
|
||||
}
|
||||
|
||||
// Checks if there are any remaining tokens. For example, `${ignore(ident ... a b c ...)}`
|
||||
fn check_trailing_token<'psess>(
|
||||
iter: &mut TokenStreamIter<'_>,
|
||||
@@ -156,6 +103,64 @@ fn check_trailing_token<'psess>(
|
||||
}
|
||||
}
|
||||
|
||||
/// Indicates what is placed in a `concat` parameter. For example, literals
|
||||
/// (`${concat("foo", "bar")}`) or adhoc identifiers (`${concat(foo, bar)}`).
|
||||
#[derive(Debug, Decodable, Encodable, PartialEq)]
|
||||
pub(crate) enum MetaVarExprConcatElem {
|
||||
/// Identifier WITHOUT a preceding dollar sign, which means that this identifier should be
|
||||
/// interpreted as a literal.
|
||||
Ident(Ident),
|
||||
/// For example, a number or a string.
|
||||
Literal(Symbol),
|
||||
/// Identifier WITH a preceding dollar sign, which means that this identifier should be
|
||||
/// expanded and interpreted as a variable.
|
||||
Var(Ident),
|
||||
}
|
||||
|
||||
/// Parse a meta-variable `concat` expression: `concat($metavar, ident, ...)`.
|
||||
fn parse_concat<'psess>(
|
||||
iter: &mut TokenStreamIter<'_>,
|
||||
psess: &'psess ParseSess,
|
||||
outer_span: Span,
|
||||
expr_ident_span: Span,
|
||||
) -> PResult<'psess, MetaVarExpr> {
|
||||
let mut result = Vec::new();
|
||||
loop {
|
||||
let is_var = try_eat_dollar(iter);
|
||||
let token = parse_token(iter, psess, outer_span)?;
|
||||
let element = if is_var {
|
||||
MetaVarExprConcatElem::Var(parse_ident_from_token(psess, token)?)
|
||||
} else if let TokenKind::Literal(Lit { kind: token::LitKind::Str, symbol, suffix: None }) =
|
||||
token.kind
|
||||
{
|
||||
MetaVarExprConcatElem::Literal(symbol)
|
||||
} else {
|
||||
match parse_ident_from_token(psess, token) {
|
||||
Err(err) => {
|
||||
err.cancel();
|
||||
return Err(psess
|
||||
.dcx()
|
||||
.struct_span_err(token.span, UNSUPPORTED_CONCAT_ELEM_ERR));
|
||||
}
|
||||
Ok(elem) => MetaVarExprConcatElem::Ident(elem),
|
||||
}
|
||||
};
|
||||
result.push(element);
|
||||
if iter.peek().is_none() {
|
||||
break;
|
||||
}
|
||||
if !try_eat_comma(iter) {
|
||||
return Err(psess.dcx().struct_span_err(outer_span, "expected comma"));
|
||||
}
|
||||
}
|
||||
if result.len() < 2 {
|
||||
return Err(psess
|
||||
.dcx()
|
||||
.struct_span_err(expr_ident_span, "`concat` must have at least two elements"));
|
||||
}
|
||||
Ok(MetaVarExpr::Concat(result.into()))
|
||||
}
|
||||
|
||||
/// Parse a meta-variable `count` expression: `count(ident[, depth])`
|
||||
fn parse_count<'psess>(
|
||||
iter: &mut TokenStreamIter<'_>,
|
||||
|
||||
@@ -17,7 +17,7 @@ use rustc_span::{
|
||||
use smallvec::{SmallVec, smallvec};
|
||||
|
||||
use crate::errors::{
|
||||
CountRepetitionMisplaced, MetaVarExprUnrecognizedVar, MetaVarsDifSeqMatchers, MustRepeatOnce,
|
||||
CountRepetitionMisplaced, MetaVarsDifSeqMatchers, MustRepeatOnce, MveUnrecognizedVar,
|
||||
NoSyntaxVarsExprRepeat, VarStillRepeating,
|
||||
};
|
||||
use crate::mbe::macro_parser::NamedMatch;
|
||||
@@ -879,7 +879,7 @@ where
|
||||
{
|
||||
let span = ident.span;
|
||||
let key = MacroRulesNormalizedIdent::new(ident);
|
||||
interp.get(&key).ok_or_else(|| dcx.create_err(MetaVarExprUnrecognizedVar { span, key }))
|
||||
interp.get(&key).ok_or_else(|| dcx.create_err(MveUnrecognizedVar { span, key }))
|
||||
}
|
||||
|
||||
/// Used by meta-variable expressions when an user input is out of the actual declared bounds. For
|
||||
|
||||
@@ -3141,15 +3141,6 @@ pub enum TraitItemKind<'hir> {
|
||||
/// type.
|
||||
Type(GenericBounds<'hir>, Option<&'hir Ty<'hir>>),
|
||||
}
|
||||
impl TraitItemKind<'_> {
|
||||
pub fn descr(&self) -> &'static str {
|
||||
match self {
|
||||
TraitItemKind::Const(..) => "associated constant",
|
||||
TraitItemKind::Fn(..) => "function",
|
||||
TraitItemKind::Type(..) => "associated type",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// The bodies for items are stored "out of line", in a separate
|
||||
// hashmap in the `Crate`. Here we just record the hir-id of the item
|
||||
@@ -3211,15 +3202,6 @@ pub enum ImplItemKind<'hir> {
|
||||
/// An associated type.
|
||||
Type(&'hir Ty<'hir>),
|
||||
}
|
||||
impl ImplItemKind<'_> {
|
||||
pub fn descr(&self) -> &'static str {
|
||||
match self {
|
||||
ImplItemKind::Const(..) => "associated constant",
|
||||
ImplItemKind::Fn(..) => "function",
|
||||
ImplItemKind::Type(..) => "associated type",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// A constraint on an associated item.
|
||||
///
|
||||
@@ -4545,16 +4527,6 @@ pub enum ForeignItemKind<'hir> {
|
||||
Type,
|
||||
}
|
||||
|
||||
impl ForeignItemKind<'_> {
|
||||
pub fn descr(&self) -> &'static str {
|
||||
match self {
|
||||
ForeignItemKind::Fn(..) => "function",
|
||||
ForeignItemKind::Static(..) => "static variable",
|
||||
ForeignItemKind::Type => "type",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// A variable captured by a closure.
|
||||
#[derive(Debug, Copy, Clone, HashStable_Generic)]
|
||||
pub struct Upvar {
|
||||
|
||||
@@ -277,17 +277,7 @@ impl<'tcx> ItemCtxt<'tcx> {
|
||||
}
|
||||
_ => self.item_def_id,
|
||||
};
|
||||
// FIXME: just invoke `tcx.def_descr` instead of going through the HIR
|
||||
// Can also remove most `descr` methods then.
|
||||
let kind = match self.tcx.hir_node_by_def_id(kind_id) {
|
||||
Node::Item(it) => it.kind.descr(),
|
||||
Node::ImplItem(it) => it.kind.descr(),
|
||||
Node::TraitItem(it) => it.kind.descr(),
|
||||
Node::ForeignItem(it) => it.kind.descr(),
|
||||
Node::OpaqueTy(_) => "opaque type",
|
||||
Node::Synthetic => self.tcx.def_descr(kind_id.into()),
|
||||
node => todo!("{node:#?}"),
|
||||
};
|
||||
let kind = self.tcx.def_descr(kind_id.into());
|
||||
let mut diag = placeholder_type_error_diag(
|
||||
self,
|
||||
generics,
|
||||
|
||||
@@ -266,6 +266,7 @@ trivial! {
|
||||
Option<rustc_target::spec::PanicStrategy>,
|
||||
Option<usize>,
|
||||
Option<rustc_middle::ty::IntrinsicDef>,
|
||||
Option<rustc_abi::Align>,
|
||||
Result<(), rustc_errors::ErrorGuaranteed>,
|
||||
Result<(), rustc_middle::traits::query::NoSolution>,
|
||||
Result<rustc_middle::traits::EvaluationResult, rustc_middle::traits::OverflowError>,
|
||||
|
||||
@@ -67,6 +67,7 @@ use std::mem;
|
||||
use std::path::PathBuf;
|
||||
use std::sync::Arc;
|
||||
|
||||
use rustc_abi::Align;
|
||||
use rustc_arena::TypedArena;
|
||||
use rustc_ast::expand::StrippedCfgItem;
|
||||
use rustc_ast::expand::allocator::AllocatorKind;
|
||||
@@ -1481,6 +1482,10 @@ rustc_queries! {
|
||||
desc { |tcx| "computing should_inherit_track_caller of `{}`", tcx.def_path_str(def_id) }
|
||||
}
|
||||
|
||||
query inherited_align(def_id: DefId) -> Option<Align> {
|
||||
desc { |tcx| "computing inherited_align of `{}`", tcx.def_path_str(def_id) }
|
||||
}
|
||||
|
||||
query lookup_deprecation_entry(def_id: DefId) -> Option<DeprecationEntry> {
|
||||
desc { |tcx| "checking whether `{}` is deprecated", tcx.def_path_str(def_id) }
|
||||
cache_on_disk_if { def_id.is_local() }
|
||||
|
||||
@@ -62,7 +62,7 @@ This form of the `doc` attribute lets you control the favicon of your docs.
|
||||
This will put `<link rel="icon" href="{}">` into your docs, where
|
||||
the string for the attribute goes into the `{}`.
|
||||
|
||||
If you don't use this attribute, there will be no favicon.
|
||||
If you don't use this attribute, a default favicon will be used.
|
||||
|
||||
### `html_logo_url`
|
||||
|
||||
|
||||
@@ -4,12 +4,12 @@ version = "0.2.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
bstr = "1.6.0"
|
||||
object = "0.36.2"
|
||||
similar = "2.5.0"
|
||||
bstr = "1.12"
|
||||
object = "0.37"
|
||||
similar = "2.7"
|
||||
wasmparser = { version = "0.219", default-features = false, features = ["std"] }
|
||||
regex = "1.8" # 1.8 to avoid memchr 2.6.0, as 2.5.0 is pinned in the workspace
|
||||
gimli = "0.31.0"
|
||||
regex = "1.11"
|
||||
gimli = "0.32"
|
||||
build_helper = { path = "../../build_helper" }
|
||||
serde_json = "1.0"
|
||||
libc = "0.2"
|
||||
|
||||
@@ -2846,7 +2846,6 @@ ui/macros/issue-98466.rs
|
||||
ui/macros/issue-99261.rs
|
||||
ui/macros/issue-99265.rs
|
||||
ui/macros/issue-99907.rs
|
||||
ui/macros/rfc-3086-metavar-expr/issue-111904.rs
|
||||
ui/malformed/issue-107423-unused-delim-only-one-no-pair.rs
|
||||
ui/malformed/issue-69341-malformed-derive-inert.rs
|
||||
ui/marker_trait_attr/issue-61651-type-mismatch.rs
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
//@ compile-flags: -C no-prepopulate-passes -Z mir-opt-level=0
|
||||
//@ compile-flags: -C no-prepopulate-passes -Z mir-opt-level=0 -Clink-dead-code
|
||||
|
||||
#![crate_type = "lib"]
|
||||
#![feature(fn_align)]
|
||||
|
||||
// CHECK: align 16
|
||||
#[no_mangle]
|
||||
#[unsafe(no_mangle)]
|
||||
#[align(16)]
|
||||
pub fn fn_align() {}
|
||||
|
||||
@@ -12,12 +12,12 @@ pub struct A;
|
||||
|
||||
impl A {
|
||||
// CHECK: align 16
|
||||
#[no_mangle]
|
||||
#[unsafe(no_mangle)]
|
||||
#[align(16)]
|
||||
pub fn method_align(self) {}
|
||||
|
||||
// CHECK: align 16
|
||||
#[no_mangle]
|
||||
#[unsafe(no_mangle)]
|
||||
#[align(16)]
|
||||
pub fn associated_fn() {}
|
||||
}
|
||||
@@ -25,46 +25,94 @@ impl A {
|
||||
trait T: Sized {
|
||||
fn trait_fn() {}
|
||||
|
||||
// CHECK: align 32
|
||||
#[align(32)]
|
||||
fn trait_method(self) {}
|
||||
|
||||
#[align(8)]
|
||||
fn trait_method_inherit_low(self);
|
||||
|
||||
#[align(32)]
|
||||
fn trait_method_inherit_high(self);
|
||||
|
||||
#[align(32)]
|
||||
fn trait_method_inherit_default(self) {}
|
||||
|
||||
#[align(4)]
|
||||
#[align(128)]
|
||||
#[align(8)]
|
||||
fn inherit_highest(self) {}
|
||||
}
|
||||
|
||||
impl T for A {
|
||||
// CHECK: align 16
|
||||
#[no_mangle]
|
||||
// CHECK-LABEL: trait_fn
|
||||
// CHECK-SAME: align 16
|
||||
#[unsafe(no_mangle)]
|
||||
#[align(16)]
|
||||
fn trait_fn() {}
|
||||
|
||||
// CHECK: align 16
|
||||
#[no_mangle]
|
||||
// CHECK-LABEL: trait_method
|
||||
// CHECK-SAME: align 16
|
||||
#[unsafe(no_mangle)]
|
||||
#[align(16)]
|
||||
fn trait_method(self) {}
|
||||
|
||||
// The prototype's align is ignored because the align here is higher.
|
||||
// CHECK-LABEL: trait_method_inherit_low
|
||||
// CHECK-SAME: align 16
|
||||
#[unsafe(no_mangle)]
|
||||
#[align(16)]
|
||||
fn trait_method_inherit_low(self) {}
|
||||
|
||||
// The prototype's align is used because it is higher.
|
||||
// CHECK-LABEL: trait_method_inherit_high
|
||||
// CHECK-SAME: align 32
|
||||
#[unsafe(no_mangle)]
|
||||
#[align(16)]
|
||||
fn trait_method_inherit_high(self) {}
|
||||
|
||||
// The prototype's align inherited.
|
||||
// CHECK-LABEL: trait_method_inherit_default
|
||||
// CHECK-SAME: align 32
|
||||
#[unsafe(no_mangle)]
|
||||
fn trait_method_inherit_default(self) {}
|
||||
|
||||
// The prototype's highest align inherited.
|
||||
// CHECK-LABEL: inherit_highest
|
||||
// CHECK-SAME: align 128
|
||||
#[unsafe(no_mangle)]
|
||||
#[align(32)]
|
||||
#[align(64)]
|
||||
fn inherit_highest(self) {}
|
||||
}
|
||||
|
||||
impl T for () {}
|
||||
|
||||
pub fn foo() {
|
||||
().trait_method();
|
||||
trait HasDefaultImpl: Sized {
|
||||
// CHECK-LABEL: inherit_from_default_method
|
||||
// CHECK-LABEL: inherit_from_default_method
|
||||
// CHECK-SAME: align 32
|
||||
#[align(32)]
|
||||
fn inherit_from_default_method(self) {}
|
||||
}
|
||||
|
||||
pub struct InstantiateDefaultMethods;
|
||||
|
||||
impl HasDefaultImpl for InstantiateDefaultMethods {}
|
||||
|
||||
// CHECK-LABEL: align_specified_twice_1
|
||||
// CHECK-SAME: align 64
|
||||
#[no_mangle]
|
||||
#[unsafe(no_mangle)]
|
||||
#[align(32)]
|
||||
#[align(64)]
|
||||
pub fn align_specified_twice_1() {}
|
||||
|
||||
// CHECK-LABEL: align_specified_twice_2
|
||||
// CHECK-SAME: align 128
|
||||
#[no_mangle]
|
||||
#[unsafe(no_mangle)]
|
||||
#[align(128)]
|
||||
#[align(32)]
|
||||
pub fn align_specified_twice_2() {}
|
||||
|
||||
// CHECK-LABEL: align_specified_twice_3
|
||||
// CHECK-SAME: align 256
|
||||
#[no_mangle]
|
||||
#[unsafe(no_mangle)]
|
||||
#[align(32)]
|
||||
#[align(256)]
|
||||
pub fn align_specified_twice_3() {}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for constant items
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for constants
|
||||
--> $DIR/invalid_infered_static_and_const.rs:1:24
|
||||
|
|
||||
LL | const FOO: dyn Fn() -> _ = "";
|
||||
| ^ not allowed in type signatures
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for static items
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for statics
|
||||
--> $DIR/invalid_infered_static_and_const.rs:2:25
|
||||
|
|
||||
LL | static BOO: dyn Fn() -> _ = "";
|
||||
|
||||
7
tests/ui/closures/missing-body.rs
Normal file
7
tests/ui/closures/missing-body.rs
Normal file
@@ -0,0 +1,7 @@
|
||||
// Checks that the compiler complains about the missing closure body and does not
|
||||
// crash.
|
||||
// This is a regression test for <https://github.com/rust-lang/rust/issues/143128>.
|
||||
|
||||
fn main() { |b: [str; _]| {}; }
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for closures
|
||||
//~| ERROR the size for values of type `str` cannot be known at compilation time
|
||||
19
tests/ui/closures/missing-body.stderr
Normal file
19
tests/ui/closures/missing-body.stderr
Normal file
@@ -0,0 +1,19 @@
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for closures
|
||||
--> $DIR/missing-body.rs:5:23
|
||||
|
|
||||
LL | fn main() { |b: [str; _]| {}; }
|
||||
| ^ not allowed in type signatures
|
||||
|
||||
error[E0277]: the size for values of type `str` cannot be known at compilation time
|
||||
--> $DIR/missing-body.rs:5:17
|
||||
|
|
||||
LL | fn main() { |b: [str; _]| {}; }
|
||||
| ^^^^^^^^ doesn't have a size known at compile-time
|
||||
|
|
||||
= help: the trait `Sized` is not implemented for `str`
|
||||
= note: slice and array elements must have `Sized` type
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0121, E0277.
|
||||
For more information about an error, try `rustc --explain E0121`.
|
||||
@@ -302,7 +302,7 @@ error[E0121]: the placeholder `_` is not allowed within types on item signatures
|
||||
LL | trait P<F> where F: Fn() -> _ {
|
||||
| ^ not allowed in type signatures
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for associated functions
|
||||
--> $DIR/bad-assoc-ty.rs:88:38
|
||||
|
|
||||
LL | fn foo<F>(_: F) where F: Fn() -> _ {}
|
||||
|
||||
@@ -284,7 +284,7 @@ error[E0121]: the placeholder `_` is not allowed within types on item signatures
|
||||
LL | trait P<F> where F: Fn() -> _ {
|
||||
| ^ not allowed in type signatures
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for associated functions
|
||||
--> $DIR/bad-assoc-ty.rs:88:38
|
||||
|
|
||||
LL | fn foo<F>(_: F) where F: Fn() -> _ {}
|
||||
|
||||
@@ -86,7 +86,7 @@ trait P<F> where F: Fn() -> _ {
|
||||
|
||||
trait Q {
|
||||
fn foo<F>(_: F) where F: Fn() -> _ {}
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for functions
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for associated functions
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
||||
@@ -7,7 +7,7 @@ trait Foo<T>: Sized {
|
||||
|
||||
impl Foo<usize> for () {
|
||||
fn bar(i: i32, t: usize, s: &()) -> (usize, i32) {
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for functions
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for associated functions
|
||||
//~| ERROR type annotations needed
|
||||
(1, 2)
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ trait Foo<T>: Sized {
|
||||
|
||||
impl Foo<usize> for () {
|
||||
fn bar(i: _, t: _, s: _) -> _ {
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for functions
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for associated functions
|
||||
//~| ERROR type annotations needed
|
||||
(1, 2)
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for associated functions
|
||||
--> $DIR/replace-impl-infer-ty-from-trait.rs:9:15
|
||||
|
|
||||
LL | fn bar(i: _, t: _, s: _) -> _ {
|
||||
|
||||
@@ -29,7 +29,7 @@ LL | fn fold<T>(&self, _: T, &self._) {}
|
||||
= note: for more information, see issue #41686 <https://github.com/rust-lang/rust/issues/41686>
|
||||
= note: `#[warn(anonymous_parameters)]` on by default
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for methods
|
||||
--> $DIR/error-recovery-mismatch.rs:11:35
|
||||
|
|
||||
LL | fn fold<T>(&self, _: T, &self._) {}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
error[E0425]: cannot find value `abcdef` in this scope
|
||||
--> $DIR/hygiene.rs:5:10
|
||||
--> $DIR/concat-hygiene.rs:5:10
|
||||
|
|
||||
LL | ${concat($lhs, $rhs)}
|
||||
| ^^^^^^^^^^^^^^^^^^^^ not found in this scope
|
||||
@@ -1,47 +1,47 @@
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/raw-identifiers.rs:28:22
|
||||
--> $DIR/concat-raw-identifiers.rs:28:22
|
||||
|
|
||||
LL | let ${concat(r#abc, abc)}: () = ();
|
||||
| ^^^^^
|
||||
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/raw-identifiers.rs:32:27
|
||||
--> $DIR/concat-raw-identifiers.rs:32:27
|
||||
|
|
||||
LL | let ${concat(abc, r#abc)}: () = ();
|
||||
| ^^^^^
|
||||
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/raw-identifiers.rs:35:22
|
||||
--> $DIR/concat-raw-identifiers.rs:35:22
|
||||
|
|
||||
LL | let ${concat(r#abc, r#abc)}: () = ();
|
||||
| ^^^^^
|
||||
|
||||
error: `${concat(..)}` currently does not support raw identifiers
|
||||
--> $DIR/raw-identifiers.rs:5:28
|
||||
--> $DIR/concat-raw-identifiers.rs:5:28
|
||||
|
|
||||
LL | let ${concat(abc, $rhs)}: () = ();
|
||||
| ^^^
|
||||
|
||||
error: `${concat(..)}` currently does not support raw identifiers
|
||||
--> $DIR/raw-identifiers.rs:12:23
|
||||
--> $DIR/concat-raw-identifiers.rs:12:23
|
||||
|
|
||||
LL | let ${concat($lhs, abc)}: () = ();
|
||||
| ^^^
|
||||
|
||||
error: `${concat(..)}` currently does not support raw identifiers
|
||||
--> $DIR/raw-identifiers.rs:19:23
|
||||
--> $DIR/concat-raw-identifiers.rs:19:23
|
||||
|
|
||||
LL | let ${concat($lhs, $rhs)}: () = ();
|
||||
| ^^^
|
||||
|
||||
error: `${concat(..)}` currently does not support raw identifiers
|
||||
--> $DIR/raw-identifiers.rs:19:29
|
||||
--> $DIR/concat-raw-identifiers.rs:19:29
|
||||
|
|
||||
LL | let ${concat($lhs, $rhs)}: () = ();
|
||||
| ^^^
|
||||
|
||||
error: `${concat(..)}` currently does not support raw identifiers
|
||||
--> $DIR/raw-identifiers.rs:19:23
|
||||
--> $DIR/concat-raw-identifiers.rs:19:23
|
||||
|
|
||||
LL | let ${concat($lhs, $rhs)}: () = ();
|
||||
| ^^^
|
||||
@@ -49,31 +49,31 @@ LL | let ${concat($lhs, $rhs)}: () = ();
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: `${concat(..)}` currently does not support raw identifiers
|
||||
--> $DIR/raw-identifiers.rs:42:28
|
||||
--> $DIR/concat-raw-identifiers.rs:42:28
|
||||
|
|
||||
LL | let ${concat(abc, $rhs)}: () = ();
|
||||
| ^^^
|
||||
|
||||
error: `${concat(..)}` currently does not support raw identifiers
|
||||
--> $DIR/raw-identifiers.rs:49:23
|
||||
--> $DIR/concat-raw-identifiers.rs:49:23
|
||||
|
|
||||
LL | let ${concat($lhs, abc)}: () = ();
|
||||
| ^^^
|
||||
|
||||
error: `${concat(..)}` currently does not support raw identifiers
|
||||
--> $DIR/raw-identifiers.rs:56:23
|
||||
--> $DIR/concat-raw-identifiers.rs:56:23
|
||||
|
|
||||
LL | let ${concat($lhs, $rhs)}: () = ();
|
||||
| ^^^
|
||||
|
||||
error: `${concat(..)}` currently does not support raw identifiers
|
||||
--> $DIR/raw-identifiers.rs:56:29
|
||||
--> $DIR/concat-raw-identifiers.rs:56:29
|
||||
|
|
||||
LL | let ${concat($lhs, $rhs)}: () = ();
|
||||
| ^^^
|
||||
|
||||
error: `${concat(..)}` currently does not support raw identifiers
|
||||
--> $DIR/raw-identifiers.rs:56:23
|
||||
--> $DIR/concat-raw-identifiers.rs:56:23
|
||||
|
|
||||
LL | let ${concat($lhs, $rhs)}: () = ();
|
||||
| ^^^
|
||||
@@ -81,7 +81,7 @@ LL | let ${concat($lhs, $rhs)}: () = ();
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: expected pattern, found `$`
|
||||
--> $DIR/raw-identifiers.rs:28:13
|
||||
--> $DIR/concat-raw-identifiers.rs:28:13
|
||||
|
|
||||
LL | let ${concat(r#abc, abc)}: () = ();
|
||||
| ^ expected pattern
|
||||
@@ -1,17 +1,17 @@
|
||||
error: invalid syntax
|
||||
--> $DIR/repetitions.rs:14:20
|
||||
--> $DIR/concat-repetitions.rs:14:20
|
||||
|
|
||||
LL | const ${concat($a, Z)}: i32 = 3;
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: invalid syntax
|
||||
--> $DIR/repetitions.rs:22:17
|
||||
--> $DIR/concat-repetitions.rs:22:17
|
||||
|
|
||||
LL | read::<${concat($t, $en)}>()
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: invalid syntax
|
||||
--> $DIR/repetitions.rs:22:17
|
||||
--> $DIR/concat-repetitions.rs:22:17
|
||||
|
|
||||
LL | read::<${concat($t, $en)}>()
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
33
tests/ui/macros/metavar-expressions/concat-trace-errors.rs
Normal file
33
tests/ui/macros/metavar-expressions/concat-trace-errors.rs
Normal file
@@ -0,0 +1,33 @@
|
||||
// Our diagnostics should be able to point to a specific input that caused an invalid
|
||||
// identifier.
|
||||
|
||||
#![feature(macro_metavar_expr_concat)]
|
||||
|
||||
// See what we can do without expanding anything
|
||||
macro_rules! pre_expansion {
|
||||
($a:ident) => {
|
||||
${concat("hi", " bye ")};
|
||||
${concat("hi", "-", "bye")};
|
||||
${concat($a, "-")};
|
||||
}
|
||||
}
|
||||
|
||||
macro_rules! post_expansion {
|
||||
($a:literal) => {
|
||||
const _: () = ${concat("hi", $a, "bye")};
|
||||
//~^ ERROR is not generating a valid identifier
|
||||
}
|
||||
}
|
||||
|
||||
post_expansion!("!");
|
||||
|
||||
macro_rules! post_expansion_many {
|
||||
($a:ident, $b:ident, $c:ident, $d:literal, $e:ident) => {
|
||||
const _: () = ${concat($a, $b, $c, $d, $e)};
|
||||
//~^ ERROR is not generating a valid identifier
|
||||
}
|
||||
}
|
||||
|
||||
post_expansion_many!(a, b, c, ".d", e);
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,24 @@
|
||||
error: `${concat(..)}` is not generating a valid identifier
|
||||
--> $DIR/concat-trace-errors.rs:17:24
|
||||
|
|
||||
LL | const _: () = ${concat("hi", $a, "bye")};
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
...
|
||||
LL | post_expansion!("!");
|
||||
| -------------------- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `post_expansion` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: `${concat(..)}` is not generating a valid identifier
|
||||
--> $DIR/concat-trace-errors.rs:26:24
|
||||
|
|
||||
LL | const _: () = ${concat($a, $b, $c, $d, $e)};
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
...
|
||||
LL | post_expansion_many!(a, b, c, ".d", e);
|
||||
| -------------------------------------- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `post_expansion_many` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
//@ edition: 2021
|
||||
|
||||
#![feature(macro_metavar_expr_concat)]
|
||||
|
||||
macro_rules! wrong_concat_declarations {
|
||||
macro_rules! syntax_errors {
|
||||
($ex:expr) => {
|
||||
${concat()}
|
||||
//~^ ERROR expected identifier
|
||||
@@ -90,11 +92,31 @@ macro_rules! unsupported_literals {
|
||||
//~| ERROR expected pattern
|
||||
let ${concat(_a, 1)}: () = ();
|
||||
//~^ ERROR expected identifier or string literal
|
||||
let ${concat(_a, 1.5)}: () = ();
|
||||
//~^ ERROR expected identifier or string literal
|
||||
let ${concat(_a, c"hi")}: () = ();
|
||||
//~^ ERROR expected identifier or string literal
|
||||
let ${concat(_a, b"hi")}: () = ();
|
||||
//~^ ERROR expected identifier or string literal
|
||||
let ${concat(_a, b'b')}: () = ();
|
||||
//~^ ERROR expected identifier or string literal
|
||||
let ${concat(_a, b'b')}: () = ();
|
||||
//~^ ERROR expected identifier or string literal
|
||||
|
||||
let ${concat($ident, 'b')}: () = ();
|
||||
//~^ ERROR expected identifier or string literal
|
||||
let ${concat($ident, 1)}: () = ();
|
||||
//~^ ERROR expected identifier or string literal
|
||||
let ${concat($ident, 1.5)}: () = ();
|
||||
//~^ ERROR expected identifier or string literal
|
||||
let ${concat($ident, c"hi")}: () = ();
|
||||
//~^ ERROR expected identifier or string literal
|
||||
let ${concat($ident, b"hi")}: () = ();
|
||||
//~^ ERROR expected identifier or string literal
|
||||
let ${concat($ident, b'b')}: () = ();
|
||||
//~^ ERROR expected identifier or string literal
|
||||
let ${concat($ident, b'b')}: () = ();
|
||||
//~^ ERROR expected identifier or string literal
|
||||
}};
|
||||
}
|
||||
|
||||
@@ -132,7 +154,7 @@ macro_rules! bad_tt_literal {
|
||||
}
|
||||
|
||||
fn main() {
|
||||
wrong_concat_declarations!(1);
|
||||
syntax_errors!(1);
|
||||
|
||||
dollar_sign_without_referenced_ident!(VAR);
|
||||
|
||||
@@ -1,71 +1,131 @@
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/syntax-errors.rs:5:10
|
||||
--> $DIR/concat-usage-errors.rs:7:10
|
||||
|
|
||||
LL | ${concat()}
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: `concat` must have at least two elements
|
||||
--> $DIR/syntax-errors.rs:8:11
|
||||
--> $DIR/concat-usage-errors.rs:10:11
|
||||
|
|
||||
LL | ${concat(aaaa)}
|
||||
| ^^^^^^
|
||||
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/syntax-errors.rs:11:10
|
||||
--> $DIR/concat-usage-errors.rs:13:10
|
||||
|
|
||||
LL | ${concat(aaaa,)}
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: expected comma
|
||||
--> $DIR/syntax-errors.rs:16:10
|
||||
--> $DIR/concat-usage-errors.rs:18:10
|
||||
|
|
||||
LL | ${concat(aaaa aaaa)}
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: `concat` must have at least two elements
|
||||
--> $DIR/syntax-errors.rs:19:11
|
||||
--> $DIR/concat-usage-errors.rs:21:11
|
||||
|
|
||||
LL | ${concat($ex)}
|
||||
| ^^^^^^
|
||||
|
||||
error: expected comma
|
||||
--> $DIR/syntax-errors.rs:25:10
|
||||
--> $DIR/concat-usage-errors.rs:27:10
|
||||
|
|
||||
LL | ${concat($ex, aaaa 123)}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/syntax-errors.rs:28:10
|
||||
--> $DIR/concat-usage-errors.rs:30:10
|
||||
|
|
||||
LL | ${concat($ex, aaaa,)}
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/syntax-errors.rs:88:26
|
||||
--> $DIR/concat-usage-errors.rs:90:26
|
||||
|
|
||||
LL | let ${concat(_a, 'b')}: () = ();
|
||||
| ^^^
|
||||
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/syntax-errors.rs:91:26
|
||||
--> $DIR/concat-usage-errors.rs:93:26
|
||||
|
|
||||
LL | let ${concat(_a, 1)}: () = ();
|
||||
| ^
|
||||
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/syntax-errors.rs:94:30
|
||||
--> $DIR/concat-usage-errors.rs:95:26
|
||||
|
|
||||
LL | let ${concat(_a, 1.5)}: () = ();
|
||||
| ^^^
|
||||
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/concat-usage-errors.rs:97:26
|
||||
|
|
||||
LL | let ${concat(_a, c"hi")}: () = ();
|
||||
| ^^^^^
|
||||
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/concat-usage-errors.rs:99:26
|
||||
|
|
||||
LL | let ${concat(_a, b"hi")}: () = ();
|
||||
| ^^^^^
|
||||
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/concat-usage-errors.rs:101:26
|
||||
|
|
||||
LL | let ${concat(_a, b'b')}: () = ();
|
||||
| ^^^^
|
||||
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/concat-usage-errors.rs:103:26
|
||||
|
|
||||
LL | let ${concat(_a, b'b')}: () = ();
|
||||
| ^^^^
|
||||
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/concat-usage-errors.rs:106:30
|
||||
|
|
||||
LL | let ${concat($ident, 'b')}: () = ();
|
||||
| ^^^
|
||||
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/syntax-errors.rs:96:30
|
||||
--> $DIR/concat-usage-errors.rs:108:30
|
||||
|
|
||||
LL | let ${concat($ident, 1)}: () = ();
|
||||
| ^
|
||||
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/concat-usage-errors.rs:110:30
|
||||
|
|
||||
LL | let ${concat($ident, 1.5)}: () = ();
|
||||
| ^^^
|
||||
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/concat-usage-errors.rs:112:30
|
||||
|
|
||||
LL | let ${concat($ident, c"hi")}: () = ();
|
||||
| ^^^^^
|
||||
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/concat-usage-errors.rs:114:30
|
||||
|
|
||||
LL | let ${concat($ident, b"hi")}: () = ();
|
||||
| ^^^^^
|
||||
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/concat-usage-errors.rs:116:30
|
||||
|
|
||||
LL | let ${concat($ident, b'b')}: () = ();
|
||||
| ^^^^
|
||||
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/concat-usage-errors.rs:118:30
|
||||
|
|
||||
LL | let ${concat($ident, b'b')}: () = ();
|
||||
| ^^^^
|
||||
|
||||
error: metavariables of `${concat(..)}` must be of type `ident`, `literal` or `tt`
|
||||
--> $DIR/syntax-errors.rs:22:19
|
||||
--> $DIR/concat-usage-errors.rs:24:19
|
||||
|
|
||||
LL | ${concat($ex, aaaa)}
|
||||
| ^^
|
||||
@@ -73,13 +133,13 @@ LL | ${concat($ex, aaaa)}
|
||||
= note: currently only string literals are supported
|
||||
|
||||
error: variable `foo` is not recognized in meta-variable expression
|
||||
--> $DIR/syntax-errors.rs:35:30
|
||||
--> $DIR/concat-usage-errors.rs:37:30
|
||||
|
|
||||
LL | const ${concat(FOO, $foo)}: i32 = 2;
|
||||
| ^^^
|
||||
|
||||
error: `${concat(..)}` is not generating a valid identifier
|
||||
--> $DIR/syntax-errors.rs:42:14
|
||||
--> $DIR/concat-usage-errors.rs:44:14
|
||||
|
|
||||
LL | let ${concat("1", $ident)}: () = ();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -90,7 +150,7 @@ LL | starting_number!(_abc);
|
||||
= note: this error originates in the macro `starting_number` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: `${concat(..)}` is not generating a valid identifier
|
||||
--> $DIR/syntax-errors.rs:55:14
|
||||
--> $DIR/concat-usage-errors.rs:57:14
|
||||
|
|
||||
LL | let ${concat("\u{00BD}", $ident)}: () = ();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -101,7 +161,7 @@ LL | starting_invalid_unicode!(_abc);
|
||||
= note: this error originates in the macro `starting_invalid_unicode` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: `${concat(..)}` is not generating a valid identifier
|
||||
--> $DIR/syntax-errors.rs:74:14
|
||||
--> $DIR/concat-usage-errors.rs:76:14
|
||||
|
|
||||
LL | let ${concat($ident, "\u{00BD}")}: () = ();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -112,7 +172,7 @@ LL | ending_invalid_unicode!(_abc);
|
||||
= note: this error originates in the macro `ending_invalid_unicode` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: expected pattern, found `$`
|
||||
--> $DIR/syntax-errors.rs:88:13
|
||||
--> $DIR/concat-usage-errors.rs:90:13
|
||||
|
|
||||
LL | let ${concat(_a, 'b')}: () = ();
|
||||
| ^ expected pattern
|
||||
@@ -123,7 +183,7 @@ LL | unsupported_literals!(_abc);
|
||||
= note: this error originates in the macro `unsupported_literals` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: `${concat(..)}` is not generating a valid identifier
|
||||
--> $DIR/syntax-errors.rs:81:14
|
||||
--> $DIR/concat-usage-errors.rs:83:14
|
||||
|
|
||||
LL | let ${concat("", "")}: () = ();
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
@@ -134,7 +194,7 @@ LL | empty!();
|
||||
= note: this error originates in the macro `empty` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: `${concat(..)}` is not generating a valid identifier
|
||||
--> $DIR/syntax-errors.rs:103:16
|
||||
--> $DIR/concat-usage-errors.rs:125:16
|
||||
|
|
||||
LL | const ${concat(_foo, $literal)}: () = ();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -145,7 +205,7 @@ LL | bad_literal_string!("\u{00BD}");
|
||||
= note: this error originates in the macro `bad_literal_string` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: `${concat(..)}` is not generating a valid identifier
|
||||
--> $DIR/syntax-errors.rs:103:16
|
||||
--> $DIR/concat-usage-errors.rs:125:16
|
||||
|
|
||||
LL | const ${concat(_foo, $literal)}: () = ();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -156,7 +216,7 @@ LL | bad_literal_string!("\x41");
|
||||
= note: this error originates in the macro `bad_literal_string` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: `${concat(..)}` is not generating a valid identifier
|
||||
--> $DIR/syntax-errors.rs:103:16
|
||||
--> $DIR/concat-usage-errors.rs:125:16
|
||||
|
|
||||
LL | const ${concat(_foo, $literal)}: () = ();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -167,7 +227,7 @@ LL | bad_literal_string!("🤷");
|
||||
= note: this error originates in the macro `bad_literal_string` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: `${concat(..)}` is not generating a valid identifier
|
||||
--> $DIR/syntax-errors.rs:103:16
|
||||
--> $DIR/concat-usage-errors.rs:125:16
|
||||
|
|
||||
LL | const ${concat(_foo, $literal)}: () = ();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -178,7 +238,7 @@ LL | bad_literal_string!("d[-_-]b");
|
||||
= note: this error originates in the macro `bad_literal_string` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: `${concat(..)}` is not generating a valid identifier
|
||||
--> $DIR/syntax-errors.rs:103:16
|
||||
--> $DIR/concat-usage-errors.rs:125:16
|
||||
|
|
||||
LL | const ${concat(_foo, $literal)}: () = ();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -189,7 +249,7 @@ LL | bad_literal_string!("-1");
|
||||
= note: this error originates in the macro `bad_literal_string` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: `${concat(..)}` is not generating a valid identifier
|
||||
--> $DIR/syntax-errors.rs:103:16
|
||||
--> $DIR/concat-usage-errors.rs:125:16
|
||||
|
|
||||
LL | const ${concat(_foo, $literal)}: () = ();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -200,7 +260,7 @@ LL | bad_literal_string!("1.0");
|
||||
= note: this error originates in the macro `bad_literal_string` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: `${concat(..)}` is not generating a valid identifier
|
||||
--> $DIR/syntax-errors.rs:103:16
|
||||
--> $DIR/concat-usage-errors.rs:125:16
|
||||
|
|
||||
LL | const ${concat(_foo, $literal)}: () = ();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -211,7 +271,7 @@ LL | bad_literal_string!("'1'");
|
||||
= note: this error originates in the macro `bad_literal_string` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: metavariables of `${concat(..)}` must be of type `ident`, `literal` or `tt`
|
||||
--> $DIR/syntax-errors.rs:116:31
|
||||
--> $DIR/concat-usage-errors.rs:138:31
|
||||
|
|
||||
LL | const ${concat(_foo, $literal)}: () = ();
|
||||
| ^^^^^^^
|
||||
@@ -219,7 +279,7 @@ LL | const ${concat(_foo, $literal)}: () = ();
|
||||
= note: currently only string literals are supported
|
||||
|
||||
error: metavariables of `${concat(..)}` must be of type `ident`, `literal` or `tt`
|
||||
--> $DIR/syntax-errors.rs:116:31
|
||||
--> $DIR/concat-usage-errors.rs:138:31
|
||||
|
|
||||
LL | const ${concat(_foo, $literal)}: () = ();
|
||||
| ^^^^^^^
|
||||
@@ -228,7 +288,7 @@ LL | const ${concat(_foo, $literal)}: () = ();
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: metavariables of `${concat(..)}` must be of type `ident`, `literal` or `tt`
|
||||
--> $DIR/syntax-errors.rs:116:31
|
||||
--> $DIR/concat-usage-errors.rs:138:31
|
||||
|
|
||||
LL | const ${concat(_foo, $literal)}: () = ();
|
||||
| ^^^^^^^
|
||||
@@ -237,7 +297,7 @@ LL | const ${concat(_foo, $literal)}: () = ();
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: metavariables of `${concat(..)}` must be of type `ident`, `literal` or `tt`
|
||||
--> $DIR/syntax-errors.rs:116:31
|
||||
--> $DIR/concat-usage-errors.rs:138:31
|
||||
|
|
||||
LL | const ${concat(_foo, $literal)}: () = ();
|
||||
| ^^^^^^^
|
||||
@@ -246,7 +306,7 @@ LL | const ${concat(_foo, $literal)}: () = ();
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: metavariables of `${concat(..)}` must be of type `ident`, `literal` or `tt`
|
||||
--> $DIR/syntax-errors.rs:116:31
|
||||
--> $DIR/concat-usage-errors.rs:138:31
|
||||
|
|
||||
LL | const ${concat(_foo, $literal)}: () = ();
|
||||
| ^^^^^^^
|
||||
@@ -255,7 +315,7 @@ LL | const ${concat(_foo, $literal)}: () = ();
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: metavariables of `${concat(..)}` must be of type `ident`, `literal` or `tt`
|
||||
--> $DIR/syntax-errors.rs:127:31
|
||||
--> $DIR/concat-usage-errors.rs:149:31
|
||||
|
|
||||
LL | const ${concat(_foo, $tt)}: () = ();
|
||||
| ^^
|
||||
@@ -263,7 +323,7 @@ LL | const ${concat(_foo, $tt)}: () = ();
|
||||
= note: currently only string literals are supported
|
||||
|
||||
error: metavariables of `${concat(..)}` must be of type `ident`, `literal` or `tt`
|
||||
--> $DIR/syntax-errors.rs:127:31
|
||||
--> $DIR/concat-usage-errors.rs:149:31
|
||||
|
|
||||
LL | const ${concat(_foo, $tt)}: () = ();
|
||||
| ^^
|
||||
@@ -272,7 +332,7 @@ LL | const ${concat(_foo, $tt)}: () = ();
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: metavariables of `${concat(..)}` must be of type `ident`, `literal` or `tt`
|
||||
--> $DIR/syntax-errors.rs:127:31
|
||||
--> $DIR/concat-usage-errors.rs:149:31
|
||||
|
|
||||
LL | const ${concat(_foo, $tt)}: () = ();
|
||||
| ^^
|
||||
@@ -280,5 +340,5 @@ LL | const ${concat(_foo, $tt)}: () = ();
|
||||
= note: currently only string literals are supported
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: aborting due to 33 previous errors
|
||||
error: aborting due to 43 previous errors
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// Issue: https://github.com/rust-lang/rust/issues/111904
|
||||
// Ensure that a trailing `,` is not interpreted as a `0`.
|
||||
|
||||
#![feature(macro_metavar_expr)]
|
||||
|
||||
macro_rules! foo {
|
||||
@@ -10,5 +13,4 @@ fn test() {
|
||||
foo!(a, a; b, b);
|
||||
}
|
||||
|
||||
fn main() {
|
||||
}
|
||||
fn main() {}
|
||||
@@ -1,11 +1,11 @@
|
||||
error: `count` followed by a comma must have an associated index indicating its depth
|
||||
--> $DIR/issue-111904.rs:4:37
|
||||
--> $DIR/count-empty-index-arg.rs:7:37
|
||||
|
|
||||
LL | ( $( $($t:ident),* );* ) => { ${count($t,)} }
|
||||
| ^^^^^
|
||||
|
||||
error: expected expression, found `$`
|
||||
--> $DIR/issue-111904.rs:4:35
|
||||
--> $DIR/count-empty-index-arg.rs:7:35
|
||||
|
|
||||
LL | ( $( $($t:ident),* );* ) => { ${count($t,)} }
|
||||
| ^ expected expression
|
||||
117
tests/ui/macros/metavar-expressions/syntax-errors.rs
Normal file
117
tests/ui/macros/metavar-expressions/syntax-errors.rs
Normal file
@@ -0,0 +1,117 @@
|
||||
// General syntax errors that apply to all matavariable expressions
|
||||
//
|
||||
// We don't invoke the macros here to ensure code gets rejected at the definition rather than
|
||||
// only when expanded.
|
||||
|
||||
#![feature(macro_metavar_expr)]
|
||||
|
||||
macro_rules! dollar_dollar_in_the_lhs {
|
||||
( $$ $a:ident ) => {
|
||||
//~^ ERROR unexpected token: $
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! metavar_in_the_lhs {
|
||||
( ${ len() } ) => {
|
||||
//~^ ERROR unexpected token: {
|
||||
//~| ERROR expected one of: `*`, `+`, or `?`
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! metavar_token_without_ident {
|
||||
( $( $i:ident ),* ) => { ${ ignore() } };
|
||||
//~^ ERROR meta-variable expressions must be referenced using a dollar sign
|
||||
}
|
||||
|
||||
macro_rules! metavar_with_literal_suffix {
|
||||
( $( $i:ident ),* ) => { ${ index(1u32) } };
|
||||
//~^ ERROR only unsuffixes integer literals are supported in meta-variable expressions
|
||||
}
|
||||
|
||||
macro_rules! mve_without_parens {
|
||||
( $( $i:ident ),* ) => { ${ count } };
|
||||
//~^ ERROR meta-variable expression parameter must be wrapped in parentheses
|
||||
}
|
||||
|
||||
#[rustfmt::skip]
|
||||
macro_rules! empty_expression {
|
||||
() => { ${} };
|
||||
//~^ ERROR expected identifier or string literal
|
||||
}
|
||||
|
||||
#[rustfmt::skip]
|
||||
macro_rules! open_brackets_with_lit {
|
||||
() => { ${ "hi" } };
|
||||
//~^ ERROR expected identifier
|
||||
}
|
||||
|
||||
macro_rules! mve_wrong_delim {
|
||||
( $( $i:ident ),* ) => { ${ count{i} } };
|
||||
//~^ ERROR meta-variable expression parameter must be wrapped in parentheses
|
||||
}
|
||||
|
||||
macro_rules! invalid_metavar {
|
||||
() => { ${ignore($123)} }
|
||||
//~^ ERROR expected identifier, found `123`
|
||||
}
|
||||
|
||||
#[rustfmt::skip]
|
||||
macro_rules! open_brackets_with_group {
|
||||
( $( $i:ident ),* ) => { ${ {} } };
|
||||
//~^ ERROR expected identifier
|
||||
}
|
||||
|
||||
macro_rules! extra_garbage_after_metavar {
|
||||
( $( $i:ident ),* ) => {
|
||||
${count() a b c}
|
||||
//~^ ERROR unexpected token: a
|
||||
${count($i a b c)}
|
||||
//~^ ERROR unexpected token: a
|
||||
${count($i, 1 a b c)}
|
||||
//~^ ERROR unexpected token: a
|
||||
${count($i) a b c}
|
||||
//~^ ERROR unexpected token: a
|
||||
|
||||
${ignore($i) a b c}
|
||||
//~^ ERROR unexpected token: a
|
||||
${ignore($i a b c)}
|
||||
//~^ ERROR unexpected token: a
|
||||
|
||||
${index() a b c}
|
||||
//~^ ERROR unexpected token: a
|
||||
${index(1 a b c)}
|
||||
//~^ ERROR unexpected token: a
|
||||
|
||||
${index() a b c}
|
||||
//~^ ERROR unexpected token: a
|
||||
${index(1 a b c)}
|
||||
//~^ ERROR unexpected token: a
|
||||
};
|
||||
}
|
||||
|
||||
const IDX: usize = 1;
|
||||
macro_rules! metavar_depth_is_not_literal {
|
||||
( $( $i:ident ),* ) => { ${ index(IDX) } };
|
||||
//~^ ERROR meta-variable expression depth must be a literal
|
||||
}
|
||||
|
||||
macro_rules! unknown_count_ident {
|
||||
( $( $i:ident )* ) => {
|
||||
${count(foo)}
|
||||
//~^ ERROR meta-variable expressions must be referenced using a dollar sign
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! unknown_ignore_ident {
|
||||
( $( $i:ident )* ) => {
|
||||
${ignore(bar)}
|
||||
//~^ ERROR meta-variable expressions must be referenced using a dollar sign
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! unknown_metavar {
|
||||
( $( $i:ident ),* ) => { ${ aaaaaaaaaaaaaa(i) } };
|
||||
//~^ ERROR unrecognized meta-variable expression
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
224
tests/ui/macros/metavar-expressions/syntax-errors.stderr
Normal file
224
tests/ui/macros/metavar-expressions/syntax-errors.stderr
Normal file
@@ -0,0 +1,224 @@
|
||||
error: unexpected token: $
|
||||
--> $DIR/syntax-errors.rs:9:8
|
||||
|
|
||||
LL | ( $$ $a:ident ) => {
|
||||
| ^
|
||||
|
||||
note: `$$` and meta-variable expressions are not allowed inside macro parameter definitions
|
||||
--> $DIR/syntax-errors.rs:9:8
|
||||
|
|
||||
LL | ( $$ $a:ident ) => {
|
||||
| ^
|
||||
|
||||
error: unexpected token: {
|
||||
--> $DIR/syntax-errors.rs:15:8
|
||||
|
|
||||
LL | ( ${ len() } ) => {
|
||||
| ^^^^^^^^^
|
||||
|
||||
note: `$$` and meta-variable expressions are not allowed inside macro parameter definitions
|
||||
--> $DIR/syntax-errors.rs:15:8
|
||||
|
|
||||
LL | ( ${ len() } ) => {
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: expected one of: `*`, `+`, or `?`
|
||||
--> $DIR/syntax-errors.rs:15:8
|
||||
|
|
||||
LL | ( ${ len() } ) => {
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: meta-variables within meta-variable expressions must be referenced using a dollar sign
|
||||
--> $DIR/syntax-errors.rs:22:33
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { ${ ignore() } };
|
||||
| ^^^^^^
|
||||
|
||||
error: only unsuffixes integer literals are supported in meta-variable expressions
|
||||
--> $DIR/syntax-errors.rs:27:33
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { ${ index(1u32) } };
|
||||
| ^^^^^
|
||||
|
||||
error: meta-variable expression parameter must be wrapped in parentheses
|
||||
--> $DIR/syntax-errors.rs:32:33
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { ${ count } };
|
||||
| ^^^^^
|
||||
|
||||
error: meta-variable expression parameter must be wrapped in parentheses
|
||||
--> $DIR/syntax-errors.rs:49:33
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { ${ count{i} } };
|
||||
| ^^^^^
|
||||
|
||||
error: expected identifier, found `123`
|
||||
--> $DIR/syntax-errors.rs:54:23
|
||||
|
|
||||
LL | () => { ${ignore($123)} }
|
||||
| ^^^ help: try removing `123`
|
||||
|
||||
error: unexpected token: a
|
||||
--> $DIR/syntax-errors.rs:66:19
|
||||
|
|
||||
LL | ${count() a b c}
|
||||
| ^
|
||||
|
|
||||
note: meta-variable expression must not have trailing tokens
|
||||
--> $DIR/syntax-errors.rs:66:19
|
||||
|
|
||||
LL | ${count() a b c}
|
||||
| ^
|
||||
|
||||
error: unexpected token: a
|
||||
--> $DIR/syntax-errors.rs:68:20
|
||||
|
|
||||
LL | ${count($i a b c)}
|
||||
| ^
|
||||
|
|
||||
note: meta-variable expression must not have trailing tokens
|
||||
--> $DIR/syntax-errors.rs:68:20
|
||||
|
|
||||
LL | ${count($i a b c)}
|
||||
| ^
|
||||
|
||||
error: unexpected token: a
|
||||
--> $DIR/syntax-errors.rs:70:23
|
||||
|
|
||||
LL | ${count($i, 1 a b c)}
|
||||
| ^
|
||||
|
|
||||
note: meta-variable expression must not have trailing tokens
|
||||
--> $DIR/syntax-errors.rs:70:23
|
||||
|
|
||||
LL | ${count($i, 1 a b c)}
|
||||
| ^
|
||||
|
||||
error: unexpected token: a
|
||||
--> $DIR/syntax-errors.rs:72:21
|
||||
|
|
||||
LL | ${count($i) a b c}
|
||||
| ^
|
||||
|
|
||||
note: meta-variable expression must not have trailing tokens
|
||||
--> $DIR/syntax-errors.rs:72:21
|
||||
|
|
||||
LL | ${count($i) a b c}
|
||||
| ^
|
||||
|
||||
error: unexpected token: a
|
||||
--> $DIR/syntax-errors.rs:75:22
|
||||
|
|
||||
LL | ${ignore($i) a b c}
|
||||
| ^
|
||||
|
|
||||
note: meta-variable expression must not have trailing tokens
|
||||
--> $DIR/syntax-errors.rs:75:22
|
||||
|
|
||||
LL | ${ignore($i) a b c}
|
||||
| ^
|
||||
|
||||
error: unexpected token: a
|
||||
--> $DIR/syntax-errors.rs:77:21
|
||||
|
|
||||
LL | ${ignore($i a b c)}
|
||||
| ^
|
||||
|
|
||||
note: meta-variable expression must not have trailing tokens
|
||||
--> $DIR/syntax-errors.rs:77:21
|
||||
|
|
||||
LL | ${ignore($i a b c)}
|
||||
| ^
|
||||
|
||||
error: unexpected token: a
|
||||
--> $DIR/syntax-errors.rs:80:19
|
||||
|
|
||||
LL | ${index() a b c}
|
||||
| ^
|
||||
|
|
||||
note: meta-variable expression must not have trailing tokens
|
||||
--> $DIR/syntax-errors.rs:80:19
|
||||
|
|
||||
LL | ${index() a b c}
|
||||
| ^
|
||||
|
||||
error: unexpected token: a
|
||||
--> $DIR/syntax-errors.rs:82:19
|
||||
|
|
||||
LL | ${index(1 a b c)}
|
||||
| ^
|
||||
|
|
||||
note: meta-variable expression must not have trailing tokens
|
||||
--> $DIR/syntax-errors.rs:82:19
|
||||
|
|
||||
LL | ${index(1 a b c)}
|
||||
| ^
|
||||
|
||||
error: unexpected token: a
|
||||
--> $DIR/syntax-errors.rs:85:19
|
||||
|
|
||||
LL | ${index() a b c}
|
||||
| ^
|
||||
|
|
||||
note: meta-variable expression must not have trailing tokens
|
||||
--> $DIR/syntax-errors.rs:85:19
|
||||
|
|
||||
LL | ${index() a b c}
|
||||
| ^
|
||||
|
||||
error: unexpected token: a
|
||||
--> $DIR/syntax-errors.rs:87:19
|
||||
|
|
||||
LL | ${index(1 a b c)}
|
||||
| ^
|
||||
|
|
||||
note: meta-variable expression must not have trailing tokens
|
||||
--> $DIR/syntax-errors.rs:87:19
|
||||
|
|
||||
LL | ${index(1 a b c)}
|
||||
| ^
|
||||
|
||||
error: meta-variable expression depth must be a literal
|
||||
--> $DIR/syntax-errors.rs:94:33
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { ${ index(IDX) } };
|
||||
| ^^^^^
|
||||
|
||||
error: meta-variables within meta-variable expressions must be referenced using a dollar sign
|
||||
--> $DIR/syntax-errors.rs:100:11
|
||||
|
|
||||
LL | ${count(foo)}
|
||||
| ^^^^^
|
||||
|
||||
error: meta-variables within meta-variable expressions must be referenced using a dollar sign
|
||||
--> $DIR/syntax-errors.rs:107:11
|
||||
|
|
||||
LL | ${ignore(bar)}
|
||||
| ^^^^^^
|
||||
|
||||
error: unrecognized meta-variable expression
|
||||
--> $DIR/syntax-errors.rs:113:33
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { ${ aaaaaaaaaaaaaa(i) } };
|
||||
| ^^^^^^^^^^^^^^ help: supported expressions are count, ignore, index and len
|
||||
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/syntax-errors.rs:38:14
|
||||
|
|
||||
LL | () => { ${} };
|
||||
| ^^
|
||||
|
||||
error: expected identifier, found `"hi"`
|
||||
--> $DIR/syntax-errors.rs:44:17
|
||||
|
|
||||
LL | () => { ${ "hi" } };
|
||||
| ^^^^ help: try removing `"hi"`
|
||||
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/syntax-errors.rs:60:33
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { ${ {} } };
|
||||
| ^^
|
||||
|
||||
error: aborting due to 25 previous errors
|
||||
|
||||
55
tests/ui/macros/metavar-expressions/usage-errors.rs
Normal file
55
tests/ui/macros/metavar-expressions/usage-errors.rs
Normal file
@@ -0,0 +1,55 @@
|
||||
// Errors for the `count` and `length` metavariable expressions
|
||||
|
||||
#![feature(macro_metavar_expr)]
|
||||
|
||||
// `curly` = Right hand side curly brackets
|
||||
// `no_rhs_dollar` = No dollar sign at the right hand side meta variable "function"
|
||||
// `round` = Left hand side round brackets
|
||||
|
||||
macro_rules! curly__no_rhs_dollar__round {
|
||||
( $( $i:ident ),* ) => { ${ count($i) } };
|
||||
}
|
||||
const _: u32 = curly__no_rhs_dollar__round!(a, b, c);
|
||||
|
||||
macro_rules! curly__no_rhs_dollar__no_round {
|
||||
( $i:ident ) => { ${ count($i) } };
|
||||
//~^ ERROR `count` can not be placed inside the innermost repetition
|
||||
}
|
||||
curly__no_rhs_dollar__no_round!(a);
|
||||
|
||||
macro_rules! curly__rhs_dollar__no_round {
|
||||
( $i:ident ) => { ${ count($i) } };
|
||||
//~^ ERROR `count` can not be placed inside the innermost repetition
|
||||
}
|
||||
curly__rhs_dollar__no_round !(a);
|
||||
|
||||
#[rustfmt::skip] // autoformatters can break a few of the error traces
|
||||
macro_rules! no_curly__no_rhs_dollar__round {
|
||||
( $( $i:ident ),* ) => { count(i) };
|
||||
//~^ ERROR missing `fn` or `struct` for function or struct definition
|
||||
}
|
||||
no_curly__no_rhs_dollar__round !(a, b, c);
|
||||
|
||||
#[rustfmt::skip] // autoformatters can break a few of the error traces
|
||||
macro_rules! no_curly__no_rhs_dollar__no_round {
|
||||
( $i:ident ) => { count(i) };
|
||||
//~^ ERROR missing `fn` or `struct` for function or struct definition
|
||||
}
|
||||
no_curly__no_rhs_dollar__no_round !(a);
|
||||
|
||||
#[rustfmt::skip] // autoformatters can break a few of the error traces
|
||||
macro_rules! no_curly__rhs_dollar__round {
|
||||
( $( $i:ident ),* ) => { count($i) };
|
||||
//~^ ERROR variable `i` is still repeating at this depth
|
||||
}
|
||||
no_curly__rhs_dollar__round! (a);
|
||||
|
||||
#[rustfmt::skip] // autoformatters can break a few of the error traces
|
||||
macro_rules! no_curly__rhs_dollar__no_round {
|
||||
( $i:ident ) => { count($i) };
|
||||
//~^ ERROR cannot find function `count` in this scope
|
||||
}
|
||||
const _: u32 = no_curly__rhs_dollar__no_round! (a);
|
||||
//~^ ERROR cannot find value `a` in this scope
|
||||
|
||||
fn main() {}
|
||||
71
tests/ui/macros/metavar-expressions/usage-errors.stderr
Normal file
71
tests/ui/macros/metavar-expressions/usage-errors.stderr
Normal file
@@ -0,0 +1,71 @@
|
||||
error: `count` can not be placed inside the innermost repetition
|
||||
--> $DIR/usage-errors.rs:15:24
|
||||
|
|
||||
LL | ( $i:ident ) => { ${ count($i) } };
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: `count` can not be placed inside the innermost repetition
|
||||
--> $DIR/usage-errors.rs:21:24
|
||||
|
|
||||
LL | ( $i:ident ) => { ${ count($i) } };
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: missing `fn` or `struct` for function or struct definition
|
||||
--> $DIR/usage-errors.rs:28:30
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { count(i) };
|
||||
| ^^^^^
|
||||
...
|
||||
LL | no_curly__no_rhs_dollar__round !(a, b, c);
|
||||
| ----------------------------------------- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `no_curly__no_rhs_dollar__round` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
help: if you meant to call a macro, try
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { count!(i) };
|
||||
| +
|
||||
|
||||
error: missing `fn` or `struct` for function or struct definition
|
||||
--> $DIR/usage-errors.rs:35:23
|
||||
|
|
||||
LL | ( $i:ident ) => { count(i) };
|
||||
| ^^^^^
|
||||
...
|
||||
LL | no_curly__no_rhs_dollar__no_round !(a);
|
||||
| -------------------------------------- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `no_curly__no_rhs_dollar__no_round` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
help: if you meant to call a macro, try
|
||||
|
|
||||
LL | ( $i:ident ) => { count!(i) };
|
||||
| +
|
||||
|
||||
error: variable `i` is still repeating at this depth
|
||||
--> $DIR/usage-errors.rs:42:36
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { count($i) };
|
||||
| ^^
|
||||
|
||||
error[E0425]: cannot find value `a` in this scope
|
||||
--> $DIR/usage-errors.rs:52:49
|
||||
|
|
||||
LL | ( $i:ident ) => { count($i) };
|
||||
| -- due to this macro variable
|
||||
...
|
||||
LL | const _: u32 = no_curly__rhs_dollar__no_round! (a);
|
||||
| ^ not found in this scope
|
||||
|
||||
error[E0425]: cannot find function `count` in this scope
|
||||
--> $DIR/usage-errors.rs:49:23
|
||||
|
|
||||
LL | ( $i:ident ) => { count($i) };
|
||||
| ^^^^^ not found in this scope
|
||||
...
|
||||
LL | const _: u32 = no_curly__rhs_dollar__no_round! (a);
|
||||
| ----------------------------------- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `no_curly__rhs_dollar__no_round` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 7 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0425`.
|
||||
@@ -1,164 +0,0 @@
|
||||
#![feature(macro_metavar_expr)]
|
||||
|
||||
// `curly` = Right hand side curly brackets
|
||||
// `no_rhs_dollar` = No dollar sign at the right hand side meta variable "function"
|
||||
// `round` = Left hand side round brackets
|
||||
|
||||
macro_rules! curly__no_rhs_dollar__round {
|
||||
( $( $i:ident ),* ) => { ${ count($i) } };
|
||||
}
|
||||
|
||||
macro_rules! curly__no_rhs_dollar__no_round {
|
||||
( $i:ident ) => { ${ count($i) } };
|
||||
//~^ ERROR `count` can not be placed inside the innermost repetition
|
||||
}
|
||||
|
||||
macro_rules! curly__rhs_dollar__no_round {
|
||||
( $i:ident ) => { ${ count($i) } };
|
||||
//~^ ERROR `count` can not be placed inside the innermost repetition
|
||||
}
|
||||
|
||||
#[rustfmt::skip] // autoformatters can break a few of the error traces
|
||||
macro_rules! no_curly__no_rhs_dollar__round {
|
||||
( $( $i:ident ),* ) => { count(i) };
|
||||
//~^ ERROR cannot find function `count` in this scope
|
||||
//~| ERROR cannot find value `i` in this scope
|
||||
}
|
||||
|
||||
#[rustfmt::skip] // autoformatters can break a few of the error traces
|
||||
macro_rules! no_curly__no_rhs_dollar__no_round {
|
||||
( $i:ident ) => { count(i) };
|
||||
//~^ ERROR cannot find function `count` in this scope
|
||||
//~| ERROR cannot find value `i` in this scope
|
||||
}
|
||||
|
||||
#[rustfmt::skip] // autoformatters can break a few of the error traces
|
||||
macro_rules! no_curly__rhs_dollar__round {
|
||||
( $( $i:ident ),* ) => { count($i) };
|
||||
//~^ ERROR variable `i` is still repeating at this depth
|
||||
}
|
||||
|
||||
#[rustfmt::skip] // autoformatters can break a few of the error traces
|
||||
macro_rules! no_curly__rhs_dollar__no_round {
|
||||
( $i:ident ) => { count($i) };
|
||||
//~^ ERROR cannot find function `count` in this scope
|
||||
}
|
||||
|
||||
// Other scenarios
|
||||
|
||||
macro_rules! dollar_dollar_in_the_lhs {
|
||||
( $$ $a:ident ) => {
|
||||
//~^ ERROR unexpected token: $
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! extra_garbage_after_metavar {
|
||||
( $( $i:ident ),* ) => {
|
||||
${count() a b c}
|
||||
//~^ ERROR unexpected token: a
|
||||
//~| ERROR expected expression, found `$`
|
||||
${count($i a b c)}
|
||||
//~^ ERROR unexpected token: a
|
||||
${count($i, 1 a b c)}
|
||||
//~^ ERROR unexpected token: a
|
||||
${count($i) a b c}
|
||||
//~^ ERROR unexpected token: a
|
||||
|
||||
${ignore($i) a b c}
|
||||
//~^ ERROR unexpected token: a
|
||||
${ignore($i a b c)}
|
||||
//~^ ERROR unexpected token: a
|
||||
|
||||
${index() a b c}
|
||||
//~^ ERROR unexpected token: a
|
||||
${index(1 a b c)}
|
||||
//~^ ERROR unexpected token: a
|
||||
|
||||
${index() a b c}
|
||||
//~^ ERROR unexpected token: a
|
||||
${index(1 a b c)}
|
||||
//~^ ERROR unexpected token: a
|
||||
};
|
||||
}
|
||||
|
||||
const IDX: usize = 1;
|
||||
macro_rules! metavar_depth_is_not_literal {
|
||||
( $( $i:ident ),* ) => { ${ index(IDX) } };
|
||||
//~^ ERROR meta-variable expression depth must be a literal
|
||||
//~| ERROR expected expression, found `$`
|
||||
}
|
||||
|
||||
macro_rules! metavar_in_the_lhs {
|
||||
( ${ len() } ) => {
|
||||
//~^ ERROR unexpected token: {
|
||||
//~| ERROR expected one of: `*`, `+`, or `?`
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! metavar_token_without_ident {
|
||||
( $( $i:ident ),* ) => { ${ ignore() } };
|
||||
//~^ ERROR meta-variable expressions must be referenced using a dollar sign
|
||||
//~| ERROR expected expression
|
||||
}
|
||||
|
||||
macro_rules! metavar_with_literal_suffix {
|
||||
( $( $i:ident ),* ) => { ${ index(1u32) } };
|
||||
//~^ ERROR only unsuffixes integer literals are supported in meta-variable expressions
|
||||
//~| ERROR expected expression, found `$`
|
||||
}
|
||||
|
||||
macro_rules! metavar_without_parens {
|
||||
( $( $i:ident ),* ) => { ${ count{i} } };
|
||||
//~^ ERROR meta-variable expression parameter must be wrapped in parentheses
|
||||
//~| ERROR expected expression, found `$`
|
||||
}
|
||||
|
||||
#[rustfmt::skip]
|
||||
macro_rules! open_brackets_without_tokens {
|
||||
( $( $i:ident ),* ) => { ${ {} } };
|
||||
//~^ ERROR expected expression, found `$`
|
||||
//~| ERROR expected identifier
|
||||
}
|
||||
|
||||
macro_rules! unknown_count_ident {
|
||||
( $( $i:ident )* ) => {
|
||||
${count(foo)}
|
||||
//~^ ERROR meta-variable expressions must be referenced using a dollar sign
|
||||
//~| ERROR expected expression
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! unknown_ignore_ident {
|
||||
( $( $i:ident )* ) => {
|
||||
${ignore(bar)}
|
||||
//~^ ERROR meta-variable expressions must be referenced using a dollar sign
|
||||
//~| ERROR expected expression
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! unknown_metavar {
|
||||
( $( $i:ident ),* ) => { ${ aaaaaaaaaaaaaa(i) } };
|
||||
//~^ ERROR unrecognized meta-variable expression
|
||||
//~| ERROR expected expression
|
||||
}
|
||||
|
||||
fn main() {
|
||||
curly__no_rhs_dollar__round!(a, b, c);
|
||||
curly__no_rhs_dollar__no_round!(a);
|
||||
curly__rhs_dollar__no_round!(a);
|
||||
no_curly__no_rhs_dollar__round!(a, b, c);
|
||||
no_curly__no_rhs_dollar__no_round!(a);
|
||||
no_curly__rhs_dollar__round!(a, b, c);
|
||||
no_curly__rhs_dollar__no_round!(a);
|
||||
//~^ ERROR cannot find value `a` in this scope
|
||||
|
||||
extra_garbage_after_metavar!(a);
|
||||
metavar_depth_is_not_literal!(a);
|
||||
metavar_token_without_ident!(a);
|
||||
metavar_with_literal_suffix!(a);
|
||||
metavar_without_parens!(a);
|
||||
open_brackets_without_tokens!(a);
|
||||
unknown_count_ident!(a);
|
||||
unknown_ignore_ident!(a);
|
||||
unknown_metavar!(a);
|
||||
}
|
||||
@@ -1,382 +0,0 @@
|
||||
error: unexpected token: $
|
||||
--> $DIR/syntax-errors.rs:50:8
|
||||
|
|
||||
LL | ( $$ $a:ident ) => {
|
||||
| ^
|
||||
|
||||
note: `$$` and meta-variable expressions are not allowed inside macro parameter definitions
|
||||
--> $DIR/syntax-errors.rs:50:8
|
||||
|
|
||||
LL | ( $$ $a:ident ) => {
|
||||
| ^
|
||||
|
||||
error: unexpected token: a
|
||||
--> $DIR/syntax-errors.rs:57:19
|
||||
|
|
||||
LL | ${count() a b c}
|
||||
| ^
|
||||
|
|
||||
note: meta-variable expression must not have trailing tokens
|
||||
--> $DIR/syntax-errors.rs:57:19
|
||||
|
|
||||
LL | ${count() a b c}
|
||||
| ^
|
||||
|
||||
error: unexpected token: a
|
||||
--> $DIR/syntax-errors.rs:60:20
|
||||
|
|
||||
LL | ${count($i a b c)}
|
||||
| ^
|
||||
|
|
||||
note: meta-variable expression must not have trailing tokens
|
||||
--> $DIR/syntax-errors.rs:60:20
|
||||
|
|
||||
LL | ${count($i a b c)}
|
||||
| ^
|
||||
|
||||
error: unexpected token: a
|
||||
--> $DIR/syntax-errors.rs:62:23
|
||||
|
|
||||
LL | ${count($i, 1 a b c)}
|
||||
| ^
|
||||
|
|
||||
note: meta-variable expression must not have trailing tokens
|
||||
--> $DIR/syntax-errors.rs:62:23
|
||||
|
|
||||
LL | ${count($i, 1 a b c)}
|
||||
| ^
|
||||
|
||||
error: unexpected token: a
|
||||
--> $DIR/syntax-errors.rs:64:21
|
||||
|
|
||||
LL | ${count($i) a b c}
|
||||
| ^
|
||||
|
|
||||
note: meta-variable expression must not have trailing tokens
|
||||
--> $DIR/syntax-errors.rs:64:21
|
||||
|
|
||||
LL | ${count($i) a b c}
|
||||
| ^
|
||||
|
||||
error: unexpected token: a
|
||||
--> $DIR/syntax-errors.rs:67:22
|
||||
|
|
||||
LL | ${ignore($i) a b c}
|
||||
| ^
|
||||
|
|
||||
note: meta-variable expression must not have trailing tokens
|
||||
--> $DIR/syntax-errors.rs:67:22
|
||||
|
|
||||
LL | ${ignore($i) a b c}
|
||||
| ^
|
||||
|
||||
error: unexpected token: a
|
||||
--> $DIR/syntax-errors.rs:69:21
|
||||
|
|
||||
LL | ${ignore($i a b c)}
|
||||
| ^
|
||||
|
|
||||
note: meta-variable expression must not have trailing tokens
|
||||
--> $DIR/syntax-errors.rs:69:21
|
||||
|
|
||||
LL | ${ignore($i a b c)}
|
||||
| ^
|
||||
|
||||
error: unexpected token: a
|
||||
--> $DIR/syntax-errors.rs:72:19
|
||||
|
|
||||
LL | ${index() a b c}
|
||||
| ^
|
||||
|
|
||||
note: meta-variable expression must not have trailing tokens
|
||||
--> $DIR/syntax-errors.rs:72:19
|
||||
|
|
||||
LL | ${index() a b c}
|
||||
| ^
|
||||
|
||||
error: unexpected token: a
|
||||
--> $DIR/syntax-errors.rs:74:19
|
||||
|
|
||||
LL | ${index(1 a b c)}
|
||||
| ^
|
||||
|
|
||||
note: meta-variable expression must not have trailing tokens
|
||||
--> $DIR/syntax-errors.rs:74:19
|
||||
|
|
||||
LL | ${index(1 a b c)}
|
||||
| ^
|
||||
|
||||
error: unexpected token: a
|
||||
--> $DIR/syntax-errors.rs:77:19
|
||||
|
|
||||
LL | ${index() a b c}
|
||||
| ^
|
||||
|
|
||||
note: meta-variable expression must not have trailing tokens
|
||||
--> $DIR/syntax-errors.rs:77:19
|
||||
|
|
||||
LL | ${index() a b c}
|
||||
| ^
|
||||
|
||||
error: unexpected token: a
|
||||
--> $DIR/syntax-errors.rs:79:19
|
||||
|
|
||||
LL | ${index(1 a b c)}
|
||||
| ^
|
||||
|
|
||||
note: meta-variable expression must not have trailing tokens
|
||||
--> $DIR/syntax-errors.rs:79:19
|
||||
|
|
||||
LL | ${index(1 a b c)}
|
||||
| ^
|
||||
|
||||
error: meta-variable expression depth must be a literal
|
||||
--> $DIR/syntax-errors.rs:86:33
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { ${ index(IDX) } };
|
||||
| ^^^^^
|
||||
|
||||
error: unexpected token: {
|
||||
--> $DIR/syntax-errors.rs:92:8
|
||||
|
|
||||
LL | ( ${ len() } ) => {
|
||||
| ^^^^^^^^^
|
||||
|
||||
note: `$$` and meta-variable expressions are not allowed inside macro parameter definitions
|
||||
--> $DIR/syntax-errors.rs:92:8
|
||||
|
|
||||
LL | ( ${ len() } ) => {
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: expected one of: `*`, `+`, or `?`
|
||||
--> $DIR/syntax-errors.rs:92:8
|
||||
|
|
||||
LL | ( ${ len() } ) => {
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: meta-variables within meta-variable expressions must be referenced using a dollar sign
|
||||
--> $DIR/syntax-errors.rs:99:33
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { ${ ignore() } };
|
||||
| ^^^^^^
|
||||
|
||||
error: only unsuffixes integer literals are supported in meta-variable expressions
|
||||
--> $DIR/syntax-errors.rs:105:33
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { ${ index(1u32) } };
|
||||
| ^^^^^
|
||||
|
||||
error: meta-variable expression parameter must be wrapped in parentheses
|
||||
--> $DIR/syntax-errors.rs:111:33
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { ${ count{i} } };
|
||||
| ^^^^^
|
||||
|
||||
error: meta-variables within meta-variable expressions must be referenced using a dollar sign
|
||||
--> $DIR/syntax-errors.rs:125:11
|
||||
|
|
||||
LL | ${count(foo)}
|
||||
| ^^^^^
|
||||
|
||||
error: meta-variables within meta-variable expressions must be referenced using a dollar sign
|
||||
--> $DIR/syntax-errors.rs:133:11
|
||||
|
|
||||
LL | ${ignore(bar)}
|
||||
| ^^^^^^
|
||||
|
||||
error: unrecognized meta-variable expression
|
||||
--> $DIR/syntax-errors.rs:140:33
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { ${ aaaaaaaaaaaaaa(i) } };
|
||||
| ^^^^^^^^^^^^^^ help: supported expressions are count, ignore, index and len
|
||||
|
||||
error: expected identifier or string literal
|
||||
--> $DIR/syntax-errors.rs:118:33
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { ${ {} } };
|
||||
| ^^
|
||||
|
||||
error: `count` can not be placed inside the innermost repetition
|
||||
--> $DIR/syntax-errors.rs:12:24
|
||||
|
|
||||
LL | ( $i:ident ) => { ${ count($i) } };
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: `count` can not be placed inside the innermost repetition
|
||||
--> $DIR/syntax-errors.rs:17:24
|
||||
|
|
||||
LL | ( $i:ident ) => { ${ count($i) } };
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: variable `i` is still repeating at this depth
|
||||
--> $DIR/syntax-errors.rs:37:36
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { count($i) };
|
||||
| ^^
|
||||
|
||||
error: expected expression, found `$`
|
||||
--> $DIR/syntax-errors.rs:57:9
|
||||
|
|
||||
LL | ${count() a b c}
|
||||
| ^ expected expression
|
||||
...
|
||||
LL | extra_garbage_after_metavar!(a);
|
||||
| ------------------------------- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `extra_garbage_after_metavar` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: expected expression, found `$`
|
||||
--> $DIR/syntax-errors.rs:86:30
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { ${ index(IDX) } };
|
||||
| ^ expected expression
|
||||
...
|
||||
LL | metavar_depth_is_not_literal!(a);
|
||||
| -------------------------------- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `metavar_depth_is_not_literal` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: expected expression, found `$`
|
||||
--> $DIR/syntax-errors.rs:99:30
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { ${ ignore() } };
|
||||
| ^ expected expression
|
||||
...
|
||||
LL | metavar_token_without_ident!(a);
|
||||
| ------------------------------- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `metavar_token_without_ident` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: expected expression, found `$`
|
||||
--> $DIR/syntax-errors.rs:105:30
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { ${ index(1u32) } };
|
||||
| ^ expected expression
|
||||
...
|
||||
LL | metavar_with_literal_suffix!(a);
|
||||
| ------------------------------- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `metavar_with_literal_suffix` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: expected expression, found `$`
|
||||
--> $DIR/syntax-errors.rs:111:30
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { ${ count{i} } };
|
||||
| ^ expected expression
|
||||
...
|
||||
LL | metavar_without_parens!(a);
|
||||
| -------------------------- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `metavar_without_parens` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: expected expression, found `$`
|
||||
--> $DIR/syntax-errors.rs:118:30
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { ${ {} } };
|
||||
| ^ expected expression
|
||||
...
|
||||
LL | open_brackets_without_tokens!(a);
|
||||
| -------------------------------- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `open_brackets_without_tokens` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: expected expression, found `$`
|
||||
--> $DIR/syntax-errors.rs:125:9
|
||||
|
|
||||
LL | ${count(foo)}
|
||||
| ^ expected expression
|
||||
...
|
||||
LL | unknown_count_ident!(a);
|
||||
| ----------------------- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `unknown_count_ident` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: expected expression, found `$`
|
||||
--> $DIR/syntax-errors.rs:133:9
|
||||
|
|
||||
LL | ${ignore(bar)}
|
||||
| ^ expected expression
|
||||
...
|
||||
LL | unknown_ignore_ident!(a);
|
||||
| ------------------------ in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `unknown_ignore_ident` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: expected expression, found `$`
|
||||
--> $DIR/syntax-errors.rs:140:30
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { ${ aaaaaaaaaaaaaa(i) } };
|
||||
| ^ expected expression
|
||||
...
|
||||
LL | unknown_metavar!(a);
|
||||
| ------------------- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `unknown_metavar` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0425]: cannot find value `i` in this scope
|
||||
--> $DIR/syntax-errors.rs:23:36
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { count(i) };
|
||||
| ^ not found in this scope
|
||||
...
|
||||
LL | no_curly__no_rhs_dollar__round!(a, b, c);
|
||||
| ---------------------------------------- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `no_curly__no_rhs_dollar__round` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0425]: cannot find value `i` in this scope
|
||||
--> $DIR/syntax-errors.rs:30:29
|
||||
|
|
||||
LL | ( $i:ident ) => { count(i) };
|
||||
| ^ not found in this scope
|
||||
...
|
||||
LL | no_curly__no_rhs_dollar__no_round!(a);
|
||||
| ------------------------------------- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `no_curly__no_rhs_dollar__no_round` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0425]: cannot find value `a` in this scope
|
||||
--> $DIR/syntax-errors.rs:152:37
|
||||
|
|
||||
LL | ( $i:ident ) => { count($i) };
|
||||
| -- due to this macro variable
|
||||
...
|
||||
LL | no_curly__rhs_dollar__no_round!(a);
|
||||
| ^ not found in this scope
|
||||
|
||||
error[E0425]: cannot find function `count` in this scope
|
||||
--> $DIR/syntax-errors.rs:23:30
|
||||
|
|
||||
LL | ( $( $i:ident ),* ) => { count(i) };
|
||||
| ^^^^^ not found in this scope
|
||||
...
|
||||
LL | no_curly__no_rhs_dollar__round!(a, b, c);
|
||||
| ---------------------------------------- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `no_curly__no_rhs_dollar__round` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0425]: cannot find function `count` in this scope
|
||||
--> $DIR/syntax-errors.rs:30:23
|
||||
|
|
||||
LL | ( $i:ident ) => { count(i) };
|
||||
| ^^^^^ not found in this scope
|
||||
...
|
||||
LL | no_curly__no_rhs_dollar__no_round!(a);
|
||||
| ------------------------------------- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `no_curly__no_rhs_dollar__no_round` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0425]: cannot find function `count` in this scope
|
||||
--> $DIR/syntax-errors.rs:43:23
|
||||
|
|
||||
LL | ( $i:ident ) => { count($i) };
|
||||
| ^^^^^ not found in this scope
|
||||
...
|
||||
LL | no_curly__rhs_dollar__no_round!(a);
|
||||
| ---------------------------------- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `no_curly__rhs_dollar__no_round` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 39 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0425`.
|
||||
@@ -2,6 +2,7 @@ error[E0259]: the name `std` is defined multiple times
|
||||
|
|
||||
= note: `std` must be defined only once in the type namespace of this module
|
||||
help: you can use `as` to change the binding name of the import
|
||||
--> $DIR/resolve-conflict-extern-crate-vs-extern-crate.rs:1:17
|
||||
|
|
||||
LL | extern crate std as other_std;
|
||||
| ++++++++++++
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
struct S;
|
||||
|
||||
impl S {
|
||||
fn f(self: _) {} //~ERROR the placeholder `_` is not allowed within types on item signatures for functions
|
||||
fn g(self: &_) {} //~ERROR the placeholder `_` is not allowed within types on item signatures for functions
|
||||
fn f(self: _) {} //~ERROR the placeholder `_` is not allowed within types on item signatures for methods
|
||||
fn g(self: &_) {} //~ERROR the placeholder `_` is not allowed within types on item signatures for methods
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for methods
|
||||
--> $DIR/self-infer.rs:4:16
|
||||
|
|
||||
LL | fn f(self: _) {}
|
||||
| ^ not allowed in type signatures
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for methods
|
||||
--> $DIR/self-infer.rs:5:17
|
||||
|
|
||||
LL | fn g(self: &_) {}
|
||||
|
||||
@@ -4,7 +4,7 @@ trait Foo {
|
||||
|
||||
impl Foo for () {
|
||||
fn bar(s: _) {}
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for functions
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for associated functions
|
||||
//~| ERROR has 1 parameter but the declaration in trait `Foo::bar` has 0
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for associated functions
|
||||
--> $DIR/bad-infer-in-trait-impl.rs:6:15
|
||||
|
|
||||
LL | fn bar(s: _) {}
|
||||
|
||||
@@ -16,7 +16,7 @@ LL | impl<T> const FromResidual for T {
|
||||
= note: implementing a foreign trait is only possible if at least one of the types for which it is implemented is local
|
||||
= note: only traits defined in the current crate can be implemented for a type parameter
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for associated functions
|
||||
--> $DIR/ice-119717-constant-lifetime.rs:9:31
|
||||
|
|
||||
LL | fn from_residual(t: T) -> _ {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for associated functions
|
||||
--> $DIR/method-argument-mismatch-variance-ice-119867.rs:8:23
|
||||
|
|
||||
LL | fn deserialize(s: _) {}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
fn main() {
|
||||
static BUG: fn(_) -> u8 = |_| 8;
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for static items
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for statics
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for static items
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for statics
|
||||
--> $DIR/issue-74086.rs:2:20
|
||||
|
|
||||
LL | static BUG: fn(_) -> u8 = |_| 8;
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for constant items
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for constants
|
||||
--> $DIR/issue-75889.rs:3:24
|
||||
|
|
||||
LL | const FOO: dyn Fn() -> _ = "";
|
||||
| ^ not allowed in type signatures
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for static items
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for statics
|
||||
--> $DIR/issue-75889.rs:4:25
|
||||
|
|
||||
LL | static BOO: dyn Fn() -> _ = "";
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
const TEST4: fn() -> _ = 42;
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for constant items
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for constants
|
||||
|
||||
fn main() {
|
||||
const TEST5: fn() -> _ = 42;
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for constant items
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for constants
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for constant items
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for constants
|
||||
--> $DIR/issue-81885.rs:1:22
|
||||
|
|
||||
LL | const TEST4: fn() -> _ = 42;
|
||||
| ^ not allowed in type signatures
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for constant items
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for constants
|
||||
--> $DIR/issue-81885.rs:5:26
|
||||
|
|
||||
LL | const TEST5: fn() -> _ = 42;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for static variables
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for statics
|
||||
--> $DIR/issue-83621-placeholder-static-in-extern.rs:4:15
|
||||
|
|
||||
LL | static x: _;
|
||||
|
||||
@@ -8,12 +8,12 @@ use std::collections::HashMap;
|
||||
pub trait T {}
|
||||
|
||||
static CALLBACKS: HashMap<*const dyn T, dyn FnMut(&mut _) + 'static> = HashMap::new();
|
||||
//~^ ERROR: the placeholder `_` is not allowed within types on item signatures for static items [E0121]
|
||||
//~^ ERROR: the placeholder `_` is not allowed within types on item signatures for statics [E0121]
|
||||
|
||||
static CALLBACKS2: Vec<dyn Fn(& _)> = Vec::new();
|
||||
//~^ ERROR: the placeholder `_` is not allowed within types on item signatures for static items [E0121]
|
||||
//~^ ERROR: the placeholder `_` is not allowed within types on item signatures for statics [E0121]
|
||||
|
||||
static CALLBACKS3: Option<dyn Fn(& _)> = None;
|
||||
//~^ ERROR: the placeholder `_` is not allowed within types on item signatures for static items [E0121]
|
||||
//~^ ERROR: the placeholder `_` is not allowed within types on item signatures for statics [E0121]
|
||||
|
||||
fn main() {}
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for static items
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for statics
|
||||
--> $DIR/issue-88643.rs:10:56
|
||||
|
|
||||
LL | static CALLBACKS: HashMap<*const dyn T, dyn FnMut(&mut _) + 'static> = HashMap::new();
|
||||
| ^ not allowed in type signatures
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for static items
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for statics
|
||||
--> $DIR/issue-88643.rs:13:33
|
||||
|
|
||||
LL | static CALLBACKS2: Vec<dyn Fn(& _)> = Vec::new();
|
||||
| ^ not allowed in type signatures
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for static items
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for statics
|
||||
--> $DIR/issue-88643.rs:16:36
|
||||
|
|
||||
LL | static CALLBACKS3: Option<dyn Fn(& _)> = None;
|
||||
|
||||
@@ -41,7 +41,7 @@ impl Test9 {
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for return types
|
||||
|
||||
fn test10(&self, _x : _) { }
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for functions
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for methods
|
||||
}
|
||||
|
||||
fn test11(x: &usize) -> &_ {
|
||||
@@ -56,10 +56,10 @@ unsafe fn test12(x: *const usize) -> *const *const _ {
|
||||
|
||||
impl Clone for Test9 {
|
||||
fn clone(&self) -> _ { Test9 }
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for functions
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for methods
|
||||
|
||||
fn clone_from(&mut self, other: _) { *self = Test9; }
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for functions
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for methods
|
||||
}
|
||||
|
||||
struct Test10 {
|
||||
@@ -108,15 +108,15 @@ pub fn main() {
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for return types
|
||||
|
||||
fn fn_test10(&self, _x : _) { }
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for functions
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for methods
|
||||
}
|
||||
|
||||
impl Clone for FnTest9 {
|
||||
fn clone(&self) -> _ { FnTest9 }
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for functions
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for methods
|
||||
|
||||
fn clone_from(&mut self, other: _) { *self = FnTest9; }
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for functions
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for methods
|
||||
}
|
||||
|
||||
struct FnTest10 {
|
||||
@@ -140,19 +140,19 @@ pub fn main() {
|
||||
|
||||
trait T {
|
||||
fn method_test1(&self, x: _);
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for functions
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for methods
|
||||
fn method_test2(&self, x: _) -> _;
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for functions
|
||||
//~| ERROR the placeholder `_` is not allowed within types on item signatures for functions
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for methods
|
||||
//~| ERROR the placeholder `_` is not allowed within types on item signatures for methods
|
||||
fn method_test3(&self) -> _;
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for functions
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for methods
|
||||
fn assoc_fn_test1(x: _);
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for functions
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for associated functions
|
||||
fn assoc_fn_test2(x: _) -> _;
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for functions
|
||||
//~| ERROR the placeholder `_` is not allowed within types on item signatures for functions
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for associated functions
|
||||
//~| ERROR the placeholder `_` is not allowed within types on item signatures for associated functions
|
||||
fn assoc_fn_test3() -> _;
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for functions
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for associated functions
|
||||
}
|
||||
|
||||
struct BadStruct<_>(_);
|
||||
|
||||
@@ -203,7 +203,7 @@ LL | unsafe fn test12(x: *const usize) -> *const *const _ {
|
||||
| | not allowed in type signatures
|
||||
| help: replace with the correct return type: `*const *const usize`
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for methods
|
||||
--> $DIR/typeck_type_placeholder_item.rs:58:24
|
||||
|
|
||||
LL | fn clone(&self) -> _ { Test9 }
|
||||
@@ -215,7 +215,7 @@ LL - fn clone(&self) -> _ { Test9 }
|
||||
LL + fn clone(&self) -> Test9 { Test9 }
|
||||
|
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for methods
|
||||
--> $DIR/typeck_type_placeholder_item.rs:61:37
|
||||
|
|
||||
LL | fn clone_from(&mut self, other: _) { *self = Test9; }
|
||||
@@ -332,7 +332,7 @@ error[E0121]: the placeholder `_` is not allowed within types on item signatures
|
||||
LL | fn fn_test8(_f: fn() -> _) { }
|
||||
| ^ not allowed in type signatures
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for methods
|
||||
--> $DIR/typeck_type_placeholder_item.rs:115:28
|
||||
|
|
||||
LL | fn clone(&self) -> _ { FnTest9 }
|
||||
@@ -344,7 +344,7 @@ LL - fn clone(&self) -> _ { FnTest9 }
|
||||
LL + fn clone(&self) -> FnTest9 { FnTest9 }
|
||||
|
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for methods
|
||||
--> $DIR/typeck_type_placeholder_item.rs:118:41
|
||||
|
|
||||
LL | fn clone_from(&mut self, other: _) { *self = FnTest9; }
|
||||
@@ -389,49 +389,49 @@ LL | fn fn_test13(x: _) -> (i32, _) { (x, x) }
|
||||
| | not allowed in type signatures
|
||||
| help: replace with the correct return type: `(i32, i32)`
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for methods
|
||||
--> $DIR/typeck_type_placeholder_item.rs:142:31
|
||||
|
|
||||
LL | fn method_test1(&self, x: _);
|
||||
| ^ not allowed in type signatures
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for methods
|
||||
--> $DIR/typeck_type_placeholder_item.rs:144:31
|
||||
|
|
||||
LL | fn method_test2(&self, x: _) -> _;
|
||||
| ^ not allowed in type signatures
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for methods
|
||||
--> $DIR/typeck_type_placeholder_item.rs:144:37
|
||||
|
|
||||
LL | fn method_test2(&self, x: _) -> _;
|
||||
| ^ not allowed in type signatures
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for methods
|
||||
--> $DIR/typeck_type_placeholder_item.rs:147:31
|
||||
|
|
||||
LL | fn method_test3(&self) -> _;
|
||||
| ^ not allowed in type signatures
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for associated functions
|
||||
--> $DIR/typeck_type_placeholder_item.rs:149:26
|
||||
|
|
||||
LL | fn assoc_fn_test1(x: _);
|
||||
| ^ not allowed in type signatures
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for associated functions
|
||||
--> $DIR/typeck_type_placeholder_item.rs:151:26
|
||||
|
|
||||
LL | fn assoc_fn_test2(x: _) -> _;
|
||||
| ^ not allowed in type signatures
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for associated functions
|
||||
--> $DIR/typeck_type_placeholder_item.rs:151:32
|
||||
|
|
||||
LL | fn assoc_fn_test2(x: _) -> _;
|
||||
| ^ not allowed in type signatures
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for associated functions
|
||||
--> $DIR/typeck_type_placeholder_item.rs:154:28
|
||||
|
|
||||
LL | fn assoc_fn_test3() -> _;
|
||||
@@ -575,7 +575,7 @@ LL | fn test9(&self) -> _ { () }
|
||||
| not allowed in type signatures
|
||||
| help: replace with the correct return type: `()`
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for methods
|
||||
--> $DIR/typeck_type_placeholder_item.rs:43:27
|
||||
|
|
||||
LL | fn test10(&self, _x : _) { }
|
||||
@@ -590,7 +590,7 @@ LL | fn fn_test9(&self) -> _ { () }
|
||||
| not allowed in type signatures
|
||||
| help: replace with the correct return type: `()`
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for functions
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for methods
|
||||
--> $DIR/typeck_type_placeholder_item.rs:110:34
|
||||
|
|
||||
LL | fn fn_test10(&self, _x : _) { }
|
||||
|
||||
@@ -11,7 +11,7 @@ const TEST3: _ = Some(42);
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for constants
|
||||
|
||||
const TEST4: fn() -> _ = 42;
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for constant items
|
||||
//~^ ERROR the placeholder `_` is not allowed within types on item signatures for constants
|
||||
|
||||
trait Test5 {
|
||||
const TEST5: _ = 42;
|
||||
|
||||
@@ -31,7 +31,7 @@ LL - const TEST3: _ = Some(42);
|
||||
LL + const TEST3: Option<i32> = Some(42);
|
||||
|
|
||||
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for constant items
|
||||
error[E0121]: the placeholder `_` is not allowed within types on item signatures for constants
|
||||
--> $DIR/typeck_type_placeholder_item_help.rs:13:22
|
||||
|
|
||||
LL | const TEST4: fn() -> _ = 42;
|
||||
|
||||
Reference in New Issue
Block a user