Auto merge of #133086 - GuillaumeGomez:rollup-kbkfrkj, r=GuillaumeGomez
Rollup of 5 pull requests Successful merges: - #132936 (For expr `return (_ = 42);` unused_paren lint should not be triggered) - #132956 (Add visit_coroutine_kind to ast::Visitor) - #132978 (Mention both release *and* edition breakage for never type lints) - #133074 (make UI test OS-agnostic) - #133080 (Fix span edition for 2024 RPIT coming from an external macro ) r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
d3a4b1f46b
46 changed files with 411 additions and 188 deletions
|
@ -268,8 +268,8 @@ pub trait Visitor<'ast>: Sized {
|
||||||
fn visit_fn_ret_ty(&mut self, ret_ty: &'ast FnRetTy) -> Self::Result {
|
fn visit_fn_ret_ty(&mut self, ret_ty: &'ast FnRetTy) -> Self::Result {
|
||||||
walk_fn_ret_ty(self, ret_ty)
|
walk_fn_ret_ty(self, ret_ty)
|
||||||
}
|
}
|
||||||
fn visit_fn_header(&mut self, _header: &'ast FnHeader) -> Self::Result {
|
fn visit_fn_header(&mut self, header: &'ast FnHeader) -> Self::Result {
|
||||||
Self::Result::output()
|
walk_fn_header(self, header)
|
||||||
}
|
}
|
||||||
fn visit_expr_field(&mut self, f: &'ast ExprField) -> Self::Result {
|
fn visit_expr_field(&mut self, f: &'ast ExprField) -> Self::Result {
|
||||||
walk_expr_field(self, f)
|
walk_expr_field(self, f)
|
||||||
|
@ -292,6 +292,9 @@ pub trait Visitor<'ast>: Sized {
|
||||||
fn visit_capture_by(&mut self, _capture_by: &'ast CaptureBy) -> Self::Result {
|
fn visit_capture_by(&mut self, _capture_by: &'ast CaptureBy) -> Self::Result {
|
||||||
Self::Result::output()
|
Self::Result::output()
|
||||||
}
|
}
|
||||||
|
fn visit_coroutine_kind(&mut self, _coroutine_kind: &'ast CoroutineKind) -> Self::Result {
|
||||||
|
Self::Result::output()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn walk_crate<'a, V: Visitor<'a>>(visitor: &mut V, krate: &'a Crate) -> V::Result {
|
pub fn walk_crate<'a, V: Visitor<'a>>(visitor: &mut V, krate: &'a Crate) -> V::Result {
|
||||||
|
@ -813,6 +816,12 @@ pub fn walk_fn_ret_ty<'a, V: Visitor<'a>>(visitor: &mut V, ret_ty: &'a FnRetTy)
|
||||||
V::Result::output()
|
V::Result::output()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn walk_fn_header<'a, V: Visitor<'a>>(visitor: &mut V, fn_header: &'a FnHeader) -> V::Result {
|
||||||
|
let FnHeader { safety: _, coroutine_kind, constness: _, ext: _ } = fn_header;
|
||||||
|
visit_opt!(visitor, visit_coroutine_kind, coroutine_kind.as_ref());
|
||||||
|
V::Result::output()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn walk_fn_decl<'a, V: Visitor<'a>>(
|
pub fn walk_fn_decl<'a, V: Visitor<'a>>(
|
||||||
visitor: &mut V,
|
visitor: &mut V,
|
||||||
FnDecl { inputs, output }: &'a FnDecl,
|
FnDecl { inputs, output }: &'a FnDecl,
|
||||||
|
@ -830,8 +839,9 @@ pub fn walk_fn<'a, V: Visitor<'a>>(visitor: &mut V, kind: FnKind<'a>) -> V::Resu
|
||||||
try_visit!(walk_fn_decl(visitor, decl));
|
try_visit!(walk_fn_decl(visitor, decl));
|
||||||
visit_opt!(visitor, visit_block, body);
|
visit_opt!(visitor, visit_block, body);
|
||||||
}
|
}
|
||||||
FnKind::Closure(binder, _coroutine_kind, decl, body) => {
|
FnKind::Closure(binder, coroutine_kind, decl, body) => {
|
||||||
try_visit!(visitor.visit_closure_binder(binder));
|
try_visit!(visitor.visit_closure_binder(binder));
|
||||||
|
visit_opt!(visitor, visit_coroutine_kind, coroutine_kind.as_ref());
|
||||||
try_visit!(walk_fn_decl(visitor, decl));
|
try_visit!(walk_fn_decl(visitor, decl));
|
||||||
try_visit!(visitor.visit_expr(body));
|
try_visit!(visitor.visit_expr(body));
|
||||||
}
|
}
|
||||||
|
|
|
@ -738,7 +738,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
|
||||||
allow_internal_unstable: Option<Lrc<[Symbol]>>,
|
allow_internal_unstable: Option<Lrc<[Symbol]>>,
|
||||||
) -> Span {
|
) -> Span {
|
||||||
self.tcx.with_stable_hashing_context(|hcx| {
|
self.tcx.with_stable_hashing_context(|hcx| {
|
||||||
span.mark_with_reason(allow_internal_unstable, reason, self.tcx.sess.edition(), hcx)
|
span.mark_with_reason(allow_internal_unstable, reason, span.edition(), hcx)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -68,6 +68,10 @@ impl<'a, T: EarlyLintPass> EarlyContextAndPass<'a, T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, T: EarlyLintPass> ast_visit::Visitor<'a> for EarlyContextAndPass<'a, T> {
|
impl<'a, T: EarlyLintPass> ast_visit::Visitor<'a> for EarlyContextAndPass<'a, T> {
|
||||||
|
fn visit_coroutine_kind(&mut self, coroutine_kind: &'a ast::CoroutineKind) -> Self::Result {
|
||||||
|
self.check_id(coroutine_kind.closure_id());
|
||||||
|
}
|
||||||
|
|
||||||
fn visit_param(&mut self, param: &'a ast::Param) {
|
fn visit_param(&mut self, param: &'a ast::Param) {
|
||||||
self.with_lint_attrs(param.id, ¶m.attrs, |cx| {
|
self.with_lint_attrs(param.id, ¶m.attrs, |cx| {
|
||||||
lint_callback!(cx, check_param, param);
|
lint_callback!(cx, check_param, param);
|
||||||
|
@ -111,17 +115,6 @@ impl<'a, T: EarlyLintPass> ast_visit::Visitor<'a> for EarlyContextAndPass<'a, T>
|
||||||
self.with_lint_attrs(e.id, &e.attrs, |cx| {
|
self.with_lint_attrs(e.id, &e.attrs, |cx| {
|
||||||
lint_callback!(cx, check_expr, e);
|
lint_callback!(cx, check_expr, e);
|
||||||
ast_visit::walk_expr(cx, e);
|
ast_visit::walk_expr(cx, e);
|
||||||
// Explicitly check for lints associated with 'closure_id', since
|
|
||||||
// it does not have a corresponding AST node
|
|
||||||
match e.kind {
|
|
||||||
ast::ExprKind::Closure(box ast::Closure {
|
|
||||||
coroutine_kind: Some(coroutine_kind),
|
|
||||||
..
|
|
||||||
}) => {
|
|
||||||
cx.check_id(coroutine_kind.closure_id());
|
|
||||||
}
|
|
||||||
_ => {}
|
|
||||||
}
|
|
||||||
lint_callback!(cx, check_expr_post, e);
|
lint_callback!(cx, check_expr_post, e);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -156,14 +149,6 @@ impl<'a, T: EarlyLintPass> ast_visit::Visitor<'a> for EarlyContextAndPass<'a, T>
|
||||||
lint_callback!(self, check_fn, fk, span, id);
|
lint_callback!(self, check_fn, fk, span, id);
|
||||||
self.check_id(id);
|
self.check_id(id);
|
||||||
ast_visit::walk_fn(self, fk);
|
ast_visit::walk_fn(self, fk);
|
||||||
|
|
||||||
// Explicitly check for lints associated with 'closure_id', since
|
|
||||||
// it does not have a corresponding AST node
|
|
||||||
if let ast_visit::FnKind::Fn(_, _, sig, _, _, _) = fk {
|
|
||||||
if let Some(coroutine_kind) = sig.header.coroutine_kind {
|
|
||||||
self.check_id(coroutine_kind.closure_id());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_variant_data(&mut self, s: &'a ast::VariantData) {
|
fn visit_variant_data(&mut self, s: &'a ast::VariantData) {
|
||||||
|
|
|
@ -584,6 +584,7 @@ enum UnusedDelimsCtx {
|
||||||
MatchScrutineeExpr,
|
MatchScrutineeExpr,
|
||||||
ReturnValue,
|
ReturnValue,
|
||||||
BlockRetValue,
|
BlockRetValue,
|
||||||
|
BreakValue,
|
||||||
LetScrutineeExpr,
|
LetScrutineeExpr,
|
||||||
ArrayLenExpr,
|
ArrayLenExpr,
|
||||||
AnonConst,
|
AnonConst,
|
||||||
|
@ -605,6 +606,7 @@ impl From<UnusedDelimsCtx> for &'static str {
|
||||||
UnusedDelimsCtx::MatchScrutineeExpr => "`match` scrutinee expression",
|
UnusedDelimsCtx::MatchScrutineeExpr => "`match` scrutinee expression",
|
||||||
UnusedDelimsCtx::ReturnValue => "`return` value",
|
UnusedDelimsCtx::ReturnValue => "`return` value",
|
||||||
UnusedDelimsCtx::BlockRetValue => "block return value",
|
UnusedDelimsCtx::BlockRetValue => "block return value",
|
||||||
|
UnusedDelimsCtx::BreakValue => "`break` value",
|
||||||
UnusedDelimsCtx::LetScrutineeExpr => "`let` scrutinee expression",
|
UnusedDelimsCtx::LetScrutineeExpr => "`let` scrutinee expression",
|
||||||
UnusedDelimsCtx::ArrayLenExpr | UnusedDelimsCtx::AnonConst => "const expression",
|
UnusedDelimsCtx::ArrayLenExpr | UnusedDelimsCtx::AnonConst => "const expression",
|
||||||
UnusedDelimsCtx::MatchArmExpr => "match arm expression",
|
UnusedDelimsCtx::MatchArmExpr => "match arm expression",
|
||||||
|
@ -913,6 +915,10 @@ trait UnusedDelimLint {
|
||||||
(value, UnusedDelimsCtx::ReturnValue, false, Some(left), None, true)
|
(value, UnusedDelimsCtx::ReturnValue, false, Some(left), None, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Break(_, Some(ref value)) => {
|
||||||
|
(value, UnusedDelimsCtx::BreakValue, false, None, None, true)
|
||||||
|
}
|
||||||
|
|
||||||
Index(_, ref value, _) => (value, UnusedDelimsCtx::IndexExpr, false, None, None, false),
|
Index(_, ref value, _) => (value, UnusedDelimsCtx::IndexExpr, false, None, None, false),
|
||||||
|
|
||||||
Assign(_, ref value, _) | AssignOp(.., ref value) => {
|
Assign(_, ref value, _) | AssignOp(.., ref value) => {
|
||||||
|
@ -1063,6 +1069,9 @@ impl UnusedDelimLint for UnusedParens {
|
||||||
_,
|
_,
|
||||||
_,
|
_,
|
||||||
) if node.is_lazy()))
|
) if node.is_lazy()))
|
||||||
|
&& !((ctx == UnusedDelimsCtx::ReturnValue
|
||||||
|
|| ctx == UnusedDelimsCtx::BreakValue)
|
||||||
|
&& matches!(inner.kind, ast::ExprKind::Assign(_, _, _)))
|
||||||
{
|
{
|
||||||
self.emit_unused_delims_expr(cx, value, ctx, left_pos, right_pos, is_kw)
|
self.emit_unused_delims_expr(cx, value, ctx, left_pos, right_pos, is_kw)
|
||||||
}
|
}
|
||||||
|
|
|
@ -4185,7 +4185,7 @@ declare_lint! {
|
||||||
Warn,
|
Warn,
|
||||||
"never type fallback affecting unsafe function calls",
|
"never type fallback affecting unsafe function calls",
|
||||||
@future_incompatible = FutureIncompatibleInfo {
|
@future_incompatible = FutureIncompatibleInfo {
|
||||||
reason: FutureIncompatibilityReason::FutureReleaseSemanticsChange,
|
reason: FutureIncompatibilityReason::EditionAndFutureReleaseSemanticsChange(Edition::Edition2024),
|
||||||
reference: "issue #123748 <https://github.com/rust-lang/rust/issues/123748>",
|
reference: "issue #123748 <https://github.com/rust-lang/rust/issues/123748>",
|
||||||
};
|
};
|
||||||
@edition Edition2024 => Deny;
|
@edition Edition2024 => Deny;
|
||||||
|
@ -4239,7 +4239,7 @@ declare_lint! {
|
||||||
Warn,
|
Warn,
|
||||||
"never type fallback affecting unsafe function calls",
|
"never type fallback affecting unsafe function calls",
|
||||||
@future_incompatible = FutureIncompatibleInfo {
|
@future_incompatible = FutureIncompatibleInfo {
|
||||||
reason: FutureIncompatibilityReason::FutureReleaseErrorDontReportInDeps,
|
reason: FutureIncompatibilityReason::EditionAndFutureReleaseError(Edition::Edition2024),
|
||||||
reference: "issue #123748 <https://github.com/rust-lang/rust/issues/123748>",
|
reference: "issue #123748 <https://github.com/rust-lang/rust/issues/123748>",
|
||||||
};
|
};
|
||||||
report_in_external_macro
|
report_in_external_macro
|
||||||
|
|
|
@ -381,6 +381,8 @@ pub enum FutureIncompatibilityReason {
|
||||||
/// hard errors (and the lint removed). Preferably when there is some
|
/// hard errors (and the lint removed). Preferably when there is some
|
||||||
/// confidence that the number of impacted projects is very small (few
|
/// confidence that the number of impacted projects is very small (few
|
||||||
/// should have a broken dependency in their dependency tree).
|
/// should have a broken dependency in their dependency tree).
|
||||||
|
///
|
||||||
|
/// [`EditionAndFutureReleaseError`]: FutureIncompatibilityReason::EditionAndFutureReleaseError
|
||||||
FutureReleaseErrorReportInDeps,
|
FutureReleaseErrorReportInDeps,
|
||||||
/// Code that changes meaning in some way in a
|
/// Code that changes meaning in some way in a
|
||||||
/// future release.
|
/// future release.
|
||||||
|
@ -419,6 +421,28 @@ pub enum FutureIncompatibilityReason {
|
||||||
/// slightly changes the text of the diagnostic, but is otherwise the
|
/// slightly changes the text of the diagnostic, but is otherwise the
|
||||||
/// same.
|
/// same.
|
||||||
EditionSemanticsChange(Edition),
|
EditionSemanticsChange(Edition),
|
||||||
|
/// This will be an error in the provided edition *and* in a future
|
||||||
|
/// release.
|
||||||
|
///
|
||||||
|
/// This variant a combination of [`FutureReleaseErrorDontReportInDeps`]
|
||||||
|
/// and [`EditionError`]. This is useful in rare cases when we
|
||||||
|
/// want to have "preview" of a breaking change in an edition, but do a
|
||||||
|
/// breaking change later on all editions anyway.
|
||||||
|
///
|
||||||
|
/// [`EditionError`]: FutureIncompatibilityReason::EditionError
|
||||||
|
/// [`FutureReleaseErrorDontReportInDeps`]: FutureIncompatibilityReason::FutureReleaseErrorDontReportInDeps
|
||||||
|
EditionAndFutureReleaseError(Edition),
|
||||||
|
/// This will change meaning in the provided edition *and* in a future
|
||||||
|
/// release.
|
||||||
|
///
|
||||||
|
/// This variant a combination of [`FutureReleaseSemanticsChange`]
|
||||||
|
/// and [`EditionSemanticsChange`]. This is useful in rare cases when we
|
||||||
|
/// want to have "preview" of a breaking change in an edition, but do a
|
||||||
|
/// breaking change later on all editions anyway.
|
||||||
|
///
|
||||||
|
/// [`EditionSemanticsChange`]: FutureIncompatibilityReason::EditionSemanticsChange
|
||||||
|
/// [`FutureReleaseSemanticsChange`]: FutureIncompatibilityReason::FutureReleaseSemanticsChange
|
||||||
|
EditionAndFutureReleaseSemanticsChange(Edition),
|
||||||
/// A custom reason.
|
/// A custom reason.
|
||||||
///
|
///
|
||||||
/// Choose this variant if the built-in text of the diagnostic of the
|
/// Choose this variant if the built-in text of the diagnostic of the
|
||||||
|
@ -431,9 +455,15 @@ pub enum FutureIncompatibilityReason {
|
||||||
impl FutureIncompatibilityReason {
|
impl FutureIncompatibilityReason {
|
||||||
pub fn edition(self) -> Option<Edition> {
|
pub fn edition(self) -> Option<Edition> {
|
||||||
match self {
|
match self {
|
||||||
Self::EditionError(e) => Some(e),
|
Self::EditionError(e)
|
||||||
Self::EditionSemanticsChange(e) => Some(e),
|
| Self::EditionSemanticsChange(e)
|
||||||
_ => None,
|
| Self::EditionAndFutureReleaseError(e)
|
||||||
|
| Self::EditionAndFutureReleaseSemanticsChange(e) => Some(e),
|
||||||
|
|
||||||
|
FutureIncompatibilityReason::FutureReleaseErrorDontReportInDeps
|
||||||
|
| FutureIncompatibilityReason::FutureReleaseErrorReportInDeps
|
||||||
|
| FutureIncompatibilityReason::FutureReleaseSemanticsChange
|
||||||
|
| FutureIncompatibilityReason::Custom(_) => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -382,6 +382,17 @@ pub fn lint_level(
|
||||||
FutureIncompatibilityReason::EditionSemanticsChange(edition) => {
|
FutureIncompatibilityReason::EditionSemanticsChange(edition) => {
|
||||||
format!("this changes meaning in Rust {edition}")
|
format!("this changes meaning in Rust {edition}")
|
||||||
}
|
}
|
||||||
|
FutureIncompatibilityReason::EditionAndFutureReleaseError(edition) => {
|
||||||
|
format!(
|
||||||
|
"this was previously accepted by the compiler but is being phased out; \
|
||||||
|
it will become a hard error in Rust {edition} and in a future release in all editions!"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
FutureIncompatibilityReason::EditionAndFutureReleaseSemanticsChange(edition) => {
|
||||||
|
format!(
|
||||||
|
"this changes meaning in Rust {edition} and in a future release in all editions!"
|
||||||
|
)
|
||||||
|
}
|
||||||
FutureIncompatibilityReason::Custom(reason) => reason.to_owned(),
|
FutureIncompatibilityReason::Custom(reason) => reason.to_owned(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -10,15 +10,11 @@ mod opaque {
|
||||||
mod to_reuse {
|
mod to_reuse {
|
||||||
use super::Trait;
|
use super::Trait;
|
||||||
|
|
||||||
pub fn opaque_ret() -> impl Trait { unimplemented!() }
|
pub fn opaque_ret() -> impl Trait { () }
|
||||||
//~^ warn: this function depends on never type fallback being `()`
|
|
||||||
//~| warn: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
|
||||||
}
|
}
|
||||||
|
|
||||||
trait ToReuse {
|
trait ToReuse {
|
||||||
fn opaque_ret() -> impl Trait { unimplemented!() }
|
fn opaque_ret() -> impl Trait { () }
|
||||||
//~^ warn: this function depends on never type fallback being `()`
|
|
||||||
//~| warn: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: Inherited `impl Trait`s create query cycles when used inside trait impls.
|
// FIXME: Inherited `impl Trait`s create query cycles when used inside trait impls.
|
||||||
|
|
|
@ -1,74 +1,43 @@
|
||||||
error[E0391]: cycle detected when computing type of `opaque::<impl at $DIR/unsupported.rs:25:5: 25:24>::{synthetic#0}`
|
error[E0391]: cycle detected when computing type of `opaque::<impl at $DIR/unsupported.rs:21:5: 21:24>::{synthetic#0}`
|
||||||
--> $DIR/unsupported.rs:26:25
|
--> $DIR/unsupported.rs:22:25
|
||||||
|
|
|
|
||||||
LL | reuse to_reuse::opaque_ret;
|
LL | reuse to_reuse::opaque_ret;
|
||||||
| ^^^^^^^^^^
|
| ^^^^^^^^^^
|
||||||
|
|
|
|
||||||
note: ...which requires comparing an impl and trait method signature, inferring any hidden `impl Trait` types in the process...
|
note: ...which requires comparing an impl and trait method signature, inferring any hidden `impl Trait` types in the process...
|
||||||
--> $DIR/unsupported.rs:26:25
|
--> $DIR/unsupported.rs:22:25
|
||||||
|
|
|
|
||||||
LL | reuse to_reuse::opaque_ret;
|
LL | reuse to_reuse::opaque_ret;
|
||||||
| ^^^^^^^^^^
|
| ^^^^^^^^^^
|
||||||
= note: ...which again requires computing type of `opaque::<impl at $DIR/unsupported.rs:25:5: 25:24>::{synthetic#0}`, completing the cycle
|
= note: ...which again requires computing type of `opaque::<impl at $DIR/unsupported.rs:21:5: 21:24>::{synthetic#0}`, completing the cycle
|
||||||
note: cycle used when checking that `opaque::<impl at $DIR/unsupported.rs:25:5: 25:24>` is well-formed
|
note: cycle used when checking that `opaque::<impl at $DIR/unsupported.rs:21:5: 21:24>` is well-formed
|
||||||
--> $DIR/unsupported.rs:25:5
|
--> $DIR/unsupported.rs:21:5
|
||||||
|
|
|
|
||||||
LL | impl ToReuse for u8 {
|
LL | impl ToReuse for u8 {
|
||||||
| ^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^
|
||||||
= note: see https://rustc-dev-guide.rust-lang.org/overview.html#queries and https://rustc-dev-guide.rust-lang.org/query.html for more information
|
= note: see https://rustc-dev-guide.rust-lang.org/overview.html#queries and https://rustc-dev-guide.rust-lang.org/query.html for more information
|
||||||
|
|
||||||
warning: this function depends on never type fallback being `()`
|
error[E0391]: cycle detected when computing type of `opaque::<impl at $DIR/unsupported.rs:24:5: 24:25>::{synthetic#0}`
|
||||||
--> $DIR/unsupported.rs:13:9
|
--> $DIR/unsupported.rs:25:24
|
||||||
|
|
|
||||||
LL | pub fn opaque_ret() -> impl Trait { unimplemented!() }
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
|
||||||
= help: specify the types explicitly
|
|
||||||
note: in edition 2024, the requirement `!: opaque::Trait` will fail
|
|
||||||
--> $DIR/unsupported.rs:13:32
|
|
||||||
|
|
|
||||||
LL | pub fn opaque_ret() -> impl Trait { unimplemented!() }
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
= note: `#[warn(dependency_on_unit_never_type_fallback)]` on by default
|
|
||||||
|
|
||||||
warning: this function depends on never type fallback being `()`
|
|
||||||
--> $DIR/unsupported.rs:19:9
|
|
||||||
|
|
|
||||||
LL | fn opaque_ret() -> impl Trait { unimplemented!() }
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
|
||||||
= help: specify the types explicitly
|
|
||||||
note: in edition 2024, the requirement `!: opaque::Trait` will fail
|
|
||||||
--> $DIR/unsupported.rs:19:28
|
|
||||||
|
|
|
||||||
LL | fn opaque_ret() -> impl Trait { unimplemented!() }
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
|
|
||||||
error[E0391]: cycle detected when computing type of `opaque::<impl at $DIR/unsupported.rs:28:5: 28:25>::{synthetic#0}`
|
|
||||||
--> $DIR/unsupported.rs:29:24
|
|
||||||
|
|
|
|
||||||
LL | reuse ToReuse::opaque_ret;
|
LL | reuse ToReuse::opaque_ret;
|
||||||
| ^^^^^^^^^^
|
| ^^^^^^^^^^
|
||||||
|
|
|
|
||||||
note: ...which requires comparing an impl and trait method signature, inferring any hidden `impl Trait` types in the process...
|
note: ...which requires comparing an impl and trait method signature, inferring any hidden `impl Trait` types in the process...
|
||||||
--> $DIR/unsupported.rs:29:24
|
--> $DIR/unsupported.rs:25:24
|
||||||
|
|
|
|
||||||
LL | reuse ToReuse::opaque_ret;
|
LL | reuse ToReuse::opaque_ret;
|
||||||
| ^^^^^^^^^^
|
| ^^^^^^^^^^
|
||||||
= note: ...which again requires computing type of `opaque::<impl at $DIR/unsupported.rs:28:5: 28:25>::{synthetic#0}`, completing the cycle
|
= note: ...which again requires computing type of `opaque::<impl at $DIR/unsupported.rs:24:5: 24:25>::{synthetic#0}`, completing the cycle
|
||||||
note: cycle used when checking that `opaque::<impl at $DIR/unsupported.rs:28:5: 28:25>` is well-formed
|
note: cycle used when checking that `opaque::<impl at $DIR/unsupported.rs:24:5: 24:25>` is well-formed
|
||||||
--> $DIR/unsupported.rs:28:5
|
--> $DIR/unsupported.rs:24:5
|
||||||
|
|
|
|
||||||
LL | impl ToReuse for u16 {
|
LL | impl ToReuse for u16 {
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
= note: see https://rustc-dev-guide.rust-lang.org/overview.html#queries and https://rustc-dev-guide.rust-lang.org/query.html for more information
|
= note: see https://rustc-dev-guide.rust-lang.org/overview.html#queries and https://rustc-dev-guide.rust-lang.org/query.html for more information
|
||||||
|
|
||||||
error: recursive delegation is not supported yet
|
error: recursive delegation is not supported yet
|
||||||
--> $DIR/unsupported.rs:42:22
|
--> $DIR/unsupported.rs:38:22
|
||||||
|
|
|
|
||||||
LL | pub reuse to_reuse2::foo;
|
LL | pub reuse to_reuse2::foo;
|
||||||
| --- callee defined here
|
| --- callee defined here
|
||||||
|
@ -77,14 +46,14 @@ LL | reuse to_reuse1::foo;
|
||||||
| ^^^
|
| ^^^
|
||||||
|
|
||||||
error[E0283]: type annotations needed
|
error[E0283]: type annotations needed
|
||||||
--> $DIR/unsupported.rs:52:18
|
--> $DIR/unsupported.rs:48:18
|
||||||
|
|
|
|
||||||
LL | reuse Trait::foo;
|
LL | reuse Trait::foo;
|
||||||
| ^^^ cannot infer type
|
| ^^^ cannot infer type
|
||||||
|
|
|
|
||||||
= note: cannot satisfy `_: effects::Trait`
|
= note: cannot satisfy `_: effects::Trait`
|
||||||
|
|
||||||
error: aborting due to 4 previous errors; 2 warnings emitted
|
error: aborting due to 4 previous errors
|
||||||
|
|
||||||
Some errors have detailed explanations: E0283, E0391.
|
Some errors have detailed explanations: E0283, E0391.
|
||||||
For more information about an error, try `rustc --explain E0283`.
|
For more information about an error, try `rustc --explain E0283`.
|
||||||
|
|
|
@ -16,7 +16,7 @@ fn main() {
|
||||||
|
|
||||||
fn m() {
|
fn m() {
|
||||||
//[e2021]~^ this function depends on never type fallback being `()`
|
//[e2021]~^ this function depends on never type fallback being `()`
|
||||||
//[e2021]~| this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
//[e2021]~| this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
let x: () = match true {
|
let x: () = match true {
|
||||||
true => Default::default(),
|
true => Default::default(),
|
||||||
//[e2024]~^ error: the trait bound `!: Default` is not satisfied
|
//[e2024]~^ error: the trait bound `!: Default` is not satisfied
|
||||||
|
@ -28,7 +28,7 @@ fn m() {
|
||||||
|
|
||||||
fn q() -> Option<()> {
|
fn q() -> Option<()> {
|
||||||
//[e2021]~^ this function depends on never type fallback being `()`
|
//[e2021]~^ this function depends on never type fallback being `()`
|
||||||
//[e2021]~| this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
//[e2021]~| this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
fn deserialize<T: Default>() -> Option<T> {
|
fn deserialize<T: Default>() -> Option<T> {
|
||||||
Some(T::default())
|
Some(T::default())
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@ fn help<'a: 'a, T: Into<()>, U>(_: U) -> Result<T, ()> {
|
||||||
}
|
}
|
||||||
fn meow() -> Result<(), ()> {
|
fn meow() -> Result<(), ()> {
|
||||||
//[e2021]~^ this function depends on never type fallback being `()`
|
//[e2021]~^ this function depends on never type fallback being `()`
|
||||||
//[e2021]~| this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
//[e2021]~| this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
help::<(), _>(1)?;
|
help::<(), _>(1)?;
|
||||||
//[e2024]~^ error: the trait bound `(): From<!>` is not satisfied
|
//[e2024]~^ error: the trait bound `(): From<!>` is not satisfied
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -4,7 +4,7 @@ warning: this function depends on never type fallback being `()`
|
||||||
LL | fn m() {
|
LL | fn m() {
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the types explicitly
|
= help: specify the types explicitly
|
||||||
note: in edition 2024, the requirement `!: Default` will fail
|
note: in edition 2024, the requirement `!: Default` will fail
|
||||||
|
@ -24,7 +24,7 @@ warning: this function depends on never type fallback being `()`
|
||||||
LL | fn q() -> Option<()> {
|
LL | fn q() -> Option<()> {
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the types explicitly
|
= help: specify the types explicitly
|
||||||
note: in edition 2024, the requirement `!: Default` will fail
|
note: in edition 2024, the requirement `!: Default` will fail
|
||||||
|
@ -43,7 +43,7 @@ warning: this function depends on never type fallback being `()`
|
||||||
LL | fn meow() -> Result<(), ()> {
|
LL | fn meow() -> Result<(), ()> {
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the types explicitly
|
= help: specify the types explicitly
|
||||||
note: in edition 2024, the requirement `(): From<!>` will fail
|
note: in edition 2024, the requirement `(): From<!>` will fail
|
||||||
|
|
|
@ -16,7 +16,7 @@ fn main() {
|
||||||
|
|
||||||
fn m() {
|
fn m() {
|
||||||
//[e2021]~^ this function depends on never type fallback being `()`
|
//[e2021]~^ this function depends on never type fallback being `()`
|
||||||
//[e2021]~| this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
//[e2021]~| this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
let x = match true {
|
let x = match true {
|
||||||
true => Default::default(),
|
true => Default::default(),
|
||||||
//[e2024]~^ error: the trait bound `!: Default` is not satisfied
|
//[e2024]~^ error: the trait bound `!: Default` is not satisfied
|
||||||
|
@ -28,7 +28,7 @@ fn m() {
|
||||||
|
|
||||||
fn q() -> Option<()> {
|
fn q() -> Option<()> {
|
||||||
//[e2021]~^ this function depends on never type fallback being `()`
|
//[e2021]~^ this function depends on never type fallback being `()`
|
||||||
//[e2021]~| this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
//[e2021]~| this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
fn deserialize<T: Default>() -> Option<T> {
|
fn deserialize<T: Default>() -> Option<T> {
|
||||||
Some(T::default())
|
Some(T::default())
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@ fn help<'a: 'a, T: Into<()>, U>(_: U) -> Result<T, ()> {
|
||||||
}
|
}
|
||||||
fn meow() -> Result<(), ()> {
|
fn meow() -> Result<(), ()> {
|
||||||
//[e2021]~^ this function depends on never type fallback being `()`
|
//[e2021]~^ this function depends on never type fallback being `()`
|
||||||
//[e2021]~| this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
//[e2021]~| this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
help(1)?;
|
help(1)?;
|
||||||
//[e2024]~^ error: the trait bound `(): From<!>` is not satisfied
|
//[e2024]~^ error: the trait bound `(): From<!>` is not satisfied
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
// A macro_rules macro in 2015 that has an RPIT without `use<>` that would
|
||||||
|
// cause a problem with 2024 capturing rules.
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! macro_rpit {
|
||||||
|
() => {
|
||||||
|
fn test_mbe(x: &Vec<i32>) -> impl std::fmt::Display {
|
||||||
|
x[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn from_mbe() {
|
||||||
|
let mut x = vec![];
|
||||||
|
x.push(1);
|
||||||
|
|
||||||
|
let element = test_mbe(&x);
|
||||||
|
x.push(2);
|
||||||
|
println!("{element}");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
29
tests/ui/impl-trait/precise-capturing/auxiliary/no-use-pm.rs
Normal file
29
tests/ui/impl-trait/precise-capturing/auxiliary/no-use-pm.rs
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
// A proc-macro in 2015 that has an RPIT without `use<>` that would cause a
|
||||||
|
// problem with 2024 capturing rules.
|
||||||
|
|
||||||
|
//@ force-host
|
||||||
|
//@ no-prefer-dynamic
|
||||||
|
|
||||||
|
#![crate_type = "proc-macro"]
|
||||||
|
|
||||||
|
extern crate proc_macro;
|
||||||
|
use proc_macro::TokenStream;
|
||||||
|
|
||||||
|
#[proc_macro]
|
||||||
|
pub fn pm_rpit(input: TokenStream) -> TokenStream {
|
||||||
|
"fn test_pm(x: &Vec<i32>) -> impl std::fmt::Display {
|
||||||
|
x[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn from_pm() {
|
||||||
|
let mut x = vec![];
|
||||||
|
x.push(1);
|
||||||
|
|
||||||
|
let element = test_pm(&x);
|
||||||
|
x.push(2);
|
||||||
|
println!(\"{element}\");
|
||||||
|
}
|
||||||
|
"
|
||||||
|
.parse()
|
||||||
|
.unwrap()
|
||||||
|
}
|
26
tests/ui/impl-trait/precise-capturing/external-macro.rs
Normal file
26
tests/ui/impl-trait/precise-capturing/external-macro.rs
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
// Tests that code generated from an external macro (MBE and proc-macro) that
|
||||||
|
// has an RPIT will not fail when the call-site is 2024.
|
||||||
|
// https://github.com/rust-lang/rust/issues/132917
|
||||||
|
|
||||||
|
//@ aux-crate: no_use_pm=no-use-pm.rs
|
||||||
|
//@ aux-crate: no_use_macro=no-use-macro.rs
|
||||||
|
//@ edition: 2024
|
||||||
|
//@ compile-flags:-Z unstable-options
|
||||||
|
//@ check-pass
|
||||||
|
|
||||||
|
no_use_pm::pm_rpit!{}
|
||||||
|
|
||||||
|
no_use_macro::macro_rpit!{}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let mut x = vec![];
|
||||||
|
x.push(1);
|
||||||
|
|
||||||
|
let element = test_pm(&x);
|
||||||
|
x.push(2);
|
||||||
|
println!("{element}");
|
||||||
|
|
||||||
|
let element = test_mbe(&x);
|
||||||
|
x.push(2);
|
||||||
|
println!("{element}");
|
||||||
|
}
|
|
@ -10,7 +10,7 @@
|
||||||
unused_mut,
|
unused_mut,
|
||||||
unused_variables
|
unused_variables
|
||||||
)]
|
)]
|
||||||
#![deny(unused_parens)]
|
#![deny(unused_parens, unused_braces)]
|
||||||
|
|
||||||
fn lint_on_top_level() {
|
fn lint_on_top_level() {
|
||||||
let a = 0; //~ ERROR unnecessary parentheses around pattern
|
let a = 0; //~ ERROR unnecessary parentheses around pattern
|
||||||
|
@ -43,8 +43,10 @@ fn no_lint_ops() {
|
||||||
fn lint_break_if_not_followed_by_block() {
|
fn lint_break_if_not_followed_by_block() {
|
||||||
#![allow(unreachable_code)]
|
#![allow(unreachable_code)]
|
||||||
loop { if break {} } //~ ERROR unnecessary parentheses
|
loop { if break {} } //~ ERROR unnecessary parentheses
|
||||||
loop { if break ({ println!("hello") }) {} } //~ ERROR unnecessary parentheses
|
loop { if break { println!("hello") } {} }
|
||||||
loop { if (break { println!("hello") }) {} }
|
//~^ ERROR unnecessary parentheses around `if` condition
|
||||||
|
//~| ERROR unnecessary parentheses around `break` value
|
||||||
|
loop { if (break println!("hello")) {} } //~ ERROR unnecessary braces around `break` value
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't lint in these cases (#64106).
|
// Don't lint in these cases (#64106).
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
unused_mut,
|
unused_mut,
|
||||||
unused_variables
|
unused_variables
|
||||||
)]
|
)]
|
||||||
#![deny(unused_parens)]
|
#![deny(unused_parens, unused_braces)]
|
||||||
|
|
||||||
fn lint_on_top_level() {
|
fn lint_on_top_level() {
|
||||||
let (a) = 0; //~ ERROR unnecessary parentheses around pattern
|
let (a) = 0; //~ ERROR unnecessary parentheses around pattern
|
||||||
|
@ -43,8 +43,10 @@ fn no_lint_ops() {
|
||||||
fn lint_break_if_not_followed_by_block() {
|
fn lint_break_if_not_followed_by_block() {
|
||||||
#![allow(unreachable_code)]
|
#![allow(unreachable_code)]
|
||||||
loop { if (break) {} } //~ ERROR unnecessary parentheses
|
loop { if (break) {} } //~ ERROR unnecessary parentheses
|
||||||
loop { if (break ({ println!("hello") })) {} } //~ ERROR unnecessary parentheses
|
loop { if (break ({ println!("hello") })) {} }
|
||||||
loop { if (break { println!("hello") }) {} }
|
//~^ ERROR unnecessary parentheses around `if` condition
|
||||||
|
//~| ERROR unnecessary parentheses around `break` value
|
||||||
|
loop { if (break { println!("hello") }) {} } //~ ERROR unnecessary braces around `break` value
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't lint in these cases (#64106).
|
// Don't lint in these cases (#64106).
|
||||||
|
|
|
@ -7,7 +7,7 @@ LL | let (a) = 0;
|
||||||
note: the lint level is defined here
|
note: the lint level is defined here
|
||||||
--> $DIR/issue-54538-unused-parens-lint.rs:13:9
|
--> $DIR/issue-54538-unused-parens-lint.rs:13:9
|
||||||
|
|
|
|
||||||
LL | #![deny(unused_parens)]
|
LL | #![deny(unused_parens, unused_braces)]
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^
|
||||||
help: remove these parentheses
|
help: remove these parentheses
|
||||||
|
|
|
|
||||||
|
@ -99,8 +99,37 @@ LL - loop { if (break ({ println!("hello") })) {} }
|
||||||
LL + loop { if break ({ println!("hello") }) {} }
|
LL + loop { if break ({ println!("hello") }) {} }
|
||||||
|
|
|
|
||||||
|
|
||||||
|
error: unnecessary parentheses around `break` value
|
||||||
|
--> $DIR/issue-54538-unused-parens-lint.rs:46:22
|
||||||
|
|
|
||||||
|
LL | loop { if (break ({ println!("hello") })) {} }
|
||||||
|
| ^ ^
|
||||||
|
|
|
||||||
|
help: remove these parentheses
|
||||||
|
|
|
||||||
|
LL - loop { if (break ({ println!("hello") })) {} }
|
||||||
|
LL + loop { if (break { println!("hello") }) {} }
|
||||||
|
|
|
||||||
|
|
||||||
|
error: unnecessary braces around `break` value
|
||||||
|
--> $DIR/issue-54538-unused-parens-lint.rs:49:22
|
||||||
|
|
|
||||||
|
LL | loop { if (break { println!("hello") }) {} }
|
||||||
|
| ^^ ^^
|
||||||
|
|
|
||||||
|
note: the lint level is defined here
|
||||||
|
--> $DIR/issue-54538-unused-parens-lint.rs:13:24
|
||||||
|
|
|
||||||
|
LL | #![deny(unused_parens, unused_braces)]
|
||||||
|
| ^^^^^^^^^^^^^
|
||||||
|
help: remove these braces
|
||||||
|
|
|
||||||
|
LL - loop { if (break { println!("hello") }) {} }
|
||||||
|
LL + loop { if (break println!("hello")) {} }
|
||||||
|
|
|
||||||
|
|
||||||
error: unnecessary parentheses around pattern
|
error: unnecessary parentheses around pattern
|
||||||
--> $DIR/issue-54538-unused-parens-lint.rs:71:12
|
--> $DIR/issue-54538-unused-parens-lint.rs:73:12
|
||||||
|
|
|
|
||||||
LL | if let (0 | 1) = 0 {}
|
LL | if let (0 | 1) = 0 {}
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
@ -112,7 +141,7 @@ LL + if let 0 | 1 = 0 {}
|
||||||
|
|
|
|
||||||
|
|
||||||
error: unnecessary parentheses around pattern
|
error: unnecessary parentheses around pattern
|
||||||
--> $DIR/issue-54538-unused-parens-lint.rs:72:13
|
--> $DIR/issue-54538-unused-parens-lint.rs:74:13
|
||||||
|
|
|
|
||||||
LL | if let ((0 | 1),) = (0,) {}
|
LL | if let ((0 | 1),) = (0,) {}
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
@ -124,7 +153,7 @@ LL + if let (0 | 1,) = (0,) {}
|
||||||
|
|
|
|
||||||
|
|
||||||
error: unnecessary parentheses around pattern
|
error: unnecessary parentheses around pattern
|
||||||
--> $DIR/issue-54538-unused-parens-lint.rs:73:13
|
--> $DIR/issue-54538-unused-parens-lint.rs:75:13
|
||||||
|
|
|
|
||||||
LL | if let [(0 | 1)] = [0] {}
|
LL | if let [(0 | 1)] = [0] {}
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
@ -136,7 +165,7 @@ LL + if let [0 | 1] = [0] {}
|
||||||
|
|
|
|
||||||
|
|
||||||
error: unnecessary parentheses around pattern
|
error: unnecessary parentheses around pattern
|
||||||
--> $DIR/issue-54538-unused-parens-lint.rs:74:16
|
--> $DIR/issue-54538-unused-parens-lint.rs:76:16
|
||||||
|
|
|
|
||||||
LL | if let 0 | (1 | 2) = 0 {}
|
LL | if let 0 | (1 | 2) = 0 {}
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
@ -148,7 +177,7 @@ LL + if let 0 | 1 | 2 = 0 {}
|
||||||
|
|
|
|
||||||
|
|
||||||
error: unnecessary parentheses around pattern
|
error: unnecessary parentheses around pattern
|
||||||
--> $DIR/issue-54538-unused-parens-lint.rs:76:15
|
--> $DIR/issue-54538-unused-parens-lint.rs:78:15
|
||||||
|
|
|
|
||||||
LL | if let TS((0 | 1)) = TS(0) {}
|
LL | if let TS((0 | 1)) = TS(0) {}
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
@ -160,7 +189,7 @@ LL + if let TS(0 | 1) = TS(0) {}
|
||||||
|
|
|
|
||||||
|
|
||||||
error: unnecessary parentheses around pattern
|
error: unnecessary parentheses around pattern
|
||||||
--> $DIR/issue-54538-unused-parens-lint.rs:78:20
|
--> $DIR/issue-54538-unused-parens-lint.rs:80:20
|
||||||
|
|
|
|
||||||
LL | if let NS { f: (0 | 1) } = (NS { f: 0 }) {}
|
LL | if let NS { f: (0 | 1) } = (NS { f: 0 }) {}
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
@ -172,7 +201,7 @@ LL + if let NS { f: 0 | 1 } = (NS { f: 0 }) {}
|
||||||
|
|
|
|
||||||
|
|
||||||
error: unnecessary parentheses around pattern
|
error: unnecessary parentheses around pattern
|
||||||
--> $DIR/issue-54538-unused-parens-lint.rs:88:9
|
--> $DIR/issue-54538-unused-parens-lint.rs:90:9
|
||||||
|
|
|
|
||||||
LL | (_) => {}
|
LL | (_) => {}
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
@ -184,7 +213,7 @@ LL + _ => {}
|
||||||
|
|
|
|
||||||
|
|
||||||
error: unnecessary parentheses around pattern
|
error: unnecessary parentheses around pattern
|
||||||
--> $DIR/issue-54538-unused-parens-lint.rs:89:9
|
--> $DIR/issue-54538-unused-parens-lint.rs:91:9
|
||||||
|
|
|
|
||||||
LL | (y) => {}
|
LL | (y) => {}
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
@ -196,7 +225,7 @@ LL + y => {}
|
||||||
|
|
|
|
||||||
|
|
||||||
error: unnecessary parentheses around pattern
|
error: unnecessary parentheses around pattern
|
||||||
--> $DIR/issue-54538-unused-parens-lint.rs:90:9
|
--> $DIR/issue-54538-unused-parens-lint.rs:92:9
|
||||||
|
|
|
|
||||||
LL | (ref r) => {}
|
LL | (ref r) => {}
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
@ -208,7 +237,7 @@ LL + ref r => {}
|
||||||
|
|
|
|
||||||
|
|
||||||
error: unnecessary parentheses around pattern
|
error: unnecessary parentheses around pattern
|
||||||
--> $DIR/issue-54538-unused-parens-lint.rs:91:9
|
--> $DIR/issue-54538-unused-parens-lint.rs:93:9
|
||||||
|
|
|
|
||||||
LL | (e @ 1...2) => {}
|
LL | (e @ 1...2) => {}
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
@ -220,7 +249,7 @@ LL + e @ 1...2 => {}
|
||||||
|
|
|
|
||||||
|
|
||||||
error: unnecessary parentheses around pattern
|
error: unnecessary parentheses around pattern
|
||||||
--> $DIR/issue-54538-unused-parens-lint.rs:97:9
|
--> $DIR/issue-54538-unused-parens-lint.rs:99:9
|
||||||
|
|
|
|
||||||
LL | (e @ &(1...2)) => {}
|
LL | (e @ &(1...2)) => {}
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
@ -232,7 +261,7 @@ LL + e @ &(1...2) => {}
|
||||||
|
|
|
|
||||||
|
|
||||||
error: unnecessary parentheses around pattern
|
error: unnecessary parentheses around pattern
|
||||||
--> $DIR/issue-54538-unused-parens-lint.rs:98:10
|
--> $DIR/issue-54538-unused-parens-lint.rs:100:10
|
||||||
|
|
|
|
||||||
LL | &(_) => {}
|
LL | &(_) => {}
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
@ -244,7 +273,7 @@ LL + &_ => {}
|
||||||
|
|
|
|
||||||
|
|
||||||
error: unnecessary parentheses around pattern
|
error: unnecessary parentheses around pattern
|
||||||
--> $DIR/issue-54538-unused-parens-lint.rs:109:9
|
--> $DIR/issue-54538-unused-parens-lint.rs:111:9
|
||||||
|
|
|
|
||||||
LL | (_) => {}
|
LL | (_) => {}
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
@ -256,7 +285,7 @@ LL + _ => {}
|
||||||
|
|
|
|
||||||
|
|
||||||
error: unnecessary parentheses around pattern
|
error: unnecessary parentheses around pattern
|
||||||
--> $DIR/issue-54538-unused-parens-lint.rs:110:9
|
--> $DIR/issue-54538-unused-parens-lint.rs:112:9
|
||||||
|
|
|
|
||||||
LL | (y) => {}
|
LL | (y) => {}
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
@ -268,7 +297,7 @@ LL + y => {}
|
||||||
|
|
|
|
||||||
|
|
||||||
error: unnecessary parentheses around pattern
|
error: unnecessary parentheses around pattern
|
||||||
--> $DIR/issue-54538-unused-parens-lint.rs:111:9
|
--> $DIR/issue-54538-unused-parens-lint.rs:113:9
|
||||||
|
|
|
|
||||||
LL | (ref r) => {}
|
LL | (ref r) => {}
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
@ -280,7 +309,7 @@ LL + ref r => {}
|
||||||
|
|
|
|
||||||
|
|
||||||
error: unnecessary parentheses around pattern
|
error: unnecessary parentheses around pattern
|
||||||
--> $DIR/issue-54538-unused-parens-lint.rs:112:9
|
--> $DIR/issue-54538-unused-parens-lint.rs:114:9
|
||||||
|
|
|
|
||||||
LL | (e @ 1..=2) => {}
|
LL | (e @ 1..=2) => {}
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
@ -292,7 +321,7 @@ LL + e @ 1..=2 => {}
|
||||||
|
|
|
|
||||||
|
|
||||||
error: unnecessary parentheses around pattern
|
error: unnecessary parentheses around pattern
|
||||||
--> $DIR/issue-54538-unused-parens-lint.rs:118:9
|
--> $DIR/issue-54538-unused-parens-lint.rs:120:9
|
||||||
|
|
|
|
||||||
LL | (e @ &(1..=2)) => {}
|
LL | (e @ &(1..=2)) => {}
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
@ -304,7 +333,7 @@ LL + e @ &(1..=2) => {}
|
||||||
|
|
|
|
||||||
|
|
||||||
error: unnecessary parentheses around pattern
|
error: unnecessary parentheses around pattern
|
||||||
--> $DIR/issue-54538-unused-parens-lint.rs:119:10
|
--> $DIR/issue-54538-unused-parens-lint.rs:121:10
|
||||||
|
|
|
|
||||||
LL | &(_) => {}
|
LL | &(_) => {}
|
||||||
| ^ ^
|
| ^ ^
|
||||||
|
@ -315,5 +344,5 @@ LL - &(_) => {}
|
||||||
LL + &_ => {}
|
LL + &_ => {}
|
||||||
|
|
|
|
||||||
|
|
||||||
error: aborting due to 26 previous errors
|
error: aborting due to 28 previous errors
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
//@ run-rustfix
|
||||||
|
#![deny(unused_parens)]
|
||||||
|
#![allow(unreachable_code)]
|
||||||
|
|
||||||
|
fn foo() {
|
||||||
|
loop {
|
||||||
|
break (_ = 42);
|
||||||
|
// lint unused_parens should not be triggered here.
|
||||||
|
}
|
||||||
|
|
||||||
|
let _ = loop {
|
||||||
|
let a = 1;
|
||||||
|
let b = 2;
|
||||||
|
break a + b; //~ERROR unnecessary parentheses
|
||||||
|
};
|
||||||
|
|
||||||
|
loop {
|
||||||
|
if break return () {
|
||||||
|
//~^ ERROR unnecessary parentheses
|
||||||
|
}
|
||||||
|
if break return () {
|
||||||
|
//~^ ERROR unnecessary parentheses
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (_ = 42);
|
||||||
|
// lint unused_parens should not be triggered here.
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let _ = foo();
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
//@ run-rustfix
|
||||||
|
#![deny(unused_parens)]
|
||||||
|
#![allow(unreachable_code)]
|
||||||
|
|
||||||
|
fn foo() {
|
||||||
|
loop {
|
||||||
|
break (_ = 42);
|
||||||
|
// lint unused_parens should not be triggered here.
|
||||||
|
}
|
||||||
|
|
||||||
|
let _ = loop {
|
||||||
|
let a = 1;
|
||||||
|
let b = 2;
|
||||||
|
break (a + b); //~ERROR unnecessary parentheses
|
||||||
|
};
|
||||||
|
|
||||||
|
loop {
|
||||||
|
if (break return ()) {
|
||||||
|
//~^ ERROR unnecessary parentheses
|
||||||
|
}
|
||||||
|
if break (return ()) {
|
||||||
|
//~^ ERROR unnecessary parentheses
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (_ = 42);
|
||||||
|
// lint unused_parens should not be triggered here.
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let _ = foo();
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
error: unnecessary parentheses around `break` value
|
||||||
|
--> $DIR/unused-parens-assign-expr-in-ret-issue-131989.rs:14:15
|
||||||
|
|
|
||||||
|
LL | break (a + b);
|
||||||
|
| ^ ^
|
||||||
|
|
|
||||||
|
note: the lint level is defined here
|
||||||
|
--> $DIR/unused-parens-assign-expr-in-ret-issue-131989.rs:2:9
|
||||||
|
|
|
||||||
|
LL | #![deny(unused_parens)]
|
||||||
|
| ^^^^^^^^^^^^^
|
||||||
|
help: remove these parentheses
|
||||||
|
|
|
||||||
|
LL - break (a + b);
|
||||||
|
LL + break a + b;
|
||||||
|
|
|
||||||
|
|
||||||
|
error: unnecessary parentheses around `if` condition
|
||||||
|
--> $DIR/unused-parens-assign-expr-in-ret-issue-131989.rs:18:12
|
||||||
|
|
|
||||||
|
LL | if (break return ()) {
|
||||||
|
| ^ ^
|
||||||
|
|
|
||||||
|
help: remove these parentheses
|
||||||
|
|
|
||||||
|
LL - if (break return ()) {
|
||||||
|
LL + if break return () {
|
||||||
|
|
|
||||||
|
|
||||||
|
error: unnecessary parentheses around `break` value
|
||||||
|
--> $DIR/unused-parens-assign-expr-in-ret-issue-131989.rs:21:18
|
||||||
|
|
|
||||||
|
LL | if break (return ()) {
|
||||||
|
| ^ ^
|
||||||
|
|
|
||||||
|
help: remove these parentheses
|
||||||
|
|
|
||||||
|
LL - if break (return ()) {
|
||||||
|
LL + if break return () {
|
||||||
|
|
|
||||||
|
|
||||||
|
error: aborting due to 3 previous errors
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
// test of the JSON error format.
|
// test of the JSON error format.
|
||||||
|
|
||||||
#![deny(unused_parens)]
|
#![deny(unused_parens)]
|
||||||
#![allow(unreachable_code)]
|
#![allow(unreachable_code, unused_braces)]
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
// We want to suggest the properly-balanced expression `1 / (2 + 3)`, not
|
// We want to suggest the properly-balanced expression `1 / (2 + 3)`, not
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
// test of the JSON error format.
|
// test of the JSON error format.
|
||||||
|
|
||||||
#![deny(unused_parens)]
|
#![deny(unused_parens)]
|
||||||
#![allow(unreachable_code)]
|
#![allow(unreachable_code, unused_braces)]
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
// We want to suggest the properly-balanced expression `1 / (2 + 3)`, not
|
// We want to suggest the properly-balanced expression `1 / (2 + 3)`, not
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{"$message_type":"diagnostic","message":"unnecessary parentheses around assigned value","code":{"code":"unused_parens","explanation":null},"level":"error","spans":[{"file_name":"$DIR/unused_parens_json_suggestion.rs","byte_start":621,"byte_end":622,"line_start":17,"line_end":17,"column_start":14,"column_end":15,"is_primary":true,"text":[{"text":" let _a = (1 / (2 + 3));","highlight_start":14,"highlight_end":15}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"$DIR/unused_parens_json_suggestion.rs","byte_start":633,"byte_end":634,"line_start":17,"line_end":17,"column_start":26,"column_end":27,"is_primary":true,"text":[{"text":" let _a = (1 / (2 + 3));","highlight_start":26,"highlight_end":27}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"the lint level is defined here","code":null,"level":"note","spans":[{"file_name":"$DIR/unused_parens_json_suggestion.rs","byte_start":439,"byte_end":452,"line_start":11,"line_end":11,"column_start":9,"column_end":22,"is_primary":true,"text":[{"text":"#![deny(unused_parens)]","highlight_start":9,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":null},{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_json_suggestion.rs","byte_start":621,"byte_end":622,"line_start":17,"line_end":17,"column_start":14,"column_end":15,"is_primary":true,"text":[{"text":" let _a = (1 / (2 + 3));","highlight_start":14,"highlight_end":15}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"$DIR/unused_parens_json_suggestion.rs","byte_start":633,"byte_end":634,"line_start":17,"line_end":17,"column_start":26,"column_end":27,"is_primary":true,"text":[{"text":" let _a = (1 / (2 + 3));","highlight_start":26,"highlight_end":27}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: unnecessary parentheses around assigned value
|
{"$message_type":"diagnostic","message":"unnecessary parentheses around assigned value","code":{"code":"unused_parens","explanation":null},"level":"error","spans":[{"file_name":"$DIR/unused_parens_json_suggestion.rs","byte_start":636,"byte_end":637,"line_start":17,"line_end":17,"column_start":14,"column_end":15,"is_primary":true,"text":[{"text":" let _a = (1 / (2 + 3));","highlight_start":14,"highlight_end":15}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"$DIR/unused_parens_json_suggestion.rs","byte_start":648,"byte_end":649,"line_start":17,"line_end":17,"column_start":26,"column_end":27,"is_primary":true,"text":[{"text":" let _a = (1 / (2 + 3));","highlight_start":26,"highlight_end":27}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"the lint level is defined here","code":null,"level":"note","spans":[{"file_name":"$DIR/unused_parens_json_suggestion.rs","byte_start":439,"byte_end":452,"line_start":11,"line_end":11,"column_start":9,"column_end":22,"is_primary":true,"text":[{"text":"#![deny(unused_parens)]","highlight_start":9,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":null},{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_json_suggestion.rs","byte_start":636,"byte_end":637,"line_start":17,"line_end":17,"column_start":14,"column_end":15,"is_primary":true,"text":[{"text":" let _a = (1 / (2 + 3));","highlight_start":14,"highlight_end":15}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"$DIR/unused_parens_json_suggestion.rs","byte_start":648,"byte_end":649,"line_start":17,"line_end":17,"column_start":26,"column_end":27,"is_primary":true,"text":[{"text":" let _a = (1 / (2 + 3));","highlight_start":26,"highlight_end":27}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: unnecessary parentheses around assigned value
|
||||||
--> $DIR/unused_parens_json_suggestion.rs:17:14
|
--> $DIR/unused_parens_json_suggestion.rs:17:14
|
||||||
|
|
|
|
||||||
LL | let _a = (1 / (2 + 3));
|
LL | let _a = (1 / (2 + 3));
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
// test of the JSON error format.
|
// test of the JSON error format.
|
||||||
|
|
||||||
#![deny(unused_parens)]
|
#![deny(unused_parens)]
|
||||||
#![allow(unreachable_code)]
|
#![allow(unreachable_code, unused_braces)]
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
// test of the JSON error format.
|
// test of the JSON error format.
|
||||||
|
|
||||||
#![deny(unused_parens)]
|
#![deny(unused_parens)]
|
||||||
#![allow(unreachable_code)]
|
#![allow(unreachable_code, unused_braces)]
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{"$message_type":"diagnostic","message":"unnecessary parentheses around `if` condition","code":{"code":"unused_parens","explanation":null},"level":"error","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":525,"byte_end":526,"line_start":18,"line_end":18,"column_start":8,"column_end":9,"is_primary":true,"text":[{"text":" if (_b) {","highlight_start":8,"highlight_end":9}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":528,"byte_end":529,"line_start":18,"line_end":18,"column_start":11,"column_end":12,"is_primary":true,"text":[{"text":" if (_b) {","highlight_start":11,"highlight_end":12}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"the lint level is defined here","code":null,"level":"note","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":439,"byte_end":452,"line_start":11,"line_end":11,"column_start":9,"column_end":22,"is_primary":true,"text":[{"text":"#![deny(unused_parens)]","highlight_start":9,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":null},{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":525,"byte_end":526,"line_start":18,"line_end":18,"column_start":8,"column_end":9,"is_primary":true,"text":[{"text":" if (_b) {","highlight_start":8,"highlight_end":9}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":528,"byte_end":529,"line_start":18,"line_end":18,"column_start":11,"column_end":12,"is_primary":true,"text":[{"text":" if (_b) {","highlight_start":11,"highlight_end":12}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: unnecessary parentheses around `if` condition
|
{"$message_type":"diagnostic","message":"unnecessary parentheses around `if` condition","code":{"code":"unused_parens","explanation":null},"level":"error","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":540,"byte_end":541,"line_start":18,"line_end":18,"column_start":8,"column_end":9,"is_primary":true,"text":[{"text":" if (_b) {","highlight_start":8,"highlight_end":9}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":543,"byte_end":544,"line_start":18,"line_end":18,"column_start":11,"column_end":12,"is_primary":true,"text":[{"text":" if (_b) {","highlight_start":11,"highlight_end":12}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"the lint level is defined here","code":null,"level":"note","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":439,"byte_end":452,"line_start":11,"line_end":11,"column_start":9,"column_end":22,"is_primary":true,"text":[{"text":"#![deny(unused_parens)]","highlight_start":9,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":null},{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":540,"byte_end":541,"line_start":18,"line_end":18,"column_start":8,"column_end":9,"is_primary":true,"text":[{"text":" if (_b) {","highlight_start":8,"highlight_end":9}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":543,"byte_end":544,"line_start":18,"line_end":18,"column_start":11,"column_end":12,"is_primary":true,"text":[{"text":" if (_b) {","highlight_start":11,"highlight_end":12}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: unnecessary parentheses around `if` condition
|
||||||
--> $DIR/unused_parens_remove_json_suggestion.rs:18:8
|
--> $DIR/unused_parens_remove_json_suggestion.rs:18:8
|
||||||
|
|
|
|
||||||
LL | if (_b) {
|
LL | if (_b) {
|
||||||
|
@ -16,7 +16,7 @@ LL + if _b {
|
||||||
|
|
|
|
||||||
|
|
||||||
"}
|
"}
|
||||||
{"$message_type":"diagnostic","message":"unnecessary parentheses around `if` condition","code":{"code":"unused_parens","explanation":null},"level":"error","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":622,"byte_end":623,"line_start":29,"line_end":29,"column_start":7,"column_end":8,"is_primary":true,"text":[{"text":" if(c) {","highlight_start":7,"highlight_end":8}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":624,"byte_end":625,"line_start":29,"line_end":29,"column_start":9,"column_end":10,"is_primary":true,"text":[{"text":" if(c) {","highlight_start":9,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":622,"byte_end":623,"line_start":29,"line_end":29,"column_start":7,"column_end":8,"is_primary":true,"text":[{"text":" if(c) {","highlight_start":7,"highlight_end":8}],"label":null,"suggested_replacement":" ","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":624,"byte_end":625,"line_start":29,"line_end":29,"column_start":9,"column_end":10,"is_primary":true,"text":[{"text":" if(c) {","highlight_start":9,"highlight_end":10}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: unnecessary parentheses around `if` condition
|
{"$message_type":"diagnostic","message":"unnecessary parentheses around `if` condition","code":{"code":"unused_parens","explanation":null},"level":"error","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":637,"byte_end":638,"line_start":29,"line_end":29,"column_start":7,"column_end":8,"is_primary":true,"text":[{"text":" if(c) {","highlight_start":7,"highlight_end":8}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":639,"byte_end":640,"line_start":29,"line_end":29,"column_start":9,"column_end":10,"is_primary":true,"text":[{"text":" if(c) {","highlight_start":9,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":637,"byte_end":638,"line_start":29,"line_end":29,"column_start":7,"column_end":8,"is_primary":true,"text":[{"text":" if(c) {","highlight_start":7,"highlight_end":8}],"label":null,"suggested_replacement":" ","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":639,"byte_end":640,"line_start":29,"line_end":29,"column_start":9,"column_end":10,"is_primary":true,"text":[{"text":" if(c) {","highlight_start":9,"highlight_end":10}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: unnecessary parentheses around `if` condition
|
||||||
--> $DIR/unused_parens_remove_json_suggestion.rs:29:7
|
--> $DIR/unused_parens_remove_json_suggestion.rs:29:7
|
||||||
|
|
|
|
||||||
LL | if(c) {
|
LL | if(c) {
|
||||||
|
@ -29,7 +29,7 @@ LL + if c {
|
||||||
|
|
|
|
||||||
|
|
||||||
"}
|
"}
|
||||||
{"$message_type":"diagnostic","message":"unnecessary parentheses around `if` condition","code":{"code":"unused_parens","explanation":null},"level":"error","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":668,"byte_end":669,"line_start":33,"line_end":33,"column_start":8,"column_end":9,"is_primary":true,"text":[{"text":" if (c){","highlight_start":8,"highlight_end":9}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":670,"byte_end":671,"line_start":33,"line_end":33,"column_start":10,"column_end":11,"is_primary":true,"text":[{"text":" if (c){","highlight_start":10,"highlight_end":11}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":668,"byte_end":669,"line_start":33,"line_end":33,"column_start":8,"column_end":9,"is_primary":true,"text":[{"text":" if (c){","highlight_start":8,"highlight_end":9}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":670,"byte_end":671,"line_start":33,"line_end":33,"column_start":10,"column_end":11,"is_primary":true,"text":[{"text":" if (c){","highlight_start":10,"highlight_end":11}],"label":null,"suggested_replacement":" ","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: unnecessary parentheses around `if` condition
|
{"$message_type":"diagnostic","message":"unnecessary parentheses around `if` condition","code":{"code":"unused_parens","explanation":null},"level":"error","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":683,"byte_end":684,"line_start":33,"line_end":33,"column_start":8,"column_end":9,"is_primary":true,"text":[{"text":" if (c){","highlight_start":8,"highlight_end":9}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":685,"byte_end":686,"line_start":33,"line_end":33,"column_start":10,"column_end":11,"is_primary":true,"text":[{"text":" if (c){","highlight_start":10,"highlight_end":11}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":683,"byte_end":684,"line_start":33,"line_end":33,"column_start":8,"column_end":9,"is_primary":true,"text":[{"text":" if (c){","highlight_start":8,"highlight_end":9}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":685,"byte_end":686,"line_start":33,"line_end":33,"column_start":10,"column_end":11,"is_primary":true,"text":[{"text":" if (c){","highlight_start":10,"highlight_end":11}],"label":null,"suggested_replacement":" ","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: unnecessary parentheses around `if` condition
|
||||||
--> $DIR/unused_parens_remove_json_suggestion.rs:33:8
|
--> $DIR/unused_parens_remove_json_suggestion.rs:33:8
|
||||||
|
|
|
|
||||||
LL | if (c){
|
LL | if (c){
|
||||||
|
@ -42,7 +42,7 @@ LL + if c {
|
||||||
|
|
|
|
||||||
|
|
||||||
"}
|
"}
|
||||||
{"$message_type":"diagnostic","message":"unnecessary parentheses around `while` condition","code":{"code":"unused_parens","explanation":null},"level":"error","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":716,"byte_end":717,"line_start":37,"line_end":37,"column_start":11,"column_end":12,"is_primary":true,"text":[{"text":" while (false && true){","highlight_start":11,"highlight_end":12}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":730,"byte_end":731,"line_start":37,"line_end":37,"column_start":25,"column_end":26,"is_primary":true,"text":[{"text":" while (false && true){","highlight_start":25,"highlight_end":26}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":716,"byte_end":717,"line_start":37,"line_end":37,"column_start":11,"column_end":12,"is_primary":true,"text":[{"text":" while (false && true){","highlight_start":11,"highlight_end":12}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":730,"byte_end":731,"line_start":37,"line_end":37,"column_start":25,"column_end":26,"is_primary":true,"text":[{"text":" while (false && true){","highlight_start":25,"highlight_end":26}],"label":null,"suggested_replacement":" ","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: unnecessary parentheses around `while` condition
|
{"$message_type":"diagnostic","message":"unnecessary parentheses around `while` condition","code":{"code":"unused_parens","explanation":null},"level":"error","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":731,"byte_end":732,"line_start":37,"line_end":37,"column_start":11,"column_end":12,"is_primary":true,"text":[{"text":" while (false && true){","highlight_start":11,"highlight_end":12}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":745,"byte_end":746,"line_start":37,"line_end":37,"column_start":25,"column_end":26,"is_primary":true,"text":[{"text":" while (false && true){","highlight_start":25,"highlight_end":26}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":731,"byte_end":732,"line_start":37,"line_end":37,"column_start":11,"column_end":12,"is_primary":true,"text":[{"text":" while (false && true){","highlight_start":11,"highlight_end":12}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":745,"byte_end":746,"line_start":37,"line_end":37,"column_start":25,"column_end":26,"is_primary":true,"text":[{"text":" while (false && true){","highlight_start":25,"highlight_end":26}],"label":null,"suggested_replacement":" ","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: unnecessary parentheses around `while` condition
|
||||||
--> $DIR/unused_parens_remove_json_suggestion.rs:37:11
|
--> $DIR/unused_parens_remove_json_suggestion.rs:37:11
|
||||||
|
|
|
|
||||||
LL | while (false && true){
|
LL | while (false && true){
|
||||||
|
@ -55,7 +55,7 @@ LL + while false && true {
|
||||||
|
|
|
|
||||||
|
|
||||||
"}
|
"}
|
||||||
{"$message_type":"diagnostic","message":"unnecessary parentheses around `if` condition","code":{"code":"unused_parens","explanation":null},"level":"error","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":744,"byte_end":745,"line_start":38,"line_end":38,"column_start":12,"column_end":13,"is_primary":true,"text":[{"text":" if (c) {","highlight_start":12,"highlight_end":13}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":746,"byte_end":747,"line_start":38,"line_end":38,"column_start":14,"column_end":15,"is_primary":true,"text":[{"text":" if (c) {","highlight_start":14,"highlight_end":15}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":744,"byte_end":745,"line_start":38,"line_end":38,"column_start":12,"column_end":13,"is_primary":true,"text":[{"text":" if (c) {","highlight_start":12,"highlight_end":13}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":746,"byte_end":747,"line_start":38,"line_end":38,"column_start":14,"column_end":15,"is_primary":true,"text":[{"text":" if (c) {","highlight_start":14,"highlight_end":15}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: unnecessary parentheses around `if` condition
|
{"$message_type":"diagnostic","message":"unnecessary parentheses around `if` condition","code":{"code":"unused_parens","explanation":null},"level":"error","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":759,"byte_end":760,"line_start":38,"line_end":38,"column_start":12,"column_end":13,"is_primary":true,"text":[{"text":" if (c) {","highlight_start":12,"highlight_end":13}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":761,"byte_end":762,"line_start":38,"line_end":38,"column_start":14,"column_end":15,"is_primary":true,"text":[{"text":" if (c) {","highlight_start":14,"highlight_end":15}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":759,"byte_end":760,"line_start":38,"line_end":38,"column_start":12,"column_end":13,"is_primary":true,"text":[{"text":" if (c) {","highlight_start":12,"highlight_end":13}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":761,"byte_end":762,"line_start":38,"line_end":38,"column_start":14,"column_end":15,"is_primary":true,"text":[{"text":" if (c) {","highlight_start":14,"highlight_end":15}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: unnecessary parentheses around `if` condition
|
||||||
--> $DIR/unused_parens_remove_json_suggestion.rs:38:12
|
--> $DIR/unused_parens_remove_json_suggestion.rs:38:12
|
||||||
|
|
|
|
||||||
LL | if (c) {
|
LL | if (c) {
|
||||||
|
@ -68,7 +68,7 @@ LL + if c {
|
||||||
|
|
|
|
||||||
|
|
||||||
"}
|
"}
|
||||||
{"$message_type":"diagnostic","message":"unnecessary parentheses around `while` condition","code":{"code":"unused_parens","explanation":null},"level":"error","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":807,"byte_end":808,"line_start":44,"line_end":44,"column_start":10,"column_end":11,"is_primary":true,"text":[{"text":" while(true && false) {","highlight_start":10,"highlight_end":11}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":821,"byte_end":822,"line_start":44,"line_end":44,"column_start":24,"column_end":25,"is_primary":true,"text":[{"text":" while(true && false) {","highlight_start":24,"highlight_end":25}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":807,"byte_end":808,"line_start":44,"line_end":44,"column_start":10,"column_end":11,"is_primary":true,"text":[{"text":" while(true && false) {","highlight_start":10,"highlight_end":11}],"label":null,"suggested_replacement":" ","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":821,"byte_end":822,"line_start":44,"line_end":44,"column_start":24,"column_end":25,"is_primary":true,"text":[{"text":" while(true && false) {","highlight_start":24,"highlight_end":25}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: unnecessary parentheses around `while` condition
|
{"$message_type":"diagnostic","message":"unnecessary parentheses around `while` condition","code":{"code":"unused_parens","explanation":null},"level":"error","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":822,"byte_end":823,"line_start":44,"line_end":44,"column_start":10,"column_end":11,"is_primary":true,"text":[{"text":" while(true && false) {","highlight_start":10,"highlight_end":11}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":836,"byte_end":837,"line_start":44,"line_end":44,"column_start":24,"column_end":25,"is_primary":true,"text":[{"text":" while(true && false) {","highlight_start":24,"highlight_end":25}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":822,"byte_end":823,"line_start":44,"line_end":44,"column_start":10,"column_end":11,"is_primary":true,"text":[{"text":" while(true && false) {","highlight_start":10,"highlight_end":11}],"label":null,"suggested_replacement":" ","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":836,"byte_end":837,"line_start":44,"line_end":44,"column_start":24,"column_end":25,"is_primary":true,"text":[{"text":" while(true && false) {","highlight_start":24,"highlight_end":25}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: unnecessary parentheses around `while` condition
|
||||||
--> $DIR/unused_parens_remove_json_suggestion.rs:44:10
|
--> $DIR/unused_parens_remove_json_suggestion.rs:44:10
|
||||||
|
|
|
|
||||||
LL | while(true && false) {
|
LL | while(true && false) {
|
||||||
|
@ -81,7 +81,7 @@ LL + while true && false {
|
||||||
|
|
|
|
||||||
|
|
||||||
"}
|
"}
|
||||||
{"$message_type":"diagnostic","message":"unnecessary parentheses around `for` iterator expression","code":{"code":"unused_parens","explanation":null},"level":"error","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":842,"byte_end":843,"line_start":45,"line_end":45,"column_start":18,"column_end":19,"is_primary":true,"text":[{"text":" for _ in (0 .. 3){","highlight_start":18,"highlight_end":19}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":849,"byte_end":850,"line_start":45,"line_end":45,"column_start":25,"column_end":26,"is_primary":true,"text":[{"text":" for _ in (0 .. 3){","highlight_start":25,"highlight_end":26}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":842,"byte_end":843,"line_start":45,"line_end":45,"column_start":18,"column_end":19,"is_primary":true,"text":[{"text":" for _ in (0 .. 3){","highlight_start":18,"highlight_end":19}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":849,"byte_end":850,"line_start":45,"line_end":45,"column_start":25,"column_end":26,"is_primary":true,"text":[{"text":" for _ in (0 .. 3){","highlight_start":25,"highlight_end":26}],"label":null,"suggested_replacement":" ","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: unnecessary parentheses around `for` iterator expression
|
{"$message_type":"diagnostic","message":"unnecessary parentheses around `for` iterator expression","code":{"code":"unused_parens","explanation":null},"level":"error","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":857,"byte_end":858,"line_start":45,"line_end":45,"column_start":18,"column_end":19,"is_primary":true,"text":[{"text":" for _ in (0 .. 3){","highlight_start":18,"highlight_end":19}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":864,"byte_end":865,"line_start":45,"line_end":45,"column_start":25,"column_end":26,"is_primary":true,"text":[{"text":" for _ in (0 .. 3){","highlight_start":25,"highlight_end":26}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":857,"byte_end":858,"line_start":45,"line_end":45,"column_start":18,"column_end":19,"is_primary":true,"text":[{"text":" for _ in (0 .. 3){","highlight_start":18,"highlight_end":19}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":864,"byte_end":865,"line_start":45,"line_end":45,"column_start":25,"column_end":26,"is_primary":true,"text":[{"text":" for _ in (0 .. 3){","highlight_start":25,"highlight_end":26}],"label":null,"suggested_replacement":" ","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: unnecessary parentheses around `for` iterator expression
|
||||||
--> $DIR/unused_parens_remove_json_suggestion.rs:45:18
|
--> $DIR/unused_parens_remove_json_suggestion.rs:45:18
|
||||||
|
|
|
|
||||||
LL | for _ in (0 .. 3){
|
LL | for _ in (0 .. 3){
|
||||||
|
@ -94,7 +94,7 @@ LL + for _ in 0 .. 3 {
|
||||||
|
|
|
|
||||||
|
|
||||||
"}
|
"}
|
||||||
{"$message_type":"diagnostic","message":"unnecessary parentheses around `for` iterator expression","code":{"code":"unused_parens","explanation":null},"level":"error","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":909,"byte_end":910,"line_start":50,"line_end":50,"column_start":14,"column_end":15,"is_primary":true,"text":[{"text":" for _ in (0 .. 3) {","highlight_start":14,"highlight_end":15}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":916,"byte_end":917,"line_start":50,"line_end":50,"column_start":21,"column_end":22,"is_primary":true,"text":[{"text":" for _ in (0 .. 3) {","highlight_start":21,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":909,"byte_end":910,"line_start":50,"line_end":50,"column_start":14,"column_end":15,"is_primary":true,"text":[{"text":" for _ in (0 .. 3) {","highlight_start":14,"highlight_end":15}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":916,"byte_end":917,"line_start":50,"line_end":50,"column_start":21,"column_end":22,"is_primary":true,"text":[{"text":" for _ in (0 .. 3) {","highlight_start":21,"highlight_end":22}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: unnecessary parentheses around `for` iterator expression
|
{"$message_type":"diagnostic","message":"unnecessary parentheses around `for` iterator expression","code":{"code":"unused_parens","explanation":null},"level":"error","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":924,"byte_end":925,"line_start":50,"line_end":50,"column_start":14,"column_end":15,"is_primary":true,"text":[{"text":" for _ in (0 .. 3) {","highlight_start":14,"highlight_end":15}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":931,"byte_end":932,"line_start":50,"line_end":50,"column_start":21,"column_end":22,"is_primary":true,"text":[{"text":" for _ in (0 .. 3) {","highlight_start":21,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":924,"byte_end":925,"line_start":50,"line_end":50,"column_start":14,"column_end":15,"is_primary":true,"text":[{"text":" for _ in (0 .. 3) {","highlight_start":14,"highlight_end":15}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":931,"byte_end":932,"line_start":50,"line_end":50,"column_start":21,"column_end":22,"is_primary":true,"text":[{"text":" for _ in (0 .. 3) {","highlight_start":21,"highlight_end":22}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: unnecessary parentheses around `for` iterator expression
|
||||||
--> $DIR/unused_parens_remove_json_suggestion.rs:50:14
|
--> $DIR/unused_parens_remove_json_suggestion.rs:50:14
|
||||||
|
|
|
|
||||||
LL | for _ in (0 .. 3) {
|
LL | for _ in (0 .. 3) {
|
||||||
|
@ -107,7 +107,7 @@ LL + for _ in 0 .. 3 {
|
||||||
|
|
|
|
||||||
|
|
||||||
"}
|
"}
|
||||||
{"$message_type":"diagnostic","message":"unnecessary parentheses around `while` condition","code":{"code":"unused_parens","explanation":null},"level":"error","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":934,"byte_end":935,"line_start":51,"line_end":51,"column_start":15,"column_end":16,"is_primary":true,"text":[{"text":" while (true && false) {","highlight_start":15,"highlight_end":16}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":948,"byte_end":949,"line_start":51,"line_end":51,"column_start":29,"column_end":30,"is_primary":true,"text":[{"text":" while (true && false) {","highlight_start":29,"highlight_end":30}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":934,"byte_end":935,"line_start":51,"line_end":51,"column_start":15,"column_end":16,"is_primary":true,"text":[{"text":" while (true && false) {","highlight_start":15,"highlight_end":16}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":948,"byte_end":949,"line_start":51,"line_end":51,"column_start":29,"column_end":30,"is_primary":true,"text":[{"text":" while (true && false) {","highlight_start":29,"highlight_end":30}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: unnecessary parentheses around `while` condition
|
{"$message_type":"diagnostic","message":"unnecessary parentheses around `while` condition","code":{"code":"unused_parens","explanation":null},"level":"error","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":949,"byte_end":950,"line_start":51,"line_end":51,"column_start":15,"column_end":16,"is_primary":true,"text":[{"text":" while (true && false) {","highlight_start":15,"highlight_end":16}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":963,"byte_end":964,"line_start":51,"line_end":51,"column_start":29,"column_end":30,"is_primary":true,"text":[{"text":" while (true && false) {","highlight_start":29,"highlight_end":30}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":949,"byte_end":950,"line_start":51,"line_end":51,"column_start":15,"column_end":16,"is_primary":true,"text":[{"text":" while (true && false) {","highlight_start":15,"highlight_end":16}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null},{"file_name":"$DIR/unused_parens_remove_json_suggestion.rs","byte_start":963,"byte_end":964,"line_start":51,"line_end":51,"column_start":29,"column_end":30,"is_primary":true,"text":[{"text":" while (true && false) {","highlight_start":29,"highlight_end":30}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"error: unnecessary parentheses around `while` condition
|
||||||
--> $DIR/unused_parens_remove_json_suggestion.rs:51:15
|
--> $DIR/unused_parens_remove_json_suggestion.rs:51:15
|
||||||
|
|
|
|
||||||
LL | while (true && false) {
|
LL | while (true && false) {
|
||||||
|
|
|
@ -4,7 +4,7 @@ warning: this function depends on never type fallback being `()`
|
||||||
LL | fn smeg() {
|
LL | fn smeg() {
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the types explicitly
|
= help: specify the types explicitly
|
||||||
note: in edition 2024, the requirement `!: ImplementedForUnitButNotNever` will fail
|
note: in edition 2024, the requirement `!: ImplementedForUnitButNotNever` will fail
|
||||||
|
|
|
@ -27,7 +27,7 @@ fn foo<T: ImplementedForUnitButNotNever>(_t: T) {}
|
||||||
//[fallback]~| NOTE required by a bound in `foo`
|
//[fallback]~| NOTE required by a bound in `foo`
|
||||||
fn smeg() {
|
fn smeg() {
|
||||||
//[nofallback]~^ warn: this function depends on never type fallback being `()`
|
//[nofallback]~^ warn: this function depends on never type fallback being `()`
|
||||||
//[nofallback]~| warn: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
//[nofallback]~| warn: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
let _x = return;
|
let _x = return;
|
||||||
foo(_x);
|
foo(_x);
|
||||||
//[fallback]~^ ERROR the trait bound
|
//[fallback]~^ ERROR the trait bound
|
||||||
|
|
|
@ -7,7 +7,7 @@ fn main() {
|
||||||
|
|
||||||
fn def() {
|
fn def() {
|
||||||
//~^ warn: this function depends on never type fallback being `()`
|
//~^ warn: this function depends on never type fallback being `()`
|
||||||
//~| warn: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
//~| warn: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
match true {
|
match true {
|
||||||
false => <_>::default(),
|
false => <_>::default(),
|
||||||
true => return,
|
true => return,
|
||||||
|
@ -18,7 +18,7 @@ fn def() {
|
||||||
// <https://github.com/rust-lang/rust/issues/39216>
|
// <https://github.com/rust-lang/rust/issues/39216>
|
||||||
fn question_mark() -> Result<(), ()> {
|
fn question_mark() -> Result<(), ()> {
|
||||||
//~^ warn: this function depends on never type fallback being `()`
|
//~^ warn: this function depends on never type fallback being `()`
|
||||||
//~| warn: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
//~| warn: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
deserialize()?;
|
deserialize()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ warning: this function depends on never type fallback being `()`
|
||||||
LL | fn def() {
|
LL | fn def() {
|
||||||
| ^^^^^^^^
|
| ^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the types explicitly
|
= help: specify the types explicitly
|
||||||
note: in edition 2024, the requirement `!: Default` will fail
|
note: in edition 2024, the requirement `!: Default` will fail
|
||||||
|
@ -24,7 +24,7 @@ warning: this function depends on never type fallback being `()`
|
||||||
LL | fn question_mark() -> Result<(), ()> {
|
LL | fn question_mark() -> Result<(), ()> {
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the types explicitly
|
= help: specify the types explicitly
|
||||||
note: in edition 2024, the requirement `!: Default` will fail
|
note: in edition 2024, the requirement `!: Default` will fail
|
||||||
|
|
|
@ -4,7 +4,7 @@ warning: this function depends on never type fallback being `()`
|
||||||
LL | fn assignment() {
|
LL | fn assignment() {
|
||||||
| ^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the types explicitly
|
= help: specify the types explicitly
|
||||||
note: in edition 2024, the requirement `!: UnitDefault` will fail
|
note: in edition 2024, the requirement `!: UnitDefault` will fail
|
||||||
|
@ -24,7 +24,7 @@ warning: this function depends on never type fallback being `()`
|
||||||
LL | fn assignment_rev() {
|
LL | fn assignment_rev() {
|
||||||
| ^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the types explicitly
|
= help: specify the types explicitly
|
||||||
note: in edition 2024, the requirement `!: UnitDefault` will fail
|
note: in edition 2024, the requirement `!: UnitDefault` will fail
|
||||||
|
|
|
@ -29,7 +29,7 @@ impl UnitDefault for () {
|
||||||
|
|
||||||
fn assignment() {
|
fn assignment() {
|
||||||
//[nofallback]~^ warn: this function depends on never type fallback being `()`
|
//[nofallback]~^ warn: this function depends on never type fallback being `()`
|
||||||
//[nofallback]~| warn: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
//[nofallback]~| warn: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
let x;
|
let x;
|
||||||
|
|
||||||
if true {
|
if true {
|
||||||
|
@ -41,7 +41,7 @@ fn assignment() {
|
||||||
|
|
||||||
fn assignment_rev() {
|
fn assignment_rev() {
|
||||||
//[nofallback]~^ warn: this function depends on never type fallback being `()`
|
//[nofallback]~^ warn: this function depends on never type fallback being `()`
|
||||||
//[nofallback]~| warn: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
//[nofallback]~| warn: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
let x;
|
let x;
|
||||||
|
|
||||||
if true {
|
if true {
|
||||||
|
|
|
@ -4,7 +4,7 @@ warning: this function depends on never type fallback being `()`
|
||||||
LL | fn main() {
|
LL | fn main() {
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the types explicitly
|
= help: specify the types explicitly
|
||||||
note: in edition 2024, the requirement `!: Test` will fail
|
note: in edition 2024, the requirement `!: Test` will fail
|
||||||
|
|
|
@ -13,7 +13,7 @@ fn unconstrained_arg<T: Test>(_: T) {}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
//[nofallback]~^ warn: this function depends on never type fallback being `()`
|
//[nofallback]~^ warn: this function depends on never type fallback being `()`
|
||||||
//[nofallback]~| warn: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
//[nofallback]~| warn: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
|
|
||||||
// Here the type variable falls back to `!`,
|
// Here the type variable falls back to `!`,
|
||||||
// and hence we get a type error.
|
// and hence we get a type error.
|
||||||
|
|
|
@ -4,7 +4,7 @@ warning: this function depends on never type fallback being `()`
|
||||||
LL | fn main() {
|
LL | fn main() {
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the types explicitly
|
= help: specify the types explicitly
|
||||||
note: in edition 2024, the requirement `!: UnitReturn` will fail
|
note: in edition 2024, the requirement `!: UnitReturn` will fail
|
||||||
|
|
|
@ -27,7 +27,7 @@ fn unconstrained_return<T: UnitReturn>() -> T {
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
//[nofallback]~^ warn: this function depends on never type fallback being `()`
|
//[nofallback]~^ warn: this function depends on never type fallback being `()`
|
||||||
//[nofallback]~| warn: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
//[nofallback]~| warn: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
|
|
||||||
// In Ye Olde Days, the `T` parameter of `unconstrained_return`
|
// In Ye Olde Days, the `T` parameter of `unconstrained_return`
|
||||||
// winds up "entangled" with the `!` type that results from
|
// winds up "entangled" with the `!` type that results from
|
||||||
|
|
|
@ -4,7 +4,7 @@ warning: this function depends on never type fallback being `()`
|
||||||
LL | fn main() {
|
LL | fn main() {
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the types explicitly
|
= help: specify the types explicitly
|
||||||
note: in edition 2024, the requirement `!: Bar` will fail
|
note: in edition 2024, the requirement `!: Bar` will fail
|
||||||
|
|
|
@ -20,6 +20,6 @@ fn foo<R: Bar>(_: impl Fn() -> R) {}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
//[nofallback]~^ warn: this function depends on never type fallback being `()`
|
//[nofallback]~^ warn: this function depends on never type fallback being `()`
|
||||||
//[nofallback]~| warn: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
//[nofallback]~| warn: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
foo(|| panic!());
|
foo(|| panic!());
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,6 @@ impl T for () {}
|
||||||
|
|
||||||
fn should_ret_unit() -> impl T {
|
fn should_ret_unit() -> impl T {
|
||||||
//~^ warn: this function depends on never type fallback being `()`
|
//~^ warn: this function depends on never type fallback being `()`
|
||||||
//~| warn: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
//~| warn: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
panic!()
|
panic!()
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ warning: this function depends on never type fallback being `()`
|
||||||
LL | fn should_ret_unit() -> impl T {
|
LL | fn should_ret_unit() -> impl T {
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the types explicitly
|
= help: specify the types explicitly
|
||||||
note: in edition 2024, the requirement `!: T` will fail
|
note: in edition 2024, the requirement `!: T` will fail
|
||||||
|
|
|
@ -4,7 +4,7 @@ warning: never type fallback affects this call to an `unsafe` function
|
||||||
LL | unsafe { mem::zeroed() }
|
LL | unsafe { mem::zeroed() }
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this will change its meaning in a future release!
|
= warning: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the type explicitly
|
= help: specify the type explicitly
|
||||||
= note: `#[warn(never_type_fallback_flowing_into_unsafe)]` on by default
|
= note: `#[warn(never_type_fallback_flowing_into_unsafe)]` on by default
|
||||||
|
@ -19,7 +19,7 @@ warning: never type fallback affects this call to an `unsafe` function
|
||||||
LL | core::mem::transmute(Zst)
|
LL | core::mem::transmute(Zst)
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this will change its meaning in a future release!
|
= warning: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the type explicitly
|
= help: specify the type explicitly
|
||||||
help: use `()` annotations to avoid fallback changes
|
help: use `()` annotations to avoid fallback changes
|
||||||
|
@ -33,7 +33,7 @@ warning: never type fallback affects this union access
|
||||||
LL | unsafe { Union { a: () }.b }
|
LL | unsafe { Union { a: () }.b }
|
||||||
| ^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this will change its meaning in a future release!
|
= warning: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the type explicitly
|
= help: specify the type explicitly
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ warning: never type fallback affects this raw pointer dereference
|
||||||
LL | unsafe { *ptr::from_ref(&()).cast() }
|
LL | unsafe { *ptr::from_ref(&()).cast() }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this will change its meaning in a future release!
|
= warning: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the type explicitly
|
= help: specify the type explicitly
|
||||||
help: use `()` annotations to avoid fallback changes
|
help: use `()` annotations to avoid fallback changes
|
||||||
|
@ -57,7 +57,7 @@ warning: never type fallback affects this call to an `unsafe` function
|
||||||
LL | unsafe { internally_create(x) }
|
LL | unsafe { internally_create(x) }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this will change its meaning in a future release!
|
= warning: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the type explicitly
|
= help: specify the type explicitly
|
||||||
help: use `()` annotations to avoid fallback changes
|
help: use `()` annotations to avoid fallback changes
|
||||||
|
@ -71,7 +71,7 @@ warning: never type fallback affects this call to an `unsafe` function
|
||||||
LL | unsafe { zeroed() }
|
LL | unsafe { zeroed() }
|
||||||
| ^^^^^^^^
|
| ^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this will change its meaning in a future release!
|
= warning: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the type explicitly
|
= help: specify the type explicitly
|
||||||
help: use `()` annotations to avoid fallback changes
|
help: use `()` annotations to avoid fallback changes
|
||||||
|
@ -85,7 +85,7 @@ warning: never type fallback affects this `unsafe` function
|
||||||
LL | let zeroed = mem::zeroed;
|
LL | let zeroed = mem::zeroed;
|
||||||
| ^^^^^^^^^^^
|
| ^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this will change its meaning in a future release!
|
= warning: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the type explicitly
|
= help: specify the type explicitly
|
||||||
help: use `()` annotations to avoid fallback changes
|
help: use `()` annotations to avoid fallback changes
|
||||||
|
@ -99,7 +99,7 @@ warning: never type fallback affects this `unsafe` function
|
||||||
LL | let f = internally_create;
|
LL | let f = internally_create;
|
||||||
| ^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this will change its meaning in a future release!
|
= warning: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the type explicitly
|
= help: specify the type explicitly
|
||||||
help: use `()` annotations to avoid fallback changes
|
help: use `()` annotations to avoid fallback changes
|
||||||
|
@ -113,7 +113,7 @@ warning: never type fallback affects this call to an `unsafe` method
|
||||||
LL | S(marker::PhantomData).create_out_of_thin_air()
|
LL | S(marker::PhantomData).create_out_of_thin_air()
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this will change its meaning in a future release!
|
= warning: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the type explicitly
|
= help: specify the type explicitly
|
||||||
|
|
||||||
|
@ -126,7 +126,7 @@ LL | match send_message::<_ /* ?0 */>() {
|
||||||
LL | msg_send!();
|
LL | msg_send!();
|
||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
|
|
|
|
||||||
= warning: this will change its meaning in a future release!
|
= warning: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the type explicitly
|
= help: specify the type explicitly
|
||||||
= note: this warning originates in the macro `msg_send` (in Nightly builds, run with -Z macro-backtrace for more info)
|
= note: this warning originates in the macro `msg_send` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||||
|
|
|
@ -4,7 +4,7 @@ error: never type fallback affects this call to an `unsafe` function
|
||||||
LL | unsafe { mem::zeroed() }
|
LL | unsafe { mem::zeroed() }
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this will change its meaning in a future release!
|
= warning: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the type explicitly
|
= help: specify the type explicitly
|
||||||
= note: `#[deny(never_type_fallback_flowing_into_unsafe)]` on by default
|
= note: `#[deny(never_type_fallback_flowing_into_unsafe)]` on by default
|
||||||
|
@ -19,7 +19,7 @@ error: never type fallback affects this call to an `unsafe` function
|
||||||
LL | core::mem::transmute(Zst)
|
LL | core::mem::transmute(Zst)
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this will change its meaning in a future release!
|
= warning: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the type explicitly
|
= help: specify the type explicitly
|
||||||
help: use `()` annotations to avoid fallback changes
|
help: use `()` annotations to avoid fallback changes
|
||||||
|
@ -33,7 +33,7 @@ error: never type fallback affects this union access
|
||||||
LL | unsafe { Union { a: () }.b }
|
LL | unsafe { Union { a: () }.b }
|
||||||
| ^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this will change its meaning in a future release!
|
= warning: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the type explicitly
|
= help: specify the type explicitly
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ error: never type fallback affects this raw pointer dereference
|
||||||
LL | unsafe { *ptr::from_ref(&()).cast() }
|
LL | unsafe { *ptr::from_ref(&()).cast() }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this will change its meaning in a future release!
|
= warning: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the type explicitly
|
= help: specify the type explicitly
|
||||||
help: use `()` annotations to avoid fallback changes
|
help: use `()` annotations to avoid fallback changes
|
||||||
|
@ -57,7 +57,7 @@ error: never type fallback affects this call to an `unsafe` function
|
||||||
LL | unsafe { internally_create(x) }
|
LL | unsafe { internally_create(x) }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this will change its meaning in a future release!
|
= warning: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the type explicitly
|
= help: specify the type explicitly
|
||||||
help: use `()` annotations to avoid fallback changes
|
help: use `()` annotations to avoid fallback changes
|
||||||
|
@ -71,7 +71,7 @@ error: never type fallback affects this call to an `unsafe` function
|
||||||
LL | unsafe { zeroed() }
|
LL | unsafe { zeroed() }
|
||||||
| ^^^^^^^^
|
| ^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this will change its meaning in a future release!
|
= warning: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the type explicitly
|
= help: specify the type explicitly
|
||||||
help: use `()` annotations to avoid fallback changes
|
help: use `()` annotations to avoid fallback changes
|
||||||
|
@ -85,7 +85,7 @@ error: never type fallback affects this `unsafe` function
|
||||||
LL | let zeroed = mem::zeroed;
|
LL | let zeroed = mem::zeroed;
|
||||||
| ^^^^^^^^^^^
|
| ^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this will change its meaning in a future release!
|
= warning: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the type explicitly
|
= help: specify the type explicitly
|
||||||
help: use `()` annotations to avoid fallback changes
|
help: use `()` annotations to avoid fallback changes
|
||||||
|
@ -99,7 +99,7 @@ error: never type fallback affects this `unsafe` function
|
||||||
LL | let f = internally_create;
|
LL | let f = internally_create;
|
||||||
| ^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this will change its meaning in a future release!
|
= warning: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the type explicitly
|
= help: specify the type explicitly
|
||||||
help: use `()` annotations to avoid fallback changes
|
help: use `()` annotations to avoid fallback changes
|
||||||
|
@ -113,7 +113,7 @@ error: never type fallback affects this call to an `unsafe` method
|
||||||
LL | S(marker::PhantomData).create_out_of_thin_air()
|
LL | S(marker::PhantomData).create_out_of_thin_air()
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= warning: this will change its meaning in a future release!
|
= warning: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the type explicitly
|
= help: specify the type explicitly
|
||||||
|
|
||||||
|
@ -126,7 +126,7 @@ LL | match send_message::<_ /* ?0 */>() {
|
||||||
LL | msg_send!();
|
LL | msg_send!();
|
||||||
| ----------- in this macro invocation
|
| ----------- in this macro invocation
|
||||||
|
|
|
|
||||||
= warning: this will change its meaning in a future release!
|
= warning: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
= note: for more information, see issue #123748 <https://github.com/rust-lang/rust/issues/123748>
|
||||||
= help: specify the type explicitly
|
= help: specify the type explicitly
|
||||||
= note: this error originates in the macro `msg_send` (in Nightly builds, run with -Z macro-backtrace for more info)
|
= note: this error originates in the macro `msg_send` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||||
|
|
|
@ -13,7 +13,7 @@ fn _zero() {
|
||||||
unsafe { mem::zeroed() }
|
unsafe { mem::zeroed() }
|
||||||
//[e2015]~^ warn: never type fallback affects this call to an `unsafe` function
|
//[e2015]~^ warn: never type fallback affects this call to an `unsafe` function
|
||||||
//[e2024]~^^ error: never type fallback affects this call to an `unsafe` function
|
//[e2024]~^^ error: never type fallback affects this call to an `unsafe` function
|
||||||
//~| warn: this will change its meaning in a future release!
|
//~| warn: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
//[e2024]~| warning: the type `!` does not permit zero-initialization
|
//[e2024]~| warning: the type `!` does not permit zero-initialization
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
|
@ -30,7 +30,7 @@ fn _trans() {
|
||||||
core::mem::transmute(Zst)
|
core::mem::transmute(Zst)
|
||||||
//[e2015]~^ warn: never type fallback affects this call to an `unsafe` function
|
//[e2015]~^ warn: never type fallback affects this call to an `unsafe` function
|
||||||
//[e2024]~^^ error: never type fallback affects this call to an `unsafe` function
|
//[e2024]~^^ error: never type fallback affects this call to an `unsafe` function
|
||||||
//~| warn: this will change its meaning in a future release!
|
//~| warn: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
|
@ -47,7 +47,7 @@ fn _union() {
|
||||||
unsafe { Union { a: () }.b }
|
unsafe { Union { a: () }.b }
|
||||||
//[e2015]~^ warn: never type fallback affects this union access
|
//[e2015]~^ warn: never type fallback affects this union access
|
||||||
//[e2024]~^^ error: never type fallback affects this union access
|
//[e2024]~^^ error: never type fallback affects this union access
|
||||||
//~| warn: this will change its meaning in a future release!
|
//~| warn: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
@ -58,7 +58,7 @@ fn _deref() {
|
||||||
unsafe { *ptr::from_ref(&()).cast() }
|
unsafe { *ptr::from_ref(&()).cast() }
|
||||||
//[e2015]~^ warn: never type fallback affects this raw pointer dereference
|
//[e2015]~^ warn: never type fallback affects this raw pointer dereference
|
||||||
//[e2024]~^^ error: never type fallback affects this raw pointer dereference
|
//[e2024]~^^ error: never type fallback affects this raw pointer dereference
|
||||||
//~| warn: this will change its meaning in a future release!
|
//~| warn: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
@ -79,7 +79,7 @@ fn _only_generics() {
|
||||||
unsafe { internally_create(x) }
|
unsafe { internally_create(x) }
|
||||||
//[e2015]~^ warn: never type fallback affects this call to an `unsafe` function
|
//[e2015]~^ warn: never type fallback affects this call to an `unsafe` function
|
||||||
//[e2024]~^^ error: never type fallback affects this call to an `unsafe` function
|
//[e2024]~^^ error: never type fallback affects this call to an `unsafe` function
|
||||||
//~| warn: this will change its meaning in a future release!
|
//~| warn: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
|
|
||||||
x.unwrap()
|
x.unwrap()
|
||||||
} else {
|
} else {
|
||||||
|
@ -92,12 +92,12 @@ fn _stored_function() {
|
||||||
let zeroed = mem::zeroed;
|
let zeroed = mem::zeroed;
|
||||||
//[e2015]~^ warn: never type fallback affects this `unsafe` function
|
//[e2015]~^ warn: never type fallback affects this `unsafe` function
|
||||||
//[e2024]~^^ error: never type fallback affects this `unsafe` function
|
//[e2024]~^^ error: never type fallback affects this `unsafe` function
|
||||||
//~| warn: this will change its meaning in a future release!
|
//~| warn: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
|
|
||||||
unsafe { zeroed() }
|
unsafe { zeroed() }
|
||||||
//[e2015]~^ warn: never type fallback affects this call to an `unsafe` function
|
//[e2015]~^ warn: never type fallback affects this call to an `unsafe` function
|
||||||
//[e2024]~^^ error: never type fallback affects this call to an `unsafe` function
|
//[e2024]~^^ error: never type fallback affects this call to an `unsafe` function
|
||||||
//~| warn: this will change its meaning in a future release!
|
//~| warn: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
@ -115,7 +115,7 @@ fn _only_generics_stored_function() {
|
||||||
let f = internally_create;
|
let f = internally_create;
|
||||||
//[e2015]~^ warn: never type fallback affects this `unsafe` function
|
//[e2015]~^ warn: never type fallback affects this `unsafe` function
|
||||||
//[e2024]~^^ error: never type fallback affects this `unsafe` function
|
//[e2024]~^^ error: never type fallback affects this `unsafe` function
|
||||||
//~| warn: this will change its meaning in a future release!
|
//~| warn: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
|
|
||||||
unsafe { f(x) }
|
unsafe { f(x) }
|
||||||
|
|
||||||
|
@ -140,7 +140,7 @@ fn _method() {
|
||||||
S(marker::PhantomData).create_out_of_thin_air()
|
S(marker::PhantomData).create_out_of_thin_air()
|
||||||
//[e2015]~^ warn: never type fallback affects this call to an `unsafe` method
|
//[e2015]~^ warn: never type fallback affects this call to an `unsafe` method
|
||||||
//[e2024]~^^ error: never type fallback affects this call to an `unsafe` method
|
//[e2024]~^^ error: never type fallback affects this call to an `unsafe` method
|
||||||
//~| warn: this will change its meaning in a future release!
|
//~| warn: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
|
@ -158,7 +158,7 @@ fn _objc() {
|
||||||
match send_message::<_ /* ?0 */>() {
|
match send_message::<_ /* ?0 */>() {
|
||||||
//[e2015]~^ warn: never type fallback affects this call to an `unsafe` function
|
//[e2015]~^ warn: never type fallback affects this call to an `unsafe` function
|
||||||
//[e2024]~^^ error: never type fallback affects this call to an `unsafe` function
|
//[e2024]~^^ error: never type fallback affects this call to an `unsafe` function
|
||||||
//~| warn: this will change its meaning in a future release!
|
//~| warn: this changes meaning in Rust 2024 and in a future release in all editions!
|
||||||
Ok(x) => x,
|
Ok(x) => x,
|
||||||
Err(_) => loop {},
|
Err(_) => loop {},
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
//@ ignore-apple: cycle error does not appear on apple
|
use std::cell::UnsafeCell;
|
||||||
|
|
||||||
use std::sync::Mutex;
|
enum Foo { X(UnsafeCell<Option<Foo>>) }
|
||||||
|
|
||||||
enum Foo { X(Mutex<Option<Foo>>) }
|
|
||||||
//~^ ERROR recursive type `Foo` has infinite size
|
//~^ ERROR recursive type `Foo` has infinite size
|
||||||
//~| ERROR cycle detected
|
//~| ERROR cycle detected
|
||||||
|
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
error[E0072]: recursive type `Foo` has infinite size
|
error[E0072]: recursive type `Foo` has infinite size
|
||||||
--> $DIR/issue-17431-6.rs:5:1
|
--> $DIR/issue-17431-6.rs:3:1
|
||||||
|
|
|
|
||||||
LL | enum Foo { X(Mutex<Option<Foo>>) }
|
LL | enum Foo { X(UnsafeCell<Option<Foo>>) }
|
||||||
| ^^^^^^^^ --- recursive without indirection
|
| ^^^^^^^^ --- recursive without indirection
|
||||||
|
|
|
|
||||||
help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle
|
help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle
|
||||||
|
|
|
|
||||||
LL | enum Foo { X(Mutex<Option<Box<Foo>>>) }
|
LL | enum Foo { X(UnsafeCell<Option<Box<Foo>>>) }
|
||||||
| ++++ +
|
| ++++ +
|
||||||
|
|
||||||
error[E0391]: cycle detected when computing when `Foo` needs drop
|
error[E0391]: cycle detected when computing when `Foo` needs drop
|
||||||
--> $DIR/issue-17431-6.rs:5:1
|
--> $DIR/issue-17431-6.rs:3:1
|
||||||
|
|
|
|
||||||
LL | enum Foo { X(Mutex<Option<Foo>>) }
|
LL | enum Foo { X(UnsafeCell<Option<Foo>>) }
|
||||||
| ^^^^^^^^
|
| ^^^^^^^^
|
||||||
|
|
|
|
||||||
= note: ...which immediately requires computing when `Foo` needs drop again
|
= note: ...which immediately requires computing when `Foo` needs drop again
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue