
*******************************************************************************
*  RELEASE 1.10 BUGLIST                                                       *
*                                                                             *
*  This file contains a list of bugs in the 1.10 release of the C30 tools.    *
*  All bugs are fixed in the latest version, unless otherwise indicated.      *
*                                                                             *
*******************************************************************************

ENHANCEMENTS
-----------------------------------------------------------------------------
1) Expand symbol table size (10000 symbols).

2) Allows "register enum" declarations.

3) Now generates reversed loops (checks condition once at top, then at again 
   at bottom for loop iterations).

4) Generates optimal code for expressions of the form *p++.


PARSER
-----------------------------------------------------------------------------
1) An initialization of the form "int x = (int)&var", which is legal, is 
   flagged as illegal by the compiler.  Fixed in 1.21.01.

2) gsp2704 will fix 1.3 
   The compiler does not detect a reference to a member of an undefined
   structure.  In some cases the compiler can crash.


3) dsp2752 will fix 1.4 
   The parser folds enumeration constants incorrectly and generates
   inappropriate warning messages.

CODE GENERATOR
-----------------------------------------------------------------------------
1) An expression containing a right shift, that is implicitly or explicitly
   converted to a different type, gets generated as a left shift instead.
   Example:    long = int >> 24;

2) PTR 2269.  Indirect structure assignments to a nested structure generate
   incorrect code.

3) PTR 2268.  Functions that have register variables do not set the status 
   correctly for the return value.  In the next version, functions no longer
   set the status on their return values.

4) A function that is declared to return a structure but falls through without
   returning one incorrectly tries to return some (garbage) value to the caller.

5) Comparison of two floating point constants is folded to a floating point
   value rather than an integer value.

6) An unconditional branch within three instructions of the "LDI SP,FP" in
   the function prolog gets moved up (delayed) 4, rather than 3, instructions.
   This usually occurs when there are one or two register variables, and the
   very first statement in the function is a "switch".   

7) A structure assignment having a quest operator as the RHS causes the 
   codegen to crash.  Example: struct1 = i ? struct2 : struct3;
   This is actually incorrect syntax and the parser now catches it.

8) In the big model (-b), using the address of a variable generates an 
   incorrect LDP instruction.

9) Code generated for the big model (-b) on the PC is incorrect.  All the LDP
   instructions are generated with large invalid offsets.

10) Generates RTS instead of RTI for returning from an interrupt function.

11) c30 2736 will fix 2.0
    In very rare cases where a unary operation (-, ~, or cast) is a 
    sub-expression of an arithmetic runtime support call, the compiler
    fails to correctly place the operands in R0 and R1.  This usually occurs
    when values are being tracked in R0 from previous computations; if this
    occurs the bug can be avoided by labelling the offending statement.

12) c302745 will fix 2.0
    In functions that return structures, the code to return the structure is
    not generated.  Workaround is to avoid functions that return structures
    and use pointers instead.

13) c302748 will fix 2.0
    In interupt subroutines that make function calls the codegen is
    not saving and restoring the environment as described in the UG 
    5-21 - 5-22.  It also returning with a RETS instead of an RETI.

ASSEMBLER
-----------------------------------------------------------------------------
1) Generates wrong opcode for IACK.                                  

2) Assembler crashes when an archived macro that uses an illegal end macro
   statement is called more than once.  Workaround is to make sure all macros
   are concluded with a $ENDM statement. 

3) PTR 2351 .usect directive incorrectly accepts a non-absolute value for the
   size field. 

4) PTR 2357 Assembler does not assemble lines that appear after a line that
   is greater than 200 characters or a file in which the last line is not
   ended with a newline \n. 

5) C302706.  Fixed v1.30   
   The assembler does not allow direct addressing mode operands with absolute or
   relocatable values wider than 16 bits.  


6) C302703.   PC Only
   The .space directive cannot handle a size operand of 08000h or higher.


7) C302753 fixed v2.0  
   The wrong opcode is generated for a 2 operand instruction using 
   3 operands when the addressing mode of the first operand is
   indirect with pre-displacement add
       i.e.  ADDI  *+ar4(0),r4,r5


8) dsp 2759 fixed in 2.0  
   Using a relocatable address in an expression calculation using multiply
   and divide is not causing an error message.
      x:  nop
	  ldpk  x/80H    ; Assembler should flag as an error


9) c30 2760 fixed in 2.0  
   Global variables defined in a .asect section are being relocated at
   link time.


RUN TIME SUPPORT
------------------------------------------------------------------------
1) GSP2733 FIXED v1.30   
   Memory calculation in realloc does not get the size of the merged
   buffers correct.

ROM UTILITY
-----------------------------------------------------------------------------
1) PTR 2160.  ROM utility generated lowercase hex characters.

2) Rom utility only generated the lower 16 bits of each word. 

ARCHIVER   
-----------------------------------------------------------------------------
