Browse Source

* fixed memory leak in debug info generation for bitpacked records

git-svn-id: trunk@7629 -
Jonas Maebe 18 years ago
parent
commit
9b198fb1d7
1 changed files with 12 additions and 6 deletions
  1. 12 6
      compiler/dbgstabs.pas

+ 12 - 6
compiler/dbgstabs.pas

@@ -724,6 +724,9 @@ implementation
             result:=state.stabstring;
             result:=state.stabstring;
           end;
           end;
 
 
+      var
+        tempstr: pchar;
+
       begin
       begin
         result:=nil;
         result:=nil;
         case def.typ of
         case def.typ of
@@ -754,13 +757,16 @@ implementation
               result:=def_stabstr_evaluate(def,'ar$1;$2;$3;$4',[def_stab_number(tarraydef(def).rangedef),
               result:=def_stabstr_evaluate(def,'ar$1;$2;$3;$4',[def_stab_number(tarraydef(def).rangedef),
                  tostr(tarraydef(def).lowrange),tostr(tarraydef(def).highrange),def_stab_number(tarraydef(def).elementdef)])
                  tostr(tarraydef(def).lowrange),tostr(tarraydef(def).highrange),def_stab_number(tarraydef(def).elementdef)])
             else
             else
-              // will only show highrange-lowrange+1 bits in gdb
-              result:=def_stabstr_evaluate(def,'@s$1;@S;S$2',
-                [tostr(TConstExprInt(tarraydef(def).elepackedbitsize) * tarraydef(def).elecount),def_stabstr_evaluate(tarraydef(def).rangedef,'r${numberstring};$1;$2;',
-                  [tostr(tarraydef(def).lowrange),tostr(tarraydef(def).highrange)
-                ])]);
+              begin
 // the @P seems to be ignored by gdb
 // the @P seems to be ignored by gdb
-//              result:=def_stabstr_evaluate(def,'ar$1;$2;$3;$4;@P;',[def_stab_number(tarraydef(def).rangedef),tostr(tarraydef(def).lowrange),tostr(tarraydef(def).highrange),def_stab_number(tarraydef(def).elementdef)]);
+//                result:=def_stabstr_evaluate(def,'ar$1;$2;$3;$4;@P;',[def_stab_number(tarraydef(def).rangedef),tostr(tarraydef(def).lowrange),tostr(tarraydef(def).highrange),def_stab_number(tarraydef(def).elementdef)]);
+                tempstr:=def_stabstr_evaluate(tarraydef(def).rangedef,'r${numberstring};$1;$2;',
+                  [tostr(tarraydef(def).lowrange),tostr(tarraydef(def).highrange)]);
+                // will only show highrange-lowrange+1 bits in gdb
+                result:=def_stabstr_evaluate(def,'@s$1;@S;S$2',
+                  [tostr(TConstExprInt(tarraydef(def).elepackedbitsize) * tarraydef(def).elecount),tempstr]);
+                freemem(tempstr);
+              end;
           procdef :
           procdef :
             result:=procdef_stabstr(tprocdef(def));
             result:=procdef_stabstr(tprocdef(def));
           procvardef :
           procvardef :