diff --git a/compiler/cg386mem.pas b/compiler/cg386mem.pas index 461108ebca..55da2417d7 100644 --- a/compiler/cg386mem.pas +++ b/compiler/cg386mem.pas @@ -397,14 +397,20 @@ implementation var extraoffset : longint; + { rl stores the resulttype of the left node, this is necessary } + { to detect if it is an ansistring } + { because in constant nodes which constant index } + { the left tree is removed } + rl : pdef; t : ptree; hp : preference; tai : Pai386; pushed : tpushed; + begin secondpass(p^.left); - + rl:=p^.left^.resulttype; { we load the array reference to p^.location } { an ansistring needs to be dereferenced } @@ -729,15 +735,14 @@ implementation p^.location.reference.segment:=R_FS; end; - { have to remove a temp. wide/ansistring ? + { have we to remove a temp. wide/ansistring ? c:=(s1+s2)[i] for example } if (p^.location.loc=LOC_MEM) and - assigned(p^.left) and - (p^.left^.resulttype^.deftype=stringdef) then + (rl^.deftype=stringdef) then begin - case pstringdef(p^.left^.resulttype)^.string_typ of + case pstringdef(rl)^.string_typ of st_ansistring: begin del_reference(p^.location.reference); @@ -850,7 +855,10 @@ implementation end. { $Log$ - Revision 1.28 1999-02-04 17:16:51 peter + Revision 1.29 1999-02-07 22:53:07 florian + * potential bug in secondvecn fixed + + Revision 1.28 1999/02/04 17:16:51 peter * fixed crash with temp ansistring indexing Revision 1.27 1999/02/04 11:44:46 florian