X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=parser.c;h=99b7eb7bace4f651eb2fbf37d221cd18a14444cb;hb=f4043faf0b4963550463a3b81dc38b12c6f5d91f;hp=b45fe62bb266a7a24e4fe5dfcaf26492b568a9e2;hpb=4649c12fa93a68d3b68c337e42c5628d458a78e9;p=xonotic%2Fgmqcc.git diff --git a/parser.c b/parser.c index b45fe62..99b7eb7 100644 --- a/parser.c +++ b/parser.c @@ -1741,6 +1741,7 @@ static bool parse_break_continue(parser_t *parser, ast_block *block, ast_express static bool parse_switch(parser_t *parser, ast_block *block, ast_expression **out) { ast_expression *operand; + ast_value *opval; ast_switch *switchnode; ast_switch_case swcase; @@ -1762,6 +1763,15 @@ static bool parse_switch(parser_t *parser, ast_block *block, ast_expression **ou if (!operand) return false; + if (!OPTS_FLAG(RELAXED_SWITCH)) { + opval = (ast_value*)operand; + if (!ast_istype(operand, ast_value) || !opval->isconst) { + parseerror(parser, "case on non-constant values need to be explicitly enabled via -frelaxed-switch"); + ast_unref(operand); + return false; + } + } + switchnode = ast_switch_new(ctx, operand); /* closing paren */ @@ -1988,9 +1998,11 @@ static bool GMQCC_WARN parser_pop_local(parser_t *parser) varentry_t *ve; ve = &vec_last(parser->locals); - if (ast_istype(ve->var, ast_value) && !(((ast_value*)(ve->var))->uses)) { - if (parsewarning(parser, WARN_UNUSED_VARIABLE, "unused variable: `%s`", ve->name)) - rv = false; + if (!parser->errors) { + if (ast_istype(ve->var, ast_value) && !(((ast_value*)(ve->var))->uses)) { + if (parsewarning(parser, WARN_UNUSED_VARIABLE, "unused variable: `%s`", ve->name)) + rv = false; + } } mem_d(ve->name); vec_pop(parser->locals);