mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-06-01 17:12:15 +00:00
catch more uninitialized variables
This commit is contained in:
parent
c81c074660
commit
a521a78adb
2 changed files with 10 additions and 7 deletions
|
@ -1077,12 +1077,11 @@ test_expr (expr_t *e, int test)
|
||||||
if (e->type == ex_error)
|
if (e->type == ex_error)
|
||||||
return e;
|
return e;
|
||||||
|
|
||||||
check_initialized (e);
|
|
||||||
|
|
||||||
if (!test)
|
if (!test)
|
||||||
return unary_expr ('!', e);
|
return unary_expr ('!', e);
|
||||||
|
|
||||||
type = extract_type (e);
|
type = extract_type (e);
|
||||||
|
check_initialized (e);
|
||||||
if (e->type == ex_error)
|
if (e->type == ex_error)
|
||||||
return e;
|
return e;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
|
|
@ -173,7 +173,7 @@ expr_t *argv_expr (void);
|
||||||
%type <param> param param_list
|
%type <param> param param_list
|
||||||
%type <def> opt_initializer methoddef var_initializer
|
%type <def> opt_initializer methoddef var_initializer
|
||||||
%type <expr> const opt_expr fexpr expr element_list element_list1 element
|
%type <expr> const opt_expr fexpr expr element_list element_list1 element
|
||||||
%type <expr> string_val opt_state_expr think opt_step array_decl
|
%type <expr> string_val opt_state_expr think opt_step array_decl texpr
|
||||||
%type <expr> statement statements statement_block
|
%type <expr> statement statements statement_block
|
||||||
%type <expr> label break_label continue_label enum_list enum
|
%type <expr> label break_label continue_label enum_list enum
|
||||||
%type <expr> unary_expr primary cast_expr opt_arg_list arg_list
|
%type <expr> unary_expr primary cast_expr opt_arg_list arg_list
|
||||||
|
@ -828,7 +828,7 @@ statement
|
||||||
switch_block = $3;
|
switch_block = $3;
|
||||||
break_label = $2;
|
break_label = $2;
|
||||||
}
|
}
|
||||||
| WHILE break_label continue_label '(' fexpr ')' save_inits statement
|
| WHILE break_label continue_label '(' texpr ')' save_inits statement
|
||||||
{
|
{
|
||||||
expr_t *l1 = new_label_expr ();
|
expr_t *l1 = new_label_expr ();
|
||||||
expr_t *l2 = break_label;
|
expr_t *l2 = break_label;
|
||||||
|
@ -862,7 +862,7 @@ statement
|
||||||
pr.source_line = line;
|
pr.source_line = line;
|
||||||
pr.source_file = file;
|
pr.source_file = file;
|
||||||
}
|
}
|
||||||
| DO break_label continue_label statement WHILE '(' fexpr ')' ';'
|
| DO break_label continue_label statement WHILE '(' texpr ')' ';'
|
||||||
{
|
{
|
||||||
expr_t *l1 = new_label_expr ();
|
expr_t *l1 = new_label_expr ();
|
||||||
int line = pr.source_line;
|
int line = pr.source_line;
|
||||||
|
@ -903,7 +903,7 @@ statement
|
||||||
(void) ($<type>3);
|
(void) ($<type>3);
|
||||||
current_storage = st_local;
|
current_storage = st_local;
|
||||||
}
|
}
|
||||||
| IF '(' fexpr ')' save_inits statement %prec IFX
|
| IF '(' texpr ')' save_inits statement %prec IFX
|
||||||
{
|
{
|
||||||
expr_t *tl = new_label_expr ();
|
expr_t *tl = new_label_expr ();
|
||||||
expr_t *fl = new_label_expr ();
|
expr_t *fl = new_label_expr ();
|
||||||
|
@ -932,7 +932,7 @@ statement
|
||||||
pr.source_line = line;
|
pr.source_line = line;
|
||||||
pr.source_file = file;
|
pr.source_file = file;
|
||||||
}
|
}
|
||||||
| IF '(' fexpr ')' save_inits statement ELSE
|
| IF '(' texpr ')' save_inits statement ELSE
|
||||||
{
|
{
|
||||||
$<def_list>$ = save_local_inits (current_scope);
|
$<def_list>$ = save_local_inits (current_scope);
|
||||||
restore_local_inits ($5);
|
restore_local_inits ($5);
|
||||||
|
@ -1153,6 +1153,10 @@ fexpr
|
||||||
: expr { $$ = fold_constants ($1); }
|
: expr { $$ = fold_constants ($1); }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
texpr
|
||||||
|
: fexpr { $$ = convert_bool ($1, 1); }
|
||||||
|
;
|
||||||
|
|
||||||
opt_arg_list
|
opt_arg_list
|
||||||
: /* emtpy */ { $$ = 0; }
|
: /* emtpy */ { $$ = 0; }
|
||||||
| arg_list { $$ = $1; }
|
| arg_list { $$ = $1; }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue