Skip to content

Rollup of 11 pull requests #86527

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 28 commits into from
Jun 22, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
5bbf8cf
Revert SGX inline asm syntax
May 7, 2021
08d44c2
Implement `Cursor::{remaining, is_empty}`
soerenmeier Jun 5, 2021
5fb2986
format symbols under shared frames
KodrAus Dec 4, 2020
8423a19
make both panic display formats collapse frames
KodrAus Dec 16, 2020
95c1bf6
Allow to pass arguments to rustdoc-gui tool
GuillaumeGomez Jun 14, 2021
212e91a
Update tracking issue
soerenmeier Jun 16, 2021
503abc7
add regression test for issue #39161
yerke Jun 16, 2021
636170a
Remove `#[allow(unused_lifetimes)]` which is now unnecessary
JohnTitor Jun 16, 2021
664bde0
rename `remaining` to `remaining_slice` and add a new `remaining`
soerenmeier Jun 17, 2021
13bfbb4
Fix comment about rustc_inherit_overflow_checks in abs().
m-ou-se Jun 16, 2021
22029a2
add regression test for issue #54685
yerke Jun 18, 2021
4cd2fab
Specify if struct/enum in arg mismatch error
syvb Jun 20, 2021
9063eda
Move `available_concurrency` implementation to `sys`
CDirkx Apr 29, 2021
dd90900
Resolve type aliases to the type they point to in intra-doc links
LeSeulArtichaut Jun 15, 2021
05ec710
Remove tidy exception for `available_concurrency`
CDirkx May 11, 2021
888418a
Use `Unsupported` on platforms where `available_concurrency` is not i…
CDirkx Jun 21, 2021
b8a7bfb
Reference issue test originated from
syvb Jun 21, 2021
d6e344d
Rollup merge of #85054 - jethrogb:jb/sgx-inline-asm, r=Amanieu
JohnTitor Jun 21, 2021
7f1a4a2
Rollup merge of #85182 - CDirkx:available_concurrency, r=JohnTitor
JohnTitor Jun 21, 2021
4463b08
Rollup merge of #86037 - soerenmeier:cursor_remaining, r=yaahc
JohnTitor Jun 21, 2021
7ee6b8b
Rollup merge of #86114 - JDuchniewicz:feat/panic-frame-fmt, r=yaahc
JohnTitor Jun 21, 2021
7dca2e2
Rollup merge of #86297 - GuillaumeGomez:rustdoc-gui-args, r=Mark-Simu…
JohnTitor Jun 21, 2021
83d9b1b
Rollup merge of #86334 - LeSeulArtichaut:86120-links-type-aliases, r=…
JohnTitor Jun 21, 2021
8389cd3
Rollup merge of #86367 - m-ou-se:fix-abs-comment, r=scottmcm
JohnTitor Jun 21, 2021
4d73300
Rollup merge of #86381 - yerke:add-test-for-issue-39161, r=JohnTitor
JohnTitor Jun 21, 2021
d285235
Rollup merge of #86387 - JohnTitor:now-no-unused-lifetimes, r=Mark-Si…
JohnTitor Jun 21, 2021
fdb1daa
Rollup merge of #86398 - yerke:add-test-for-issue-54685, r=Mark-Simul…
JohnTitor Jun 21, 2021
4495ce7
Rollup merge of #86493 - Smittyvb:ctor-typeck-error, r=davidtwco
JohnTitor Jun 21, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Specify if struct/enum in arg mismatch error
  • Loading branch information
syvb committed Jun 20, 2021
commit 4cd2fab8c56b19fa14685a0ceb6d905366913b2c
28 changes: 24 additions & 4 deletions compiler/rustc_typeck/src/check/fn_ctxt/checks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use crate::check::{
use rustc_ast as ast;
use rustc_errors::{Applicability, DiagnosticBuilder, DiagnosticId};
use rustc_hir as hir;
use rustc_hir::def::{DefKind, Res};
use rustc_hir::def::{CtorOf, DefKind, Res};
use rustc_hir::def_id::DefId;
use rustc_hir::{ExprKind, Node, QPath};
use rustc_middle::ty::adjustment::AllowTwoPhase;
Expand Down Expand Up @@ -120,8 +120,22 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
error_code: &str,
c_variadic: bool,
sugg_unit: bool| {
let (span, start_span, args) = match &expr.kind {
hir::ExprKind::Call(hir::Expr { span, .. }, args) => (*span, *span, &args[..]),
let (span, start_span, args, ctor_of) = match &expr.kind {
hir::ExprKind::Call(
hir::Expr {
span,
kind:
hir::ExprKind::Path(hir::QPath::Resolved(
_,
hir::Path { res: Res::Def(DefKind::Ctor(of, _), _), .. },
)),
..
},
args,
) => (*span, *span, &args[..], Some(of)),
hir::ExprKind::Call(hir::Expr { span, .. }, args) => {
(*span, *span, &args[..], None)
}
hir::ExprKind::MethodCall(path_segment, span, args, _) => (
*span,
// `sp` doesn't point at the whole `foo.bar()`, only at `bar`.
Expand All @@ -137,6 +151,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
})
.unwrap_or(*span),
&args[1..], // Skip the receiver.
None, // methods are never ctors
),
k => span_bug!(sp, "checking argument types on a non-call: `{:?}`", k),
};
Expand All @@ -157,7 +172,12 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
let mut err = tcx.sess.struct_span_err_with_code(
span,
&format!(
"this function takes {}{} but {} {} supplied",
"this {} takes {}{} but {} {} supplied",
match ctor_of {
Some(CtorOf::Struct) => "struct",
Some(CtorOf::Variant) => "enum variant",
None => "function",
},
if c_variadic { "at least " } else { "" },
potentially_plural_count(expected_count, "argument"),
potentially_plural_count(arg_count, "argument"),
Expand Down
2 changes: 1 addition & 1 deletion src/test/ui/span/missing-unit-argument.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ impl S {
}

fn main() {
let _: Result<(), String> = Ok(); //~ ERROR this function takes
let _: Result<(), String> = Ok(); //~ ERROR this enum variant takes
foo(); //~ ERROR this function takes
foo(()); //~ ERROR this function takes
bar(); //~ ERROR this function takes
Expand Down
2 changes: 1 addition & 1 deletion src/test/ui/span/missing-unit-argument.stderr
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
error[E0061]: this function takes 1 argument but 0 arguments were supplied
error[E0061]: this enum variant takes 1 argument but 0 arguments were supplied
--> $DIR/missing-unit-argument.rs:11:33
|
LL | let _: Result<(), String> = Ok();
Expand Down
13 changes: 13 additions & 0 deletions src/test/ui/typeck/struct-enum-wrong-args.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
struct Wrapper(i32);
struct DoubleWrapper(i32, i32);

fn main() {
let _ = Some(3, 2); //~ ERROR this enum variant takes
let _ = Ok(3, 6, 2); //~ ERROR this enum variant takes
let _ = Ok(); //~ ERROR this enum variant takes
let _ = Wrapper(); //~ ERROR this struct takes
let _ = Wrapper(5, 2); //~ ERROR this struct takes
let _ = DoubleWrapper(); //~ ERROR this struct takes
let _ = DoubleWrapper(5); //~ ERROR this struct takes
let _ = DoubleWrapper(5, 2, 7); //~ ERROR this struct takes
}
67 changes: 67 additions & 0 deletions src/test/ui/typeck/struct-enum-wrong-args.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
error[E0061]: this enum variant takes 1 argument but 2 arguments were supplied
--> $DIR/struct-enum-wrong-args.rs:5:13
|
LL | let _ = Some(3, 2);
| ^^^^ - - supplied 2 arguments
| |
| expected 1 argument

error[E0061]: this enum variant takes 1 argument but 3 arguments were supplied
--> $DIR/struct-enum-wrong-args.rs:6:13
|
LL | let _ = Ok(3, 6, 2);
| ^^ - - - supplied 3 arguments
| |
| expected 1 argument

error[E0061]: this enum variant takes 1 argument but 0 arguments were supplied
--> $DIR/struct-enum-wrong-args.rs:7:13
|
LL | let _ = Ok();
| ^^-- supplied 0 arguments
| |
| expected 1 argument

error[E0061]: this struct takes 1 argument but 0 arguments were supplied
--> $DIR/struct-enum-wrong-args.rs:8:13
|
LL | let _ = Wrapper();
| ^^^^^^^-- supplied 0 arguments
| |
| expected 1 argument

error[E0061]: this struct takes 1 argument but 2 arguments were supplied
--> $DIR/struct-enum-wrong-args.rs:9:13
|
LL | let _ = Wrapper(5, 2);
| ^^^^^^^ - - supplied 2 arguments
| |
| expected 1 argument

error[E0061]: this struct takes 2 arguments but 0 arguments were supplied
--> $DIR/struct-enum-wrong-args.rs:10:13
|
LL | let _ = DoubleWrapper();
| ^^^^^^^^^^^^^-- supplied 0 arguments
| |
| expected 2 arguments

error[E0061]: this struct takes 2 arguments but 1 argument was supplied
--> $DIR/struct-enum-wrong-args.rs:11:13
|
LL | let _ = DoubleWrapper(5);
| ^^^^^^^^^^^^^ - supplied 1 argument
| |
| expected 2 arguments

error[E0061]: this struct takes 2 arguments but 3 arguments were supplied
--> $DIR/struct-enum-wrong-args.rs:12:13
|
LL | let _ = DoubleWrapper(5, 2, 7);
| ^^^^^^^^^^^^^ - - - supplied 3 arguments
| |
| expected 2 arguments

error: aborting due to 8 previous errors

For more information about this error, try `rustc --explain E0061`.