]> granicus.if.org Git - yasm/commitdiff
Splint-noticed bugfixes: memory leaks, unreachable code.
authorPeter Johnson <peter@tortall.net>
Tue, 23 Apr 2002 05:04:41 +0000 (05:04 -0000)
committerPeter Johnson <peter@tortall.net>
Tue, 23 Apr 2002 05:04:41 +0000 (05:04 -0000)
svn path=/trunk/yasm/; revision=606

modules/optimizers/basic/basic-optimizer.c
src/optimizers/basic/basic-optimizer.c

index 381d44a492ac614e06204240378e6c5e1469cb47..52336a2409feb15c1c7e296fb83cbc507746de44 100644 (file)
@@ -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);
 }
index 381d44a492ac614e06204240378e6c5e1469cb47..52336a2409feb15c1c7e296fb83cbc507746de44 100644 (file)
@@ -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);
 }