mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-15 17:33:38 +00:00
Estimated hours taken: 0.25 mercury/BUGS: Add a description of the bug with tests/hard_coded/cc_nondet_disj.m.
174 lines
6.2 KiB
Plaintext
174 lines
6.2 KiB
Plaintext
Bug reports should be sent to mercury-bugs@cs.mu.oz.au.
|
|
If you're reporting more than one bug, please use separate emails
|
|
for each bug. Please include all the relevant information,
|
|
including which version of Mercury you're using, what operating
|
|
system you're using, and a complete source file that
|
|
demonstrates the problem. (If it's something that only shows
|
|
up in multi-module programs, send a shar archive or uuencoded
|
|
tar archive containing your source files.) Please try to ensure
|
|
that bug reports contain all the information that we need to be
|
|
able to reproduce the problem. Make sure that all bug reports are
|
|
fully self-contained.
|
|
|
|
Below is a list of the known outstanding bugs.
|
|
We'll try to record any other bugs that are discovered in 0.6
|
|
on our WWW page <http://www.cs.mu.oz.au/mercury>.
|
|
See also the LIMITATIONS file.
|
|
|
|
-----------------------------------------------------------------------------
|
|
Subject: bug report - Inf and NaN
|
|
Date: Wed, 4 Oct 1995 02:48:19 +1000 (EST)
|
|
|
|
The following module causes an "undefined variable Inf" error in the
|
|
generated C code, because 1E400 == Infinity, which gets printed as `Inf'.
|
|
|
|
:- module hello.
|
|
:- interface.
|
|
:- import_module io.
|
|
|
|
:- pred main(io__state::di, io__state::uo) is det.
|
|
|
|
:- implementation.
|
|
|
|
main -->
|
|
io__write_float(1E400),
|
|
io__write_string("\n").
|
|
|
|
-----------------------------------------------------------------------------
|
|
Subject: bug with no_tag tags and partially instantiated data structures
|
|
Date: Fri, 19 Apr 1996 19:47:18 +1000 (EST)
|
|
|
|
> :- module bug.
|
|
> :- interface.
|
|
> :- type foo ---> foo(int).
|
|
> :- pred bug(foo::out) is det.
|
|
> :- implementation.
|
|
> bug(Y) :-
|
|
> Y = foo(_),
|
|
> Z = 42,
|
|
> Y = foo(Z).
|
|
|
|
This gives the error "code_exprn__cache_exprn: existing definition of var".
|
|
|
|
-----------------------------------------------------------------------------
|
|
Subject: problem with lookup_switch
|
|
Date: Sun, 5 May 1996 16:00:17 +1000 (EST)
|
|
|
|
I think there's a bug in lookup_switch. What happens if you try to
|
|
cross-compile for a 64 bit architecture on a 32 bit machine? I think
|
|
it tries to compute the 64-bit bitmap table entries using 32-bit ints,
|
|
which overflow.
|
|
|
|
-----------------------------------------------------------------------------
|
|
Subject: map__lookup failed in profiler
|
|
Date: Tue, 7 May 1996 11:58:08 +1000 (EST)
|
|
|
|
When profiling programs that have been compiled on the Alpha using
|
|
shared libraries, the profiler will abort with a "Software Error:
|
|
map__lookup failed" message. The work-around is to link with
|
|
`--static'.
|
|
|
|
-----------------------------------------------------------------------------
|
|
Subject: nit in error msg
|
|
Date: Thu, 16 May 1996 10:25:42 +1000 (EST)
|
|
|
|
Here's another small error in an error message. If you comment out
|
|
the [] clause for the functions car/1 or cdr/1, you get this message:
|
|
|
|
fntest.m:023: In `car(in) = out':
|
|
fntest.m:023: Error: determinism declaration not satisfied.
|
|
fntest.m:023: Declared `det', inferred `semidet'.
|
|
fntest.m:023: in argument 1 of clause head:
|
|
fntest.m:023: unification of `HeadVar__1' and `[X | V_4]' can fail.
|
|
|
|
It says Declared `det', inferred `semidet', but I never declared it at
|
|
all. It's a bit misleading. Certainly not a major problem, and the
|
|
later part of the message makes it quite clear what the problem is,
|
|
but I thought I'd point it out to you before I forgot it.
|
|
|
|
-----------------------------------------------------------------------------
|
|
Subject: obscure bug with identical function and constructor
|
|
Date: Sat, 25 May 1996 19:24:12 +1000 (EST)
|
|
|
|
% This test case shows up an obscure bug in the compiler.
|
|
% The compiler reports spurious mode errors in the compiler-generated
|
|
% unification/compare/index predicates.
|
|
% It's not quite clear whether or not this should be legal,
|
|
% but the compiler ought to at least report a better error message.
|
|
% If you write obfuscated code like this, you really deserve
|
|
% what you get, but I guess we should fix the bug someday anyway...
|
|
|
|
:- module nasty_func_test.
|
|
:- type foo ---> f(int) ; g.
|
|
|
|
:- func f(int) = foo.
|
|
f(_) = g.
|
|
|
|
-----------------------------------------------------------------------------
|
|
Subject: missed mode error
|
|
Date: Tue, 28 May 1996 02:27:34 +1000 (EST)
|
|
|
|
Another one for the bug report file:
|
|
|
|
The goal `some [X, Y] X \= Y' should be a mode error,
|
|
but the current mode checker doesn't report an error.
|
|
Instead, the compiler goes on to generate code which gives
|
|
the wrong answer. For example, the following program prints out `no'.
|
|
The same problem also occurs with `some [X, Y] (X = Y -> fail ; true)'.
|
|
|
|
:- module bug.
|
|
:- interface.
|
|
:- import_module io.
|
|
|
|
:- pred main(io__state::di, io__state::uo) is det.
|
|
|
|
:- implementation.
|
|
|
|
main -->
|
|
( { p } -> io__write_string("yes\n") ; io__write_string("no\n") ).
|
|
|
|
:- pred p is semidet.
|
|
p :-
|
|
some [X, Y] X \= Y.
|
|
|
|
The bug occurs only when the variables being unified inside a negated
|
|
context are not live, i.e. when it is the last occurrence of those variables.
|
|
|
|
-----------------------------------------------------------------------------
|
|
Subject: bug with PC values on Alpha
|
|
Date: Wed, 12 Jun 1996 15:45:59 +1000
|
|
|
|
On the alpha, if the Mercury runtime catches a signal, it
|
|
sometimes prints out the wrong value for the PC.
|
|
|
|
-----------------------------------------------------------------------------
|
|
Subject: inference bug
|
|
Date: Mon, 24 Jun 1996 15:48:12 +1000 (EST)
|
|
|
|
The compiler sometimes aborts with a map_lookup failed
|
|
after mode inference finds some mode errors.
|
|
|
|
-----------------------------------------------------------------------------
|
|
Subject: relation.m
|
|
Date: Mon, 29 Jul 1996 16:34:46 +1000 (EST)
|
|
|
|
relation__atsort does not correctly compute the topological sort for
|
|
disconnected cliques. These cliques do not appear in the output list.
|
|
|
|
-----------------------------------------------------------------------------
|
|
Subject: cc_nondet and cc_multi disjunctions
|
|
|
|
The code generator aborts with "Software Error: map__lookup failed"
|
|
when compiling certain code involving disjunctions with output
|
|
variables that occur in single-solution contexts, e.g.
|
|
|
|
:- pred main(io__state::di, io__state::uo) is cc_multi.
|
|
|
|
main --> io__read_line(Res),
|
|
( { Res = ok(['y']) }, io__write_string("Yes\n")
|
|
; { Res = ok(['n']) }, io__write_string("No\n")
|
|
; io__write_string("Huh?\n")
|
|
).
|
|
|
|
-----------------------------------------------------------------------------
|