Actions
Defect #681
closedForward declared type-bound procedures creates crash
Status:
Closed
Priority:
Normal
Category:
Oberon Front-End
Target version:
-
% Done:
100%
Description
The following simplified code compiles, but creates a segmentation fault for me on Windows 10:
MODULE test; TYPE Pattern = RECORD END; PROCEDURE ^ (VAR this : Pattern) SingleMatch(pat-, src- : ARRAY OF CHAR; pidx, sidx : LENGTH): BOOLEAN; PROCEDURE ^ (VAR this : Pattern) MatchAux(pat-, src- : ARRAY OF CHAR; pidx, sidx : LENGTH): LENGTH; PROCEDURE (VAR this : Pattern) MaxExpand(pat-, src- : ARRAY OF CHAR; pidx, sidx, ep : LENGTH): LENGTH; VAR res : LENGTH; ret : BOOLEAN; BEGIN TRACE("MaxExpand"); ret := this.SingleMatch(pat, src, pidx, sidx); res := this.MatchAux(pat, src, 1, sidx); RETURN 0 END MaxExpand; PROCEDURE (VAR this : Pattern) SingleMatch(pat-, src- : ARRAY OF CHAR; pidx, sidx : LENGTH): BOOLEAN; BEGIN TRACE("SingleMatch"); RETURN TRUE END SingleMatch; PROCEDURE (VAR this : Pattern) MatchAux(pat-, src- : ARRAY OF CHAR; pidx, sidx : LENGTH): LENGTH; BEGIN TRACE("MatchAux"); IF pidx = 0 THEN (* guard to avoid infinite loop *) sidx := this.MaxExpand(pat, src, pidx, sidx, 0); END; RETURN sidx END MatchAux; PROCEDURE Test; VAR pat : Pattern; i : LENGTH; BEGIN i := pat.MatchAux("^....1*$", "Test111", 0, 0); END Test; BEGIN Test; END test.
This print out:
Test.mod:29:11: note: "MatchAux" Test.mod:15:11: note: "MaxExpand" Segmentation fault
If I change from type-bound to normal procedures it works as expected.
Files
Updated by Florian Negele 7 months ago
- File forward.patch forward.patch added
- Status changed from New to Closed
- % Done changed from 0 to 100
The attached patch fixes this oversight. Thank you for reporting.
Actions