Browse Source

compiler: set nil after free

mattias 5 days ago
parent
commit
4d3f31e168

+ 23 - 23
compiler/wasm32/aasmcpu.pas

@@ -26,7 +26,7 @@ unit aasmcpu;
 interface
 
 uses
-  cclasses,
+  sysutils,cclasses,
   globtype,globals,verbose,
   aasmbase,aasmtai,aasmdata,aasmsym,
   cgbase,cgutils,cpubase,cpuinfo,ogbase,
@@ -539,8 +539,8 @@ uses
 
     destructor TWasmValidationStacks.Destroy;
       begin
-        FValueStack.Free;
-        FCtrlStack.Free;
+        FreeAndNil(FValueStack);
+        FreeAndNil(FCtrlStack);
         inherited Destroy;
       end;
 
@@ -1272,9 +1272,9 @@ uses
 
     destructor tai_wasmstruc_if.Destroy;
       begin
-        then_asmlist.free;
-        else_asmlist.free;
-        if_instr.free;
+        FreeAndNil(then_asmlist);
+        FreeAndNil(else_asmlist);
+        FreeAndNil(if_instr);
         inherited Destroy;
       end;
 
@@ -1450,8 +1450,8 @@ uses
 
     destructor tai_wasmstruc_block.Destroy;
       begin
-        inner_asmlist.free;
-        block_instr.free;
+        FreeAndNil(inner_asmlist);
+        FreeAndNil(block_instr);
         inherited Destroy;
       end;
 
@@ -1519,8 +1519,8 @@ uses
 
     destructor tai_wasmstruc_loop.Destroy;
       begin
-        inner_asmlist.free;
-        loop_instr.free;
+        FreeAndNil(inner_asmlist);
+        FreeAndNil(loop_instr);
         inherited Destroy;
       end;
 
@@ -1605,7 +1605,7 @@ uses
 
     destructor tai_wasmstruc_legacy_try.Destroy;
       begin
-        try_asmlist.free;
+        FreeAndNil(try_asmlist);
         inherited Destroy;
       end;
 
@@ -1714,10 +1714,10 @@ uses
       begin
         for i:=low(catch_list) to high(catch_list) do
           begin
-            catch_list[i].asmlist.free;
-            catch_list[i].catch_instr.free;
+            FreeAndNil(catch_list[i].asmlist);
+            FreeAndNil(catch_list[i].catch_instr);
           end;
-        catch_all_asmlist.free;
+        FreeAndNil(catch_all_asmlist);
         inherited Destroy;
       end;
 
@@ -1811,8 +1811,8 @@ uses
 
     destructor tai_wasmstruc_try_table.Destroy;
       begin
-        inner_asmlist.free;
-        try_table_instr.free;
+        FreeAndNil(inner_asmlist);
+        FreeAndNil(try_table_instr);
         inherited Destroy;
       end;
 
@@ -1862,7 +1862,7 @@ uses
 
     destructor tai_wasmstruc_legacy_try_delegate.Destroy;
       begin
-        delegate_instr.free;
+        FreeAndNil(delegate_instr);
         inherited Destroy;
       end;
 
@@ -1967,7 +1967,7 @@ uses
 
     destructor tai_functype.destroy;
       begin
-        functype.free;
+        FreeAndNil(functype);
         inherited;
       end;
 
@@ -2028,7 +2028,7 @@ uses
 
     destructor taicpu.Destroy;
       begin
-        try_table_catch_clauses.free;
+        FreeAndNil(try_table_catch_clauses);
         inherited;
       end;
 
@@ -4011,7 +4011,7 @@ uses
             else
               destlist.Concat(p);
           end;
-        tmplist.free;
+        FreeAndNil(tmplist);
       end;
 
 
@@ -4060,7 +4060,7 @@ uses
                     begin
                       q:=tai(mapres.newlist.First);
                       l.insertListAfter(p,mapres.newlist);
-                      mapres.newlist.free;
+                      FreeAndNil(mapres.newlist);
                       l.Remove(p);
                       p:=q;
                     end;
@@ -4094,7 +4094,7 @@ uses
                     begin
                       q:=tai(mapres.newlist.First);
                       l.insertListAfter(p,mapres.newlist);
-                      mapres.newlist.free;
+                      FreeAndNil(mapres.newlist);
                       l.Remove(p);
                       p:=q;
                     end;
@@ -4116,7 +4116,7 @@ uses
       begin
         blockstack:=twasmstruc_stack.create;
         map_structured_asmlist_inner(l,f,blockstack);
-        blockstack.free;
+        FreeAndNil(blockstack);
       end;
 
 

+ 2 - 2
compiler/wasm32/agbinaryen.pas

@@ -220,8 +220,8 @@ implementation
 
     destructor TBinaryenAssembler.Destroy;
       begin
-        InstrWriter.free;
-        asmfiles.free;
+        FreeAndNil(InstrWriter);
+        FreeAndNil(asmfiles);
         inherited destroy;
       end;
 

+ 6 - 6
compiler/wasm32/cgcpu.pas

@@ -26,7 +26,7 @@ unit cgcpu;
 interface
 
     uses
-       globtype,parabase,
+       sysutils,globtype,parabase,
        cgbase,cgutils,cgobj,cghlcpu,
        aasmbase,aasmtai,aasmdata,aasmcpu,
        cpubase,cpuinfo,
@@ -85,11 +85,11 @@ implementation
 
     procedure TCgWasm.done_register_allocators;
       begin
-        rg[R_INTREGISTER].free;
-        rg[R_FPUREGISTER].free;
-        rg[R_MMREGISTER].free;
-        rg[R_FUNCREFREGISTER].free;
-        rg[R_EXTERNREFREGISTER].free;
+        FreeAndNil(rg[R_INTREGISTER]);
+        FreeAndNil(rg[R_FPUREGISTER]);
+        FreeAndNil(rg[R_MMREGISTER]);
+        FreeAndNil(rg[R_FUNCREFREGISTER]);
+        FreeAndNil(rg[R_EXTERNREFREGISTER]);
         inherited done_register_allocators;
       end;
 

+ 9 - 9
compiler/wasm32/cpupi.pas

@@ -26,7 +26,7 @@ unit cpupi;
 interface
 
   uses
-    cutils,globtype,aasmdata,aasmcpu,aasmtai,
+    sysutils,cutils,globtype,aasmdata,aasmcpu,aasmtai,
     procinfo,cpubase,cpuinfo, symtype,aasmbase,cgbase,
     psub, cclasses;
 
@@ -501,7 +501,7 @@ implementation
 
     destructor tcpuprocinfo.destroy;
       begin
-        FGotoTargets.Free;
+        FreeAndNil(FGotoTargets);
         inherited destroy;
       end;
 
@@ -644,7 +644,7 @@ implementation
                              ((cblock.blockstart.opcode=a_try_table) and (lastinstr.opcode<>a_end_try_table)) or
                              ((cblock.blockstart.opcode=a_legacy_try) and (lastinstr.opcode<>a_end_legacy_try)) then
                             Message1(parser_f_unsupported_feature,'incompatible nesting level');
-                          cblock.free;
+                          FreeAndNil(cblock);
                         end;
 
                       else
@@ -673,7 +673,7 @@ implementation
             end;
           if cur_nesting_depth<>0 then
             Message1(parser_f_unsupported_feature,'unbalanced nesting level');
-          blockstack.free;
+          FreeAndNil(blockstack);
         end;
 
       function resolve_labels_pass2(asmlist: TAsmList): Boolean;
@@ -972,7 +972,7 @@ implementation
                 curr_block.Concat(taicpu.op_sym(a_br,state_machine_exit));
               asmlist.concatList(curr_block);
             end;
-          tmplist.Free;
+          FreeAndNil(tmplist);
           asmlist.Concat(taicpu.op_none(a_end_loop));
           asmlist.Concat(taicpu.op_none(a_end_block));
           asmlist.concat(tai_label.create(state_machine_exit));
@@ -1077,9 +1077,9 @@ implementation
           wasm_convert_to_flat_asmlist(asmlist);
 
           asmlist.insertList(entry_code);
-          entry_code.free;
+          FreeAndNil(entry_code);
           asmlist.concatList(exit_code);
-          exit_code.free;
+          FreeAndNil(exit_code);
 
           if not resolve_labels_simple(asmlist) then
             internalerror(2023102101);
@@ -1161,7 +1161,7 @@ implementation
                   vs.Validate(taicpu(hp));
                 hp:=tai(hp.next);
               end;
-            vs.Free;
+            FreeAndNil(vs);
           end;
 
         procedure postprocess_code_assembler;
@@ -1195,7 +1195,7 @@ implementation
 
         add_extra_allocated_locals(localslist);
         insert_localslist(aktproccode,localslist);
-        localslist.Free;
+        FreeAndNil(localslist);
 
 {$ifdef DEBUG_WASM_VALIDATION}
         validate_code;

+ 3 - 3
compiler/wasm32/hlcgcpu.pas

@@ -27,7 +27,7 @@ unit hlcgcpu;
 interface
 
 uses
-  globtype,
+  sysutils,globtype,
   aasmbase,aasmdata,aasmcpu,
   symbase,symconst,symtype,symdef,symsym,
   node,
@@ -373,7 +373,7 @@ implementation
 
   destructor thlcgwasm.Destroy;
     begin
-      fntypelookup.Free;
+      FreeAndNil(fntypelookup);
       inherited Destroy;
     end;
 
@@ -2907,7 +2907,7 @@ implementation
         decstack(list,totalremovesize)
       else if totalremovesize<0 then
         incstack(list,-totalremovesize);
-      ft.free;
+      FreeAndNil(ft);
     end;
 
 

+ 1 - 1
compiler/wasm32/nwasmcal.pas

@@ -144,7 +144,7 @@ implementation
             current_asmdata.CurrAsmList.concat(taicpu.op_none(a_drop));
             thlcgwasm(hlcg).decstack(current_asmdata.CurrAsmList,1);
           end;
-        ft.free;
+        ft.free; // no nil needed
       end;
 
     procedure twasmcallnode.set_result_location(realresdef: tstoreddef);

+ 3 - 3
compiler/wasm32/rgcpu.pas

@@ -194,7 +194,7 @@ implementation
               p:=Tai(load.next);
               { the load }
               list.remove(load);
-              load.free;
+              load.free; // no nil needed
 
               result:=true;
             end;
@@ -298,7 +298,7 @@ implementation
                             p.free;
                             p:=tai(next.next);
                             list.remove(next);
-                            next.free;
+                            next.free; // no nil needed
                             removedsomething:=true;
                             continue;
                           end;
@@ -469,7 +469,7 @@ implementation
         spill_temps[R_FPUREGISTER]:=Nil;
         spill_temps[R_FUNCREFREGISTER]:=Nil;
         spill_temps[R_EXTERNREFREGISTER]:=Nil;
-        templist.free;
+        templist.free; // no nil needed
         { Not needed anymore }
         wasmfuncreftype.owner.deletedef(wasmfuncreftype);
       end;

+ 2 - 1
compiler/wasm32/symcpu.pas

@@ -26,6 +26,7 @@ unit symcpu;
 interface
 
 uses
+  sysutils,
   globtype,
   cpubase,
   aasmdata,
@@ -360,7 +361,7 @@ implementation
 
   destructor tcpuprocdef.destroy;
     begin
-      exprasmlist.free;
+      FreeAndNil(exprasmlist);
       inherited destroy;
     end;
 

+ 3 - 3
compiler/wasm32/tgcpu.pas

@@ -26,7 +26,7 @@ unit tgcpu;
   interface
 
     uses
-       globtype,
+       sysutils, globtype,
        aasmdata,
        cgutils, cpubase,
        symtype,tgobj;
@@ -198,7 +198,7 @@ unit tgcpu;
               begin
                 n:=t;
                 t:=t.nextseq;
-                n.Free;
+                n.free; // no nil needed
               end;
             inherited Destroy;
           end;
@@ -220,7 +220,7 @@ unit tgcpu;
 
     destructor ttgwasm.destroy;
       begin
-        localvars.Free;
+        FreeAndNil(localvars);
         inherited destroy;
       end;
 

+ 2 - 2
compiler/wasm32/wasmdef.pas

@@ -5,7 +5,7 @@ unit wasmdef;
 interface
 
 uses
-  symtype, symsym, symdef, symconst, constexp
+  sysutils, symtype, symsym, symdef, symconst, constexp
   ,defutil, procdefutil, cclasses;
 
 type
@@ -134,7 +134,7 @@ implementation
 
     destructor TWasmProcTypeLookup.Destroy;
       begin
-        list.Free;
+        FreeAndNil(list);
         inherited Destroy;
       end;