Manx 5.0a – strike 1
10 messages in this thread
Anyone out there encountering problems with Manx 5.0a? I can't seem to get
function prototypes to work. Manx generates faulty prototypes when
functions are passed pointers to arrays, and needlessly generates warnings
for seemingly valid prototypes. I've always thought that Manx's strong
point was an error-free compiler. My experience with 5.0a leaves me
*DEEPLY* troubled :-).
Could you show some examples please? If there are problems in this area,
I'd like to have them fixed for the next version. But I can't fix 'em
w/out examples.
The following examples illustrate some of the bugs I've encountered with
5.0a to date.
Bug 1: 5.0a treats 0.0 as a char in the presence of float prototypes.
Example:
void foo( float null ) { }
main(void) {
foo( 0.0 ) ; }
Aztec C Version 5.0a Jan 9 1990 7:57:19
Copyright 1989 by Manx Software Systems, Inc.
clr.s -(sp)
^ File TMPA341.TMP; Line 16 # Opcode extension size
did not match. 1 errors
Bug 2: Prototypes are not generated correctly for functions taking array,
or pointer to array arguments.
Example:
void foo1( char (*array)[3][2] ) { }
void foo2(array) char (*array)[3][2] ; { }
The above program, test.c, when compiled with -qp produces:
void foo1(char array[2][3]*); void foo2(char array[2][3]*);
Bug 3 (example superfluous): -wq logs only the first 25 (approximately)
errors to AztecC.err. Additional errors are not logged, even when -ww is
used.
Tracking down these bugs takes time. Reporting the bugs in a general sense
is much easier. In this spirit I've encountered the following additional
bug.
Bug 4 (sans example): _stkchk (via the -bd option) will occasionally
corrupt the instruction immediately following its invocation (i.e.
immediately following jsr __stkchk).
Bug 5 (suspected, but not confirmed): sizeof(int) may not be working
correctly. I *suspect* that sizeof(int) does not know whether 16 bit or 32
bit ints are being used, although I *have not* confirmed this. I rewrote
the code using sizeof() and my problem disappeared.
Forgive me if I seem blunt in my criticism of 5.0a. I realize that much
has changed since 3.6 and that errors can be expected. If Manx supports
5.0a with courtesy, and corrects bugs promptly – if it offers the level of
customer support which has been so very lacking in the past – perhaps I'll
get over my grumpiness :-).
Thank you for the examples. I'll look into the problems and get back to
you on them. That wasn't so hard now, was it? 😎
BTW, the reason I ask for examples is that roughly 25%-30% of the reports
we get are programmer errors, not problems with our software. When we
request exact examples from people, the lots of people end up saying "oops,
sorry, it was my problem all along". Just saying "floats in prototyes
don't work" is so vague that the information is almost useless to us – we
could spend weeks (literally) just confirming that there is a problem, and
what exactly it is, when you've had code that produces the problem all
along. I realize that it takes time to come up with examples, but IMHO
_not_ giving examples and making wild claims is plain irresponsible and
counter-productive to getting the problems fixed.
I hear you Mike. Certainly it is much easier tracking down bugs with
concrete examples. On the other hand, as a consumer, I feel that
pin-pointing bugs is not my responsibility. Beta-testers get paid for
that. I, on the other hand, have to take valuable time away from
programming to track these things down. Again, perhaps I'm just angry at
the lack of tech support in the past. At least here on CIS I've got
someone to scream at 🙂 (just kidding).
Seriously though, when I contacted Manx in the past, they always seemed to
be giving me the brush-off. Not only was the tech support lacking, their
attitude was all wrong. You said that Manx has corrected this problem.
Well ok. I'll put my past experiences aside.
I have not found any identifyable bugs yet. I had the compiler go into an
endless loop on me last night while compiling uEmacs 3.10, but when I
restarted the make, the same file compiled with no problems. I had been
changing header files to make the compiler happy and the changes did not
affect thefile which choked the compiler. In fact with all the changes in
the header for other files, this file must have been recompiled five or six
times and only hung the compiler once… strange.
Error # 167 (expression too complex – simplify and recompile) is not
documented anywhere I can find and was emitted by the compiler when it
tried to evaluate the following expresstion:
char name[SIZE]; struct foo {
char n_name[SIZE];
… etc… }; int *iP; struct foo *fP;
name[*iP] = fP->n_name[*iP]; this blows up
While I have in the past seen similar errors (CP/M comiler ~8 years ago?,
expression with several more pointer dereferences), I've never seen it on
such a simple expression. The 3.6 compiler had no problems with exressions
much more complex than this. While declaring an extra temp variable to hold
the index works, I shouldn't have to do this!
<UP ON SOAPBOX>
This is yet another gripe to another software developer about
…Obnoxious compiler version and copyright notices…
Why is it that everyone insists on throwing this information all over the
screen EVERY TIME THE PROGRAM RUNS??? I know what version of what compiler
I'm running. I know who has the copyrights. Why do I have to sift through
all this garbage to see what happened when I ran the program? A simple
command line switch would suffice if I forgot!
<DOWN OFF SOAPBOX>
Can you give an example? Maybe it's a programmer error. 🙂 I know I
certainly learned a lot when I switched to an ANSI compiler on the PC.
Who me? A programming error. Nah, couldn't be :-). John, I know you're a
big Manx advocate, citing product stability as its strong point. 5.0a has
shaken my confidence. Examples will be posted to Mike in this forum. Stay
tuned …
I own Lattice, too, but not the 5. version yet, I'll probably upgrade, and
another faction within Syndesis does use 5.0. I own a commercial version
of Manx, and just ordered 6.0. Advocate? Well, yes, but mostly from the
big pile of source code for InterChange and InterFont that resides in
Manx-ish code. Even if it was easy, I don't have time to port it and then
test it to insure the port went correctly. So I'll maintain it all in Manx
3.6a for a long time, I imagine. I'm always distrustful of the first
release of *ANYTHING*, and any developer would be a fool to rely on the
first release of a new compiler, be it Manx or Lattice. Lattice 5.0 had
plenty of bugs, too, and I'm sure Manx 6.0 has got some, too. I paid my
$75 more just to keep up; I don't think I'll start working with it
seriously until they've posted the second set of bug-fixing patches. 🙂
Your development strategey seems reasonable – maintain code with proven
compilers. I'm developing new stuff though. Perhaps the current strain
(of compilers) will be stable by the time I get done. BTW – How's
Syndesis?