Date: Thursday, 7 June 1984  09:44-MDT
From: "Pearson Pete" at LLL-MFE.ARPA
To:   info-micro at BRL.ARPA
Re:   Five known problems with Aztec C compiler (long).

    Re: Manx Software Systems' Aztec C compiler for Z80, CP/M,
	version CZII 1.05c.

The following five problems were reported to Manx long enough ago (1983, I
think) that I'm confident they're never going to acknowledge them, let alone
fix them for me.

- Does not flag an error when a structure is passed as an argument, if
there is another argument. However, the code generated passes a nonsense
value instead of the address of the structure.
  Example:
	struct confrm {	int c_act;	};	/* No error messages is	*/
	testsub(s)				/* output during the	*/
	char *s;				/* compilation of this	*/
	{	struct confrm xyz;		/* program, though	*/
		sreadcf(s, xyz);		/* bad code is		*/
	}					/* generated. 		*/

- Does not report an error when an undefined structure is referenced in the
definition of a second structure. Of course, it can't possibly generate
correct code in this situation!
  Example:
	struct ss1 {	int a;
			struct ss2 b;	};
	sub1()					/* No error message	*/
	{					/* appears during the	*/
	    struct ss1 c;			/* compilation of this	*/
	    c.a = 1;				/* program.		*/
	}

- Does not properly interpret the logical negation operator ("!") during
the compile-time evaluation of constant expressions.
  Example:
	#define	TRUE	(1==1)
	#define	FALSE	(!TRUE)
	sub1()
	{
		sub2(TRUE);	/* The compiler evaluates all	*/
		sub3(FALSE);	/* three of these arguments	*/
		sub4(!1);	/* to 1.			*/
	}

- Programs compiled with the Aztec C compiler and running with the Z80CLIB
runtime library run ridiculously slowly when "stdout" output is redirected
to a file. A change to the Aztec-supplied module "Croot" (which scans the
execute line to perform redirection) can correct this problem.

- Generates incorrect code for the statement
	i = (x > 0);

pearson@lll-mfe
Opinions and speculations entirely my own.
