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>
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
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