jokinen@tucos.UUCP (Matti Jokinen) (12/28/87)
Description: An attempt to overload a module with more than one parameter
may crash the debugger. The bug appears at least in VAX CLU.
Repeat-by: Compile the following program into c.bin:
c = cluster is create
rep = string
create = proc[t,u: type](x: t, y: u,
p: proctype(t) returns(rep),
q: proctype(u) returns(rep))
returns(cvt)
return(p(x))
end create
end c
Type `debug c', and when the linker prompt appears, type `load("c")'.
Although the symptoms are very similar, this bug is unrelated to the bug
I reported in article 22.
Fix: The true origin of this problem appears to be the following equate
in /usr/clu/link/linker.equ:
params = sequence[constant]
I think it should be
params = oneof[dummy: null, list: sequence[constant]]
However, changing this would cause a number of changes in various parts
of the linker. I am reluctant to maintain a system that differs too
much from the `official' MIT version. Also, these changes may depend on
the linker version you have.
Thus I prefere a quick fix, and fortunately there is one. Redefine the
Copy procedure in /usr/clu/link/clu/constant. The original definition is
Copy = proc (C: cvt) returns (cvt);
return (rep$Copy1(C));
end Copy;
Replace it with
Copy = proc (C: cvt) returns (cvt);
tagcase C
tag a_Null: return(C);
others: return (rep$Copy1(C));
end;
end Copy;