[M3devel] narrow still failing..

mika at async.caltech.edu mika at async.caltech.edu
Tue Jan 21 05:18:26 CET 2014


Were you able to get it to fail on any of your computers?

Your Z fails for me---CM3 and PM3 both.

(579)truffles:~/bsd/refany/src>../AMD64_LINUX/refany 


***
*** runtime error:
***    An explicit or implicit NARROW() operation failed.
***    file "../src/Main.m3", line 30
***

Abort
(580)truffles:~/bsd/refany/src>cat Mai
Main.m3~  Main.m3   
(580)truffles:~/bsd/refany/src>cat -n Main.m3
     1  MODULE Main;
     2  IMPORT BDD, IO;
     3
     4  PROCEDURE P() : REFANY =
     5    BEGIN
     6      VAR x : REFANY;
     7      BEGIN
     8        x := BDD.New("a");
     9        Z(x);
    10        RETURN x
    11      END
    12    END P;
    13
    14  PROCEDURE Q() =
    15    BEGIN
    16      IO.Put(P() & "\n")
    17    END Q;
    18
    19  (*
    20  PROCEDURE Z(VAR x : REFANY) =
    21    BEGIN
    22      TYPECASE x OF
    23        BDD.T(b) => x := BDD.Format(b)
    24      END;
    25    END Z;
    26  *)
    27  PROCEDURE Z(VAR x : REFANY) =
    28     VAR b: BDD.T;
    29     BEGIN
    30       b := x;
    31       x := BDD.Format(b)
    32     END Z;
    33
    34
    35
    36  BEGIN
    37    Q()
    38  END Main.
(581)truffles:~/bsd/refany/src>
"Rodney M. Bates" writes:
>What does this do?
>
>PROCEDURE Z(VAR x : REFANY) =
>   VAR b: BDD.T;
>   BEGIN
>     b := x;
>     x := BDD.Format(b)
>   END Z;
>
>The common property of the failing cases seems to be the necessity
>of a runtime narrow check when passing x to BDD.Format.
>
>So far, I haven't been able to reproduce the failure on AMD64_LINUX,
>with even more irrelevant (one would think) stuff pared out.  I moved
>T, Root, and Format into main, removed all but one fields of T and Root,
>replaced BDD.New by NEW(Root) and removed Symtab and most of the body
>from Format.
>
>Looking at your code, I agree it should work.
>
>
>On 01/19/2014 04:01 PM, mika at async.caltech.edu wrote:
>> As in the ISTYPE/TYPECASE example, the following works:
>>
>>
>> PROCEDURE Z(VAR x : REFANY) =
>>    BEGIN
>>      TYPECASE x OF
>>        BDD.T(b) => x := BDD.Format(b)
>>      END;
>>    END Z;
>>
>> (244)rover:~/refany/src>../FreeBSD4/refany
>> a
>>
>>
>> This does NOT work:
>>
>> PROCEDURE Z(VAR x : REFANY) =
>>    BEGIN
>>      TYPECASE x OF
>>        BDD.T(b) => x := BDD.Format(x)
>>      END;
>>    END Z;
>>
>>
>> (242)rover:~/refany/src>../FreeBSD4/refany
>>
>>
>> ***
>> *** runtime error:
>> ***    NARROW failed
>> ***    file "/big/home/mika/refany/src/Main.m3", line 22
>> ***
>>
>>    use option @M3stackdump to get a stack trace
>> Abort
>>
>>
>> Same result PM3 / CM3.
>>
>>       Mika
>>



More information about the M3devel mailing list