From: Peter Johnson Date: Tue, 23 Apr 2002 05:04:41 +0000 (-0000) Subject: Splint-noticed bugfixes: memory leaks, unreachable code. X-Git-Tag: v0.2.0~233 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0124032e2c787bce747cb7a5f1f8f48766cdf564;p=yasm Splint-noticed bugfixes: memory leaks, unreachable code. svn path=/trunk/yasm/; revision=606 --- diff --git a/modules/optimizers/basic/basic-optimizer.c b/modules/optimizers/basic/basic-optimizer.c index 381d44a4..52336a24 100644 --- a/modules/optimizers/basic/basic-optimizer.c +++ b/modules/optimizers/basic/basic-optimizer.c @@ -77,8 +77,10 @@ basic_optimize_resolve_label(symrec *sym, int withstart) assert(startexpr != NULL); expr_expand_labelequ(startexpr, sect, 1, basic_optimize_resolve_label); start = expr_get_intnum(&startexpr); - if (!start) + if (!start) { + expr_delete(startexpr); return NULL; + } startval = intnum_get_uint(start); expr_delete(startexpr); } @@ -121,8 +123,10 @@ basic_optimize_resolve_label_2(symrec *sym, int withstart) expr_expand_labelequ(startexpr, sect, 1, basic_optimize_resolve_label_2); start = expr_get_intnum(&startexpr); - if (!start) + if (!start) { + expr_delete(startexpr); return NULL; + } startval = intnum_get_uint(start); expr_delete(startexpr); } @@ -137,12 +141,12 @@ basic_optimize_resolve_label_2(symrec *sym, int withstart) } typedef struct basic_optimize_data { - bytecode *precbc; - const section *sect; + /*@observer@*/ bytecode *precbc; + /*@observer@*/ const section *sect; } basic_optimize_data; static int -basic_optimize_bytecode_1(bytecode *bc, void *d) +basic_optimize_bytecode_1(/*@observer@*/ bytecode *bc, void *d) { basic_optimize_data *data = (basic_optimize_data *)d; @@ -204,16 +208,14 @@ basic_optimize_section_1(section *sect, /*@unused@*/ /*@null@*/ void *d) } static int -basic_optimize_bytecode_2(bytecode *bc, /*@null@*/ void *d) +basic_optimize_bytecode_2(/*@observer@*/ bytecode *bc, /*@null@*/ void *d) { basic_optimize_data *data = (basic_optimize_data *)d; assert(data != NULL); - if (bc->opt_flags != BCFLAG_DONE) { + if (bc->opt_flags != BCFLAG_DONE) InternalError(_("Optimizer pass 1 missed a bytecode!")); - return -1; - } if (!data->precbc) bc->offset = 0; @@ -234,10 +236,9 @@ basic_optimize_section_2(section *sect, /*@unused@*/ /*@null@*/ void *d) data.precbc = NULL; data.sect = sect; - if (section_get_opt_flags(sect) != SECTFLAG_DONE) { + if (section_get_opt_flags(sect) != SECTFLAG_DONE) InternalError(_("Optimizer pass 1 missed a section!")); - return -1; - } + return bcs_traverse(section_get_bytecodes(sect), &data, basic_optimize_bytecode_2); } diff --git a/src/optimizers/basic/basic-optimizer.c b/src/optimizers/basic/basic-optimizer.c index 381d44a4..52336a24 100644 --- a/src/optimizers/basic/basic-optimizer.c +++ b/src/optimizers/basic/basic-optimizer.c @@ -77,8 +77,10 @@ basic_optimize_resolve_label(symrec *sym, int withstart) assert(startexpr != NULL); expr_expand_labelequ(startexpr, sect, 1, basic_optimize_resolve_label); start = expr_get_intnum(&startexpr); - if (!start) + if (!start) { + expr_delete(startexpr); return NULL; + } startval = intnum_get_uint(start); expr_delete(startexpr); } @@ -121,8 +123,10 @@ basic_optimize_resolve_label_2(symrec *sym, int withstart) expr_expand_labelequ(startexpr, sect, 1, basic_optimize_resolve_label_2); start = expr_get_intnum(&startexpr); - if (!start) + if (!start) { + expr_delete(startexpr); return NULL; + } startval = intnum_get_uint(start); expr_delete(startexpr); } @@ -137,12 +141,12 @@ basic_optimize_resolve_label_2(symrec *sym, int withstart) } typedef struct basic_optimize_data { - bytecode *precbc; - const section *sect; + /*@observer@*/ bytecode *precbc; + /*@observer@*/ const section *sect; } basic_optimize_data; static int -basic_optimize_bytecode_1(bytecode *bc, void *d) +basic_optimize_bytecode_1(/*@observer@*/ bytecode *bc, void *d) { basic_optimize_data *data = (basic_optimize_data *)d; @@ -204,16 +208,14 @@ basic_optimize_section_1(section *sect, /*@unused@*/ /*@null@*/ void *d) } static int -basic_optimize_bytecode_2(bytecode *bc, /*@null@*/ void *d) +basic_optimize_bytecode_2(/*@observer@*/ bytecode *bc, /*@null@*/ void *d) { basic_optimize_data *data = (basic_optimize_data *)d; assert(data != NULL); - if (bc->opt_flags != BCFLAG_DONE) { + if (bc->opt_flags != BCFLAG_DONE) InternalError(_("Optimizer pass 1 missed a bytecode!")); - return -1; - } if (!data->precbc) bc->offset = 0; @@ -234,10 +236,9 @@ basic_optimize_section_2(section *sect, /*@unused@*/ /*@null@*/ void *d) data.precbc = NULL; data.sect = sect; - if (section_get_opt_flags(sect) != SECTFLAG_DONE) { + if (section_get_opt_flags(sect) != SECTFLAG_DONE) InternalError(_("Optimizer pass 1 missed a section!")); - return -1; - } + return bcs_traverse(section_get_bytecodes(sect), &data, basic_optimize_bytecode_2); }