From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 40E57395C076; Tue, 3 Aug 2021 16:22:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 40E57395C076 From: "federico.perini at gmail dot com" To: gcc-bugs@gcc.gnu.org Subject: [Bug fortran/101757] New: Simple integer assigment fails (off-seted by -1) when compiling with -O3 Date: Tue, 03 Aug 2021 16:22:18 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: fortran X-Bugzilla-Version: 7.1.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: federico.perini at gmail dot com X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_id short_desc product version bug_status bug_severity priority component assigned_to reporter target_milestone attachments.created Message-ID: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: gcc-bugs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-bugs mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Aug 2021 16:22:19 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D101757 Bug ID: 101757 Summary: Simple integer assigment fails (off-seted by -1) when compiling with -O3 Product: gcc Version: 7.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: federico.perini at gmail dot com Target Milestone: --- Created attachment 51251 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=3D51251&action=3Dedit test program An extremely simple logical-flag-based assignment, which sets an integer to= 1 if the logical is .true., and to 0 if .false., fails with gfortran 7.1.0 if compiled with -O3. Using `WHERE`, `MERGE`, or a simple loop does not change= the result. Test program: program test_merge_ use iso_fortran_env implicit none integer, parameter :: N=3D10000 logical :: test(N) integer :: i,itest(N) do i=3D1,N test(i) =3D mod(i,2)=3D=3D0 end do itest =3D merge(1,0,test) print *, 'MERGE itest min (0) =3D',minval(itest),' max (1)=3D',maxval(i= test) where (test) itest =3D 1 elsewhere itest =3D 0 end where print *, 'WHERE itest min (0) =3D',minval(itest),' max (1)=3D',maxval(i= test) do i=3D1,N if (test(i)) then itest(i) =3D 1 else itest(i) =3D 0 endif end do print *, 'IFLOOP itest min (0) =3D',minval(itest),' max (1)=3D',maxval(i= test) end program test_merge_ Expected result is OK if "-O2", wrong if "-O3":=20 werc 1073% gfortran -O3 test_merge.f90 werc 1074% ./a.out MERGE itest min (0) =3D -1 max (1)=3D 0 WHERE itest min (0) =3D -1 max (1)=3D 0 IFLOOP itest min (0) =3D -1 max (1)=3D 0 werc 1075% gfortran -O2 test_merge.f90 werc 1076% ./a.out MERGE itest min (0) =3D 0 max (1)=3D 1 WHERE itest min (0) =3D 0 max (1)=3D 1 IFLOOP itest min (0) =3D 0 max (1)=3D 1 Tested OK on gfortran 9.2.0, 10.2.0, 10.3.0. Thanks, Federico=