Project

General

Profile

Actions

Defect #681

closed

Forward declared type-bound procedures creates crash

Added by Runar Tenfjord 7 months ago. Updated 7 months ago.

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

forward.patch (2.26 KB) forward.patch Florian Negele, 10 February 2025 08:20
Actions

Also available in: Atom PDF