https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99376

            Bug ID: 99376
           Summary: Sanitizer detects undefined behaviour in rtlanal.c
                    compiling ada
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: rtl-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: zeccav at gmail dot com
  Target Milestone: ---

Needs option -O2

-- /home/vitti/gcc-150221-full-undefined/gcc/xgcc -S
-B/home/vitti/gcc-150221-full-undefined/gcc/
-I/home/vitti/gcc-150221-full-undefined/gcc/testsuite/ada/acats/support
~/f95/ada1.adb -O2

-- ../../gcc-150221/gcc/rtlanal.c:5060:35: runtime error: shift exponent 126 is
too large for 64-bit type 'long unsigned int'

-- rtlanal.c:5060 "nonzero &= ~((HOST_WIDE_INT_1U << result_low) - 1);"

WITH REPORT; USE REPORT;
PROCEDURE ada1 IS

     F : LONG_INTEGER;

     FUNCTION IDENT_LONG(A : LONG_INTEGER) RETURN LONG_INTEGER IS
     BEGIN
          IF EQUAL (3, 3) THEN
               RETURN A;
          ELSE
               RETURN 0;
          END IF;
     END IDENT_LONG;

     FUNCTION LONG_OK (X : LONG_INTEGER) RETURN BOOLEAN IS
     BEGIN
            return true;
     END;

BEGIN

     F := IDENT_LONG(LONG_INTEGER'FIRST);


     BEGIN
          IF LONG_OK (F*F) THEN
           return ;
          END IF;

     END;



END ada1;

Reply via email to