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

            Bug ID: 114012
           Summary: overloaded unary operator called twice
           Product: gcc
           Version: 13.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: alexandre.poux at coria dot fr
  Target Milestone: ---

Created attachment 57470
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=57470&action=edit
a program triggering the duplicate call on unary operator

In the attached code, I overloaded assignment (assign) and the unary operator
'-' (neg) for a custom class

The assign subroutine receive a polymorphic argument and the function neg
returns a polymorphic result.

When a simple `i = -i` is supposed to call `neg` and the `assign`, it
surprisingly call `neg` twice and then `assign`. 

Both time `neg` is called with the correct argument (the old value of `i`) so
the result is good anyway.

As far as I know, `neg` and `assign` are supposed to be pure (which they are
not, due to the print) so this should only induce a performance hit.

I've observed this on an up to date Arch linux with core/gcc-fortran 13.2.1-5
and extra/gcc12-fortran 12.3.0-3.

Reply via email to