Files
mercury/compiler/notes/BUGS
1995-05-30 09:28:30 +00:00

42 lines
1.7 KiB
Plaintext

- undefined insts/modes cause spurious flow-on errors
- the name mangling code needs to be generalized
- The --static-ground-terms sometimes causes duplicate labels in the
generated C code. Example:
:- pred special_pred_info(special_pred_id, type, string, list(type),
list(mode), determinism).
:- mode special_pred_info(in, in, out, out, out, out) is det.
special_pred_info(unify, Type, "__Unify__", [Type, Type], [In, In], semidet) :-
In = (ground -> ground).
special_pred_info(index, Type, "__Index__", [Type, IntType], [In, Out], det) :-
term__context_init(Context),
IntType = term__functor(term__atom("int"), [], Context),
In = (ground -> ground),
Out = (free -> ground).
special_pred_info(compare, Type,
"__Compare__", [ResType, Type, Type], [Out, In, In], det) :-
term__context_init(Context),
ResType = term__functor(term__atom("comparison_result"), [], Context),
In = (ground -> ground),
Out = (free -> ground).
- The followcode transformation is buggy, in that it can make valid
code become invalid due to determinism errors. We need to fix
this by running determinism analysis once before followcode
to check for errors, and then running it again after followcode
this time ignoring any errors. Or alternately we could put more
intelligence into the followcode transformation pass so that it doesn't
apply the transformation if it would introduce a determinism error.
This has never occurred in practice, so it is a very low priority.
- Similarly, inlining flattens conjs which may introduce detism errors.
- The output of polymorphism is not in super-homogeneous form.
e.g. unification of pair/1. This does not cause any known bugs
at this time, since the code generator can handle that, but it
should be fixed at some stage.