Auto merge of #9388 - Jarcho:rustup, r=Jarcho

Rustup

Hopefully this is done right.

changelog: None
This commit is contained in:
bors 2022-08-29 01:51:23 +00:00
commit 28ec27b33a
24 changed files with 65 additions and 61 deletions

View file

@ -24,6 +24,7 @@ env:
RUST_BACKTRACE: 1 RUST_BACKTRACE: 1
CARGO_TARGET_DIR: '${{ github.workspace }}/target' CARGO_TARGET_DIR: '${{ github.workspace }}/target'
NO_FMT_TEST: 1 NO_FMT_TEST: 1
CARGO_INCREMENTAL: 0
jobs: jobs:
base: base:

View file

@ -10,6 +10,7 @@ env:
RUST_BACKTRACE: 1 RUST_BACKTRACE: 1
CARGO_TARGET_DIR: '${{ github.workspace }}/target' CARGO_TARGET_DIR: '${{ github.workspace }}/target'
NO_FMT_TEST: 1 NO_FMT_TEST: 1
CARGO_INCREMENTAL: 0
defaults: defaults:
run: run:

View file

@ -74,8 +74,8 @@ impl EarlyLintPass for CrateInMacroDef {
fn is_macro_export(attr: &Attribute) -> bool { fn is_macro_export(attr: &Attribute) -> bool {
if_chain! { if_chain! {
if let AttrKind::Normal(attr_item, _) = &attr.kind; if let AttrKind::Normal(normal) = &attr.kind;
if let [segment] = attr_item.path.segments.as_slice(); if let [segment] = normal.item.path.segments.as_slice();
then { then {
segment.ident.name == sym::macro_export segment.ident.name == sym::macro_export
} else { } else {

View file

@ -2,7 +2,10 @@ use clippy_utils::diagnostics::{span_lint_and_sugg, span_lint_hir_and_then};
use clippy_utils::source::{snippet_with_applicability, snippet_with_context}; use clippy_utils::source::{snippet_with_applicability, snippet_with_context};
use clippy_utils::sugg::has_enclosing_paren; use clippy_utils::sugg::has_enclosing_paren;
use clippy_utils::ty::{expr_sig, is_copy, peel_mid_ty_refs, ty_sig, variant_of_res}; use clippy_utils::ty::{expr_sig, is_copy, peel_mid_ty_refs, ty_sig, variant_of_res};
use clippy_utils::{fn_def_id, get_parent_expr, is_lint_allowed, meets_msrv, msrvs, path_to_local, walk_to_expr_usage}; use clippy_utils::{
fn_def_id, get_parent_expr, get_parent_expr_for_hir, is_lint_allowed, meets_msrv, msrvs, path_to_local,
walk_to_expr_usage,
};
use rustc_ast::util::parser::{PREC_POSTFIX, PREC_PREFIX}; use rustc_ast::util::parser::{PREC_POSTFIX, PREC_PREFIX};
use rustc_data_structures::fx::FxIndexMap; use rustc_data_structures::fx::FxIndexMap;
use rustc_errors::Applicability; use rustc_errors::Applicability;
@ -732,6 +735,19 @@ fn walk_parents<'tcx>(
Some(ty_auto_deref_stability(cx, output, precedence).position_for_result(cx)) Some(ty_auto_deref_stability(cx, output, precedence).position_for_result(cx))
}, },
Node::ExprField(field) if field.span.ctxt() == ctxt => match get_parent_expr_for_hir(cx, field.hir_id) {
Some(Expr {
hir_id,
kind: ExprKind::Struct(path, ..),
..
}) => variant_of_res(cx, cx.qpath_res(path, *hir_id))
.and_then(|variant| variant.fields.iter().find(|f| f.name == field.ident.name))
.map(|field_def| {
ty_auto_deref_stability(cx, cx.tcx.type_of(field_def.did), precedence).position_for_arg()
}),
_ => None,
},
Node::Expr(parent) if parent.span.ctxt() == ctxt => match parent.kind { Node::Expr(parent) if parent.span.ctxt() == ctxt => match parent.kind {
ExprKind::Ret(_) => { ExprKind::Ret(_) => {
let owner_id = cx.tcx.hir().body_owner(cx.enclosing_body.unwrap()); let owner_id = cx.tcx.hir().body_owner(cx.enclosing_body.unwrap());
@ -833,17 +849,6 @@ fn walk_parents<'tcx>(
} }
}) })
}, },
ExprKind::Struct(path, fields, _) => {
let variant = variant_of_res(cx, cx.qpath_res(path, parent.hir_id));
fields
.iter()
.find(|f| f.expr.hir_id == child_id)
.zip(variant)
.and_then(|(field, variant)| variant.fields.iter().find(|f| f.name == field.ident.name))
.map(|field| {
ty_auto_deref_stability(cx, cx.tcx.type_of(field.did), precedence).position_for_arg()
})
},
ExprKind::Field(child, name) if child.hir_id == e.hir_id => Some(Position::FieldAccess(name.name)), ExprKind::Field(child, name) if child.hir_id == e.hir_id => Some(Position::FieldAccess(name.name)),
ExprKind::Unary(UnOp::Deref, child) if child.hir_id == e.hir_id => Some(Position::Deref), ExprKind::Unary(UnOp::Deref, child) if child.hir_id == e.hir_id => Some(Position::Deref),
ExprKind::Match(child, _, MatchSource::TryDesugar | MatchSource::AwaitDesugar) ExprKind::Match(child, _, MatchSource::TryDesugar | MatchSource::AwaitDesugar)

View file

@ -61,9 +61,8 @@ impl EarlyLintPass for DoubleParens {
} }
} }
}, },
ExprKind::MethodCall(_, ref params, _) => { ExprKind::MethodCall(_, _, ref params, _) => {
if params.len() == 2 { if let [ref param] = params[..] {
let param = &params[1];
if let ExprKind::Paren(_) = param.kind { if let ExprKind::Paren(_) = param.kind {
span_lint(cx, DOUBLE_PARENS, param.span, msg); span_lint(cx, DOUBLE_PARENS, param.span, msg);
} }

View file

@ -290,7 +290,7 @@ impl<'a> NormalizedPat<'a> {
LitKind::Char(val) => Self::LitInt(val.into()), LitKind::Char(val) => Self::LitInt(val.into()),
LitKind::Int(val, _) => Self::LitInt(val), LitKind::Int(val, _) => Self::LitInt(val),
LitKind::Bool(val) => Self::LitBool(val), LitKind::Bool(val) => Self::LitBool(val),
LitKind::Float(..) | LitKind::Err(_) => Self::Wild, LitKind::Float(..) | LitKind::Err => Self::Wild,
}, },
_ => Self::Wild, _ => Self::Wild,
}, },

View file

@ -57,10 +57,10 @@ impl EarlyLintPass for OctalEscapes {
} }
if let ExprKind::Lit(lit) = &expr.kind { if let ExprKind::Lit(lit) = &expr.kind {
if matches!(lit.token.kind, LitKind::Str) { if matches!(lit.token_lit.kind, LitKind::Str) {
check_lit(cx, &lit.token, lit.span, true); check_lit(cx, &lit.token_lit, lit.span, true);
} else if matches!(lit.token.kind, LitKind::ByteStr) { } else if matches!(lit.token_lit.kind, LitKind::ByteStr) {
check_lit(cx, &lit.token, lit.span, false); check_lit(cx, &lit.token_lit, lit.span, false);
} }
} }
} }

View file

@ -37,9 +37,9 @@ declare_lint_pass!(OptionEnvUnwrap => [OPTION_ENV_UNWRAP]);
impl EarlyLintPass for OptionEnvUnwrap { impl EarlyLintPass for OptionEnvUnwrap {
fn check_expr(&mut self, cx: &EarlyContext<'_>, expr: &Expr) { fn check_expr(&mut self, cx: &EarlyContext<'_>, expr: &Expr) {
if_chain! { if_chain! {
if let ExprKind::MethodCall(path_segment, args, _) = &expr.kind; if let ExprKind::MethodCall(path_segment, receiver, _, _) = &expr.kind;
if matches!(path_segment.ident.name, sym::expect | sym::unwrap); if matches!(path_segment.ident.name, sym::expect | sym::unwrap);
if let ExprKind::Call(caller, _) = &args[0].kind; if let ExprKind::Call(caller, _) = &receiver.kind;
if is_direct_expn_of(caller.span, "option_env").is_some(); if is_direct_expn_of(caller.span, "option_env").is_some();
then { then {
span_lint_and_help( span_lint_and_help(

View file

@ -109,12 +109,12 @@ impl EarlyLintPass for Precedence {
let mut arg = operand; let mut arg = operand;
let mut all_odd = true; let mut all_odd = true;
while let ExprKind::MethodCall(path_segment, args, _) = &arg.kind { while let ExprKind::MethodCall(path_segment, receiver, _, _) = &arg.kind {
let path_segment_str = path_segment.ident.name.as_str(); let path_segment_str = path_segment.ident.name.as_str();
all_odd &= ALLOWED_ODD_FUNCTIONS all_odd &= ALLOWED_ODD_FUNCTIONS
.iter() .iter()
.any(|odd_function| **odd_function == *path_segment_str); .any(|odd_function| **odd_function == *path_segment_str);
arg = args.first().expect("A method always has a receiver."); arg = receiver;
} }
if_chain! { if_chain! {

View file

@ -595,7 +595,7 @@ fn ident_difference_expr_with_base_location(
| (Unary(_, _), Unary(_, _)) | (Unary(_, _), Unary(_, _))
| (Binary(_, _, _), Binary(_, _, _)) | (Binary(_, _, _), Binary(_, _, _))
| (Tup(_), Tup(_)) | (Tup(_), Tup(_))
| (MethodCall(_, _, _), MethodCall(_, _, _)) | (MethodCall(_, _, _, _), MethodCall(_, _, _, _))
| (Call(_, _), Call(_, _)) | (Call(_, _), Call(_, _))
| (ConstBlock(_), ConstBlock(_)) | (ConstBlock(_), ConstBlock(_))
| (Array(_), Array(_)) | (Array(_), Array(_))

View file

@ -201,7 +201,7 @@ impl<'tcx> Visitor<'_> for PeekableVisitor<'_, 'tcx> {
return; return;
}, },
}, },
Node::Block(_) => {}, Node::Block(_) | Node::ExprField(_) => {},
_ => { _ => {
break; break;
}, },

View file

@ -30,11 +30,10 @@ declare_clippy_lint! {
declare_lint_pass!(UnusedRounding => [UNUSED_ROUNDING]); declare_lint_pass!(UnusedRounding => [UNUSED_ROUNDING]);
fn is_useless_rounding(expr: &Expr) -> Option<(&str, String)> { fn is_useless_rounding(expr: &Expr) -> Option<(&str, String)> {
if let ExprKind::MethodCall(name_ident, args, _) = &expr.kind if let ExprKind::MethodCall(name_ident, receiver, _, _) = &expr.kind
&& let method_name = name_ident.ident.name.as_str() && let method_name = name_ident.ident.name.as_str()
&& (method_name == "ceil" || method_name == "round" || method_name == "floor") && (method_name == "ceil" || method_name == "round" || method_name == "floor")
&& !args.is_empty() && let ExprKind::Lit(spanned) = &receiver.kind
&& let ExprKind::Lit(spanned) = &args[0].kind
&& let LitKind::Float(symbol, ty) = spanned.kind { && let LitKind::Float(symbol, ty) = spanned.kind {
let f = symbol.as_str().parse::<f64>().unwrap(); let f = symbol.as_str().parse::<f64>().unwrap();
let f_str = symbol.to_string() + if let LitFloatType::Suffixed(ty) = ty { let f_str = symbol.to_string() + if let LitFloatType::Suffixed(ty) = ty {

View file

@ -89,7 +89,7 @@ impl EarlyLintPass for UnusedUnit {
} }
} }
fn check_poly_trait_ref(&mut self, cx: &EarlyContext<'_>, poly: &ast::PolyTraitRef, _: &ast::TraitBoundModifier) { fn check_poly_trait_ref(&mut self, cx: &EarlyContext<'_>, poly: &ast::PolyTraitRef) {
let segments = &poly.trait_ref.path.segments; let segments = &poly.trait_ref.path.segments;
if_chain! { if_chain! {

View file

@ -276,7 +276,7 @@ impl<'a, 'tcx> PrintVisitor<'a, 'tcx> {
match lit.value.node { match lit.value.node {
LitKind::Bool(val) => kind!("Bool({val:?})"), LitKind::Bool(val) => kind!("Bool({val:?})"),
LitKind::Char(c) => kind!("Char({c:?})"), LitKind::Char(c) => kind!("Char({c:?})"),
LitKind::Err(val) => kind!("Err({val})"), LitKind::Err => kind!("Err"),
LitKind::Byte(b) => kind!("Byte({b})"), LitKind::Byte(b) => kind!("Byte({b})"),
LitKind::Int(i, suffix) => { LitKind::Int(i, suffix) => {
let int_ty = match suffix { let int_ty = match suffix {

View file

@ -593,8 +593,8 @@ fn extract_clippy_version_value(cx: &LateContext<'_>, item: &'_ Item<'_>) -> Opt
attrs.iter().find_map(|attr| { attrs.iter().find_map(|attr| {
if_chain! { if_chain! {
// Identify attribute // Identify attribute
if let ast::AttrKind::Normal(ref attr_kind, _) = &attr.kind; if let ast::AttrKind::Normal(ref attr_kind) = &attr.kind;
if let [tool_name, attr_name] = &attr_kind.path.segments[..]; if let [tool_name, attr_name] = &attr_kind.item.path.segments[..];
if tool_name.ident.name == sym::clippy; if tool_name.ident.name == sym::clippy;
if attr_name.ident.name == sym::version; if attr_name.ident.name == sym::version;
if let Some(version) = attr.value_str(); if let Some(version) = attr.value_str();

View file

@ -683,12 +683,12 @@ impl Write {
}, },
}; };
let replacement: String = match lit.token.kind { let replacement: String = match lit.token_lit.kind {
LitKind::StrRaw(_) | LitKind::ByteStrRaw(_) if matches!(fmtstr.style, StrStyle::Raw(_)) => { LitKind::StrRaw(_) | LitKind::ByteStrRaw(_) if matches!(fmtstr.style, StrStyle::Raw(_)) => {
lit.token.symbol.as_str().replace('{', "{{").replace('}', "}}") lit.token_lit.symbol.as_str().replace('{', "{{").replace('}', "}}")
}, },
LitKind::Str | LitKind::ByteStr if matches!(fmtstr.style, StrStyle::Cooked) => { LitKind::Str | LitKind::ByteStr if matches!(fmtstr.style, StrStyle::Cooked) => {
lit.token.symbol.as_str().replace('{', "{{").replace('}', "}}") lit.token_lit.symbol.as_str().replace('{', "{{").replace('}', "}}")
}, },
LitKind::StrRaw(_) LitKind::StrRaw(_)
| LitKind::Str | LitKind::Str
@ -697,7 +697,7 @@ impl Write {
| LitKind::Integer | LitKind::Integer
| LitKind::Float | LitKind::Float
| LitKind::Err => continue, | LitKind::Err => continue,
LitKind::Byte | LitKind::Char => match lit.token.symbol.as_str() { LitKind::Byte | LitKind::Char => match lit.token_lit.symbol.as_str() {
"\"" if matches!(fmtstr.style, StrStyle::Cooked) => "\\\"", "\"" if matches!(fmtstr.style, StrStyle::Cooked) => "\\\"",
"\"" if matches!(fmtstr.style, StrStyle::Raw(0)) => continue, "\"" if matches!(fmtstr.style, StrStyle::Raw(0)) => continue,
"\\\\" if matches!(fmtstr.style, StrStyle::Raw(_)) => "\\", "\\\\" if matches!(fmtstr.style, StrStyle::Raw(_)) => "\\",
@ -708,7 +708,7 @@ impl Write {
x => x, x => x,
} }
.into(), .into(),
LitKind::Bool => lit.token.symbol.as_str().deref().into(), LitKind::Bool => lit.token_lit.symbol.as_str().deref().into(),
}; };
if !fmt_spans.is_empty() { if !fmt_spans.is_empty() {

View file

@ -147,7 +147,9 @@ pub fn eq_expr(l: &Expr, r: &Expr) -> bool {
(Array(l), Array(r)) | (Tup(l), Tup(r)) => over(l, r, |l, r| eq_expr(l, r)), (Array(l), Array(r)) | (Tup(l), Tup(r)) => over(l, r, |l, r| eq_expr(l, r)),
(Repeat(le, ls), Repeat(re, rs)) => eq_expr(le, re) && eq_expr(&ls.value, &rs.value), (Repeat(le, ls), Repeat(re, rs)) => eq_expr(le, re) && eq_expr(&ls.value, &rs.value),
(Call(lc, la), Call(rc, ra)) => eq_expr(lc, rc) && over(la, ra, |l, r| eq_expr(l, r)), (Call(lc, la), Call(rc, ra)) => eq_expr(lc, rc) && over(la, ra, |l, r| eq_expr(l, r)),
(MethodCall(lc, la, _), MethodCall(rc, ra, _)) => eq_path_seg(lc, rc) && over(la, ra, |l, r| eq_expr(l, r)), (MethodCall(lc, ls, la, _), MethodCall(rc, rs, ra, _)) => {
eq_path_seg(lc, rc) && eq_expr(ls, rs) && over(la, ra, |l, r| eq_expr(l, r))
},
(Binary(lo, ll, lr), Binary(ro, rl, rr)) => lo.node == ro.node && eq_expr(ll, rl) && eq_expr(lr, rr), (Binary(lo, ll, lr), Binary(ro, rl, rr)) => lo.node == ro.node && eq_expr(ll, rl) && eq_expr(lr, rr),
(Unary(lo, l), Unary(ro, r)) => mem::discriminant(lo) == mem::discriminant(ro) && eq_expr(l, r), (Unary(lo, l), Unary(ro, r)) => mem::discriminant(lo) == mem::discriminant(ro) && eq_expr(l, r),
(Lit(l), Lit(r)) => l.kind == r.kind, (Lit(l), Lit(r)) => l.kind == r.kind,
@ -693,7 +695,7 @@ pub fn eq_attr(l: &Attribute, r: &Attribute) -> bool {
l.style == r.style l.style == r.style
&& match (&l.kind, &r.kind) { && match (&l.kind, &r.kind) {
(DocComment(l1, l2), DocComment(r1, r2)) => l1 == r1 && l2 == r2, (DocComment(l1, l2), DocComment(r1, r2)) => l1 == r1 && l2 == r2,
(Normal(l, _), Normal(r, _)) => eq_path(&l.path, &r.path) && eq_mac_args(&l.args, &r.args), (Normal(l), Normal(r)) => eq_path(&l.item.path, &r.item.path) && eq_mac_args(&l.item.args, &r.item.args),
_ => false, _ => false,
} }
} }

View file

@ -59,8 +59,8 @@ pub fn get_attr<'a>(
name: &'static str, name: &'static str,
) -> impl Iterator<Item = &'a ast::Attribute> { ) -> impl Iterator<Item = &'a ast::Attribute> {
attrs.iter().filter(move |attr| { attrs.iter().filter(move |attr| {
let attr = if let ast::AttrKind::Normal(ref attr, _) = attr.kind { let attr = if let ast::AttrKind::Normal(ref normal) = attr.kind {
attr &normal.item
} else { } else {
return false; return false;
}; };

View file

@ -45,7 +45,7 @@ pub enum Constant {
/// A reference /// A reference
Ref(Box<Constant>), Ref(Box<Constant>),
/// A literal with syntax error. /// A literal with syntax error.
Err(Symbol), Err,
} }
impl PartialEq for Constant { impl PartialEq for Constant {
@ -118,9 +118,7 @@ impl Hash for Constant {
Self::Ref(ref r) => { Self::Ref(ref r) => {
r.hash(state); r.hash(state);
}, },
Self::Err(ref s) => { Self::Err => {},
s.hash(state);
},
} }
} }
} }
@ -194,7 +192,7 @@ pub fn lit_to_mir_constant(lit: &LitKind, ty: Option<Ty<'_>>) -> Constant {
_ => bug!(), _ => bug!(),
}, },
LitKind::Bool(b) => Constant::Bool(b), LitKind::Bool(b) => Constant::Bool(b),
LitKind::Err(s) => Constant::Err(s), LitKind::Err => Constant::Err,
} }
} }

View file

@ -1900,8 +1900,8 @@ pub fn std_or_core(cx: &LateContext<'_>) -> Option<&'static str> {
pub fn is_no_std_crate(cx: &LateContext<'_>) -> bool { pub fn is_no_std_crate(cx: &LateContext<'_>) -> bool {
cx.tcx.hir().attrs(hir::CRATE_HIR_ID).iter().any(|attr| { cx.tcx.hir().attrs(hir::CRATE_HIR_ID).iter().any(|attr| {
if let ast::AttrKind::Normal(ref attr, _) = attr.kind { if let ast::AttrKind::Normal(ref normal) = attr.kind {
attr.path == sym::no_std normal.item.path == sym::no_std
} else { } else {
false false
} }
@ -1910,8 +1910,8 @@ pub fn is_no_std_crate(cx: &LateContext<'_>) -> bool {
pub fn is_no_core_crate(cx: &LateContext<'_>) -> bool { pub fn is_no_core_crate(cx: &LateContext<'_>) -> bool {
cx.tcx.hir().attrs(hir::CRATE_HIR_ID).iter().any(|attr| { cx.tcx.hir().attrs(hir::CRATE_HIR_ID).iter().any(|attr| {
if let ast::AttrKind::Normal(ref attr, _) = attr.kind { if let ast::AttrKind::Normal(ref normal) = attr.kind {
attr.path == sym::no_core normal.item.path == sym::no_core
} else { } else {
false false
} }

View file

@ -1,3 +1,3 @@
[toolchain] [toolchain]
channel = "nightly-2022-08-11" channel = "nightly-2022-08-27"
components = ["cargo", "llvm-tools-preview", "rust-src", "rust-std", "rustc", "rustc-dev", "rustfmt"] components = ["cargo", "llvm-tools-preview", "rust-src", "rust-std", "rustc", "rustc-dev", "rustfmt"]

View file

@ -95,7 +95,7 @@ struct ClippyCallbacks {
impl rustc_driver::Callbacks for ClippyCallbacks { impl rustc_driver::Callbacks for ClippyCallbacks {
// JUSTIFICATION: necessary in clippy driver to set `mir_opt_level` // JUSTIFICATION: necessary in clippy driver to set `mir_opt_level`
#[cfg_attr(not(bootstrap), allow(rustc::bad_opt_access))] #[allow(rustc::bad_opt_access)]
fn config(&mut self, config: &mut interface::Config) { fn config(&mut self, config: &mut interface::Config) {
let previous = config.register_lints.take(); let previous = config.register_lints.take();
let clippy_args_var = self.clippy_args_var.take(); let clippy_args_var = self.clippy_args_var.take();

View file

@ -1,6 +1,5 @@
#![warn(clippy::semicolon_if_nothing_returned)] #![warn(clippy::semicolon_if_nothing_returned)]
#![allow(clippy::redundant_closure)] #![allow(clippy::redundant_closure)]
#![feature(label_break_value)]
#![feature(let_else)] #![feature(let_else)]
fn get_unit() {} fn get_unit() {}

View file

@ -1,5 +1,5 @@
error: consider adding a `;` to the last statement for consistent formatting error: consider adding a `;` to the last statement for consistent formatting
--> $DIR/semicolon_if_nothing_returned.rs:10:5 --> $DIR/semicolon_if_nothing_returned.rs:9:5
| |
LL | println!("Hello") LL | println!("Hello")
| ^^^^^^^^^^^^^^^^^ help: add a `;` here: `println!("Hello");` | ^^^^^^^^^^^^^^^^^ help: add a `;` here: `println!("Hello");`
@ -7,25 +7,25 @@ LL | println!("Hello")
= note: `-D clippy::semicolon-if-nothing-returned` implied by `-D warnings` = note: `-D clippy::semicolon-if-nothing-returned` implied by `-D warnings`
error: consider adding a `;` to the last statement for consistent formatting error: consider adding a `;` to the last statement for consistent formatting
--> $DIR/semicolon_if_nothing_returned.rs:14:5 --> $DIR/semicolon_if_nothing_returned.rs:13:5
| |
LL | get_unit() LL | get_unit()
| ^^^^^^^^^^ help: add a `;` here: `get_unit();` | ^^^^^^^^^^ help: add a `;` here: `get_unit();`
error: consider adding a `;` to the last statement for consistent formatting error: consider adding a `;` to the last statement for consistent formatting
--> $DIR/semicolon_if_nothing_returned.rs:19:5 --> $DIR/semicolon_if_nothing_returned.rs:18:5
| |
LL | y = x + 1 LL | y = x + 1
| ^^^^^^^^^ help: add a `;` here: `y = x + 1;` | ^^^^^^^^^ help: add a `;` here: `y = x + 1;`
error: consider adding a `;` to the last statement for consistent formatting error: consider adding a `;` to the last statement for consistent formatting
--> $DIR/semicolon_if_nothing_returned.rs:25:9 --> $DIR/semicolon_if_nothing_returned.rs:24:9
| |
LL | hello() LL | hello()
| ^^^^^^^ help: add a `;` here: `hello();` | ^^^^^^^ help: add a `;` here: `hello();`
error: consider adding a `;` to the last statement for consistent formatting error: consider adding a `;` to the last statement for consistent formatting
--> $DIR/semicolon_if_nothing_returned.rs:36:9 --> $DIR/semicolon_if_nothing_returned.rs:35:9
| |
LL | ptr::drop_in_place(s.as_mut_ptr()) LL | ptr::drop_in_place(s.as_mut_ptr())
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: add a `;` here: `ptr::drop_in_place(s.as_mut_ptr());` | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: add a `;` here: `ptr::drop_in_place(s.as_mut_ptr());`