Gnu compiler (latest microchip version with full optimizations) makes the
following error.

unsigned long value;

     value=2501*1600;
the result should be 0x3D0F40  instead it is 0x0F40.
The problem is this.  The compiler computed the constant 2501*1600 as an
integer, even though it had sufficient information to know that  value is a
long, and thus should have automatically promoted the constants in the
multiplication.  It assigned the integer value to the long properly, but since
the compiler did the multiply in integer form first, it only got the last half.
postpending 'l' to each constant fixes it, but that should not be necessary, as
the compiler has all the information it needs to properly do the multiply.


-- 
           Summary: constant folding at compile time limited to integers.
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: tossit1 at mail15 dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42807

Reply via email to