[gcc r14-8545] gccrs: Emit an error on variadic non extern functions

Arthur Cohen cohenarthur@gcc.gnu.org
Tue Jan 30 11:58:34 GMT 2024


https://gcc.gnu.org/g:162137fd260b31633f1dfca850704309e2a2f6f6

commit r14-8545-g162137fd260b31633f1dfca850704309e2a2f6f6
Author: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Date:   Mon Nov 20 11:19:46 2023 +0100

    gccrs: Emit an error on variadic non extern functions
    
    Variadic regular functions were recently added in the parser as they
    should be rejected in the ast validation pass. This commit add the ast
    validation pass rejecting this kind of variadic arguments.
    
    gcc/rust/ChangeLog:
    
            * checks/errors/rust-ast-validation.cc (ASTValidation::visit): Add
            ast validation pass to reject variadic arguments on regular functions.
    
    Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>

Diff:
---
 gcc/rust/checks/errors/rust-ast-validation.cc | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/gcc/rust/checks/errors/rust-ast-validation.cc b/gcc/rust/checks/errors/rust-ast-validation.cc
index 673290959f4b..4142cc6317ee 100644
--- a/gcc/rust/checks/errors/rust-ast-validation.cc
+++ b/gcc/rust/checks/errors/rust-ast-validation.cc
@@ -93,6 +93,11 @@ ASTValidation::visit (AST::Function &function)
       function.get_self_param ()->get_locus (),
       "%<self%> parameter is only allowed in associated functions");
 
+  if (function.is_variadic ())
+    rust_error_at (
+      function.get_function_params ().back ()->get_locus (),
+      "only foreign or %<unsafe extern \"C\"%> functions may be C-variadic");
+
   AST::ContextualASTVisitor::visit (function);
 }


More information about the Gcc-cvs mailing list