diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2023-11-09 22:51:31 +0100 |
---|---|---|
committer | P-E-P <32375388+P-E-P@users.noreply.github.com> | 2023-11-14 18:27:16 +0000 |
commit | 5cf0fc3d59b95655dc929adadea54e3215329b52 (patch) | |
tree | 2ba31b1abe330609a1d02f82c150cd7ecd59c1a3 /gcc | |
parent | 87a1800acaecc0df515548fb16596f1ad19cd94f (diff) | |
download | gcc-5cf0fc3d59b95655dc929adadea54e3215329b52.zip gcc-5cf0fc3d59b95655dc929adadea54e3215329b52.tar.gz gcc-5cf0fc3d59b95655dc929adadea54e3215329b52.tar.bz2 |
Add multiple check on variadics position
Variadics are forbidden alone as well as non final position, this should
be checked during ast validation.
gcc/rust/ChangeLog:
* checks/errors/rust-ast-validation.cc (ASTValidation::visit): Add
check for additional named argument as well as variadic argument's
position.
* checks/errors/rust-ast-validation.h: Add visit function prototype for
external functions.
Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/checks/errors/rust-ast-validation.cc | 19 | ||||
-rw-r--r-- | gcc/rust/checks/errors/rust-ast-validation.h | 1 |
2 files changed, 20 insertions, 0 deletions
diff --git a/gcc/rust/checks/errors/rust-ast-validation.cc b/gcc/rust/checks/errors/rust-ast-validation.cc index 0ba73c6..a903297 100644 --- a/gcc/rust/checks/errors/rust-ast-validation.cc +++ b/gcc/rust/checks/errors/rust-ast-validation.cc @@ -62,4 +62,23 @@ ASTValidation::visit (AST::ConstantItem &const_item) AST::ContextualASTVisitor::visit (const_item); } +void +ASTValidation::visit (AST::ExternalFunctionItem &item) +{ + auto ¶ms = item.get_function_params (); + + if (params.size () == 1 && params[0].is_variadic ()) + rust_error_at ( + params[0].get_locus (), + "C-variadic function must be declared with at least one named argument"); + + for (auto it = params.begin (); it != params.end (); it++) + if (it->is_variadic () && it + 1 != params.end ()) + rust_error_at ( + it->get_locus (), + "%<...%> must be the last argument of a C-variadic function"); + + AST::ContextualASTVisitor::visit (item); +} + } // namespace Rust diff --git a/gcc/rust/checks/errors/rust-ast-validation.h b/gcc/rust/checks/errors/rust-ast-validation.h index a21bcc4..6028b21 100644 --- a/gcc/rust/checks/errors/rust-ast-validation.h +++ b/gcc/rust/checks/errors/rust-ast-validation.h @@ -36,6 +36,7 @@ public: virtual void visit (AST::ConstantItem &const_item); virtual void visit (AST::Lifetime &lifetime); virtual void visit (AST::LoopLabel &label); + virtual void visit (AST::ExternalFunctionItem &item); }; } // namespace Rust |