mirror of
https://github.com/DarkPlacesEngine/gmqcc.git
synced 2025-03-22 10:41:43 +00:00
guarding vararg code by -fvariadic-args
This commit is contained in:
parent
47db74c699
commit
4df6d1e028
2 changed files with 7 additions and 2 deletions
1
opts.def
1
opts.def
|
@ -49,6 +49,7 @@
|
|||
GMQCC_DEFINE_FLAG(UNTYPED_NIL)
|
||||
GMQCC_DEFINE_FLAG(PERMISSIVE)
|
||||
GMQCC_DEFINE_FLAG(ENHANCED_DIAGNOSTICS)
|
||||
GMQCC_DEFINE_FLAG(VARIADIC_ARGS)
|
||||
#endif
|
||||
|
||||
/* warning flags */
|
||||
|
|
8
parser.c
8
parser.c
|
@ -1713,6 +1713,10 @@ static ast_expression* parse_expression_leave(parser_t *parser, bool stopatcomma
|
|||
else if (parser->tok == TOKEN_DOTS)
|
||||
{
|
||||
ast_expression *va;
|
||||
if (!OPTS_FLAG(VARIADIC_ARGS)) {
|
||||
parseerror(parser, "cannot access varargs (try -fvariadic-args)");
|
||||
goto onerr;
|
||||
}
|
||||
if (wantop) {
|
||||
parseerror(parser, "expected operator or end of statement");
|
||||
goto onerr;
|
||||
|
@ -3776,7 +3780,7 @@ static bool parse_function_body(parser_t *parser, ast_value *var)
|
|||
return false;
|
||||
}
|
||||
|
||||
if (var->expression.flags & AST_FLAG_VARIADIC) {
|
||||
if (!OPTS_FLAG(VARIADIC_ARGS) && var->expression.flags & AST_FLAG_VARIADIC) {
|
||||
if (parsewarning(parser, WARN_VARIADIC_FUNCTION,
|
||||
"variadic function with implementation will not be able to access additional parameters"))
|
||||
{
|
||||
|
@ -4012,7 +4016,7 @@ static bool parse_function_body(parser_t *parser, ast_value *var)
|
|||
func->argc = argc;
|
||||
}
|
||||
|
||||
if (var->expression.flags & AST_FLAG_VARIADIC) {
|
||||
if (OPTS_FLAG(VARIADIC_ARGS) && var->expression.flags & AST_FLAG_VARIADIC) {
|
||||
char name[1024];
|
||||
ast_value *varargs = ast_value_new(ast_ctx(var), "reserved:va_args", TYPE_ARRAY);
|
||||
varargs->expression.flags |= AST_FLAG_IS_VARARG;
|
||||
|
|
Loading…
Reference in a new issue