Skip to content

Commit

Permalink
Fatal error for functions with more than 65535 arguments
Browse files Browse the repository at this point in the history
  • Loading branch information
Noble-Mushtak committed Sep 9, 2021
1 parent 97032a6 commit 804ccfa
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 0 deletions.
14 changes: 14 additions & 0 deletions compiler/rustc_ast_passes/src/ast_validation.rs
Expand Up @@ -422,11 +422,25 @@ impl<'a> AstValidator<'a> {
}

fn check_fn_decl(&self, fn_decl: &FnDecl, self_semantic: SelfSemantic) {
self.check_decl_num_args(fn_decl);
self.check_decl_cvaradic_pos(fn_decl);
self.check_decl_attrs(fn_decl);
self.check_decl_self_param(fn_decl, self_semantic);
}

/// Emits fatal error if function declaration has more than `u16::MAX` arguments
/// Error is fatal to prevent errors during typechecking
fn check_decl_num_args(&self, fn_decl: &FnDecl) {
let max_num_args: usize = u16::MAX.into();
if fn_decl.inputs.len() > max_num_args {
let Param { span, .. } = fn_decl.inputs[0];
self.err_handler().span_fatal(
span,
&format!("function can not have more than {} arguments", max_num_args),
);
}
}

fn check_decl_cvaradic_pos(&self, fn_decl: &FnDecl) {
match &*fn_decl.inputs {
[Param { ty, span, .. }] => {
Expand Down
@@ -0,0 +1,12 @@
macro_rules! many_args {
([$($t:tt)*]#$($h:tt)*) => {
many_args!{[$($t)*$($t)*]$($h)*}
};
([$($t:tt)*]) => {
fn _f($($t: ()),*) {} //~ ERROR function can not have more than 65535 arguments
}
}

many_args!{[_]########## ######}

fn main() {}
@@ -0,0 +1,13 @@
error: function can not have more than 65535 arguments
--> $DIR/issue-88577-check-fn-with-more-than-65535-arguments.rs:6:24
|
LL | fn _f($($t: ()),*) {}
| ________________________^
LL | | }
LL | | }
LL | |
LL | | many_args!{[_]########## ######}
| |____________^

error: aborting due to previous error

0 comments on commit 804ccfa

Please sign in to comment.