From 063c50fce450693f0098cbc4a28efd109cbed01b Mon Sep 17 00:00:00 2001 From: Dale Weiler Date: Sat, 22 Jun 2013 01:23:59 +0000 Subject: [PATCH] More bug fixes and dead code elimination --- ast.c | 9 ++++++--- parser.c | 7 ++++++- test.c | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/ast.c b/ast.c index a23aa75..584bda0 100644 --- a/ast.c +++ b/ast.c @@ -2893,10 +2893,13 @@ bool ast_loop_codegen(ast_loop *self, ast_function *func, bool lvalue, ir_value if (bprecond) { ir_block *ontrue, *onfalse; - if (bbody) ontrue = bbody; + ontrue = bbody; /* can never be null */ + + /* all of this is dead code else if (bincrement) ontrue = bincrement; - else if (bpostcond) ontrue = bpostcond; - else ontrue = bprecond; + else ontrue = bpostcond; + */ + onfalse = bout; if (self->pre_not) { tmpblock = ontrue; diff --git a/parser.c b/parser.c index 49e965a..f979347 100644 --- a/parser.c +++ b/parser.c @@ -2755,7 +2755,12 @@ static bool parse_dowhile(parser_t *parser, ast_block *block, ast_expression **o if (vec_last(parser->breaks) != label || vec_last(parser->continues) != label) { parseerror(parser, "internal error: label stack corrupted"); rv = false; - ast_delete(*out); + /* + * Test for NULL otherwise ast_delete dereferences null pointer + * and boom. + */ + if (*out) + ast_delete(*out); *out = NULL; } else { diff --git a/test.c b/test.c index cdb9041..29aefc1 100644 --- a/test.c +++ b/test.c @@ -896,7 +896,7 @@ static void task_destroy(void) { else util_debug("TEST", "removed stderr log file: %s\n", task_tasks[i].stderrlogfile); - remove(task_tasks[i].tmpl->tempfilename); + (void)!remove(task_tasks[i].tmpl->tempfilename); } /* free util_strdup data for log files */ -- 2.39.2