Browse Source

* fixed allocation of register before release in second_cstring_to_pchar

Jonas Maebe 24 years ago
parent
commit
acb4dca7fb
1 changed files with 18 additions and 6 deletions
  1. 18 6
      compiler/i386/n386cnv.pas

+ 18 - 6
compiler/i386/n386cnv.pas

@@ -355,11 +355,12 @@ implementation
       begin
       begin
          clear_location(location);
          clear_location(location);
          location.loc:=LOC_REGISTER;
          location.loc:=LOC_REGISTER;
-         location.register:=getregister32;
          case tstringdef(left.resulttype.def).string_typ of
          case tstringdef(left.resulttype.def).string_typ of
            st_shortstring :
            st_shortstring :
              begin
              begin
                inc(left.location.reference.offset);
                inc(left.location.reference.offset);
+               del_reference(left.location.reference);
+               location.register:=getregister32;
                emit_ref_reg(A_LEA,S_L,newreference(left.location.reference),
                emit_ref_reg(A_LEA,S_L,newreference(left.location.reference),
                  location.register);
                  location.register);
              end;
              end;
@@ -374,8 +375,12 @@ implementation
                   emit_ref_reg(A_LEA,S_L,hr,location.register);
                   emit_ref_reg(A_LEA,S_L,hr,location.register);
                 end
                 end
                else
                else
-                emit_ref_reg(A_MOV,S_L,newreference(left.location.reference),
-                  location.register);
+                begin
+                  del_reference(left.location.reference);
+                  location.register:=getregister32;
+                  emit_ref_reg(A_MOV,S_L,newreference(left.location.reference),
+                    location.register);
+                end;
              end;
              end;
            st_longstring:
            st_longstring:
              begin
              begin
@@ -393,8 +398,12 @@ implementation
                   emit_ref_reg(A_LEA,S_L,hr,location.register);
                   emit_ref_reg(A_LEA,S_L,hr,location.register);
                 end
                 end
                else
                else
-                emit_ref_reg(A_MOV,S_L,newreference(left.location.reference),
-                  location.register);
+                begin
+                  del_reference(left.location.reference);
+                  location.register:=getregister32;
+                  emit_ref_reg(A_MOV,S_L,newreference(left.location.reference),
+                    location.register);
+                end;
              end;
              end;
          end;
          end;
       end;
       end;
@@ -1414,7 +1423,10 @@ begin
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.16  2001-07-08 21:00:17  peter
+  Revision 1.17  2001-07-16 13:19:08  jonas
+    * fixed allocation of register before release in second_cstring_to_pchar
+
+  Revision 1.16  2001/07/08 21:00:17  peter
     * various widestring updates, it works now mostly without charset
     * various widestring updates, it works now mostly without charset
       mapping supported
       mapping supported