In the attached code the pure attribute is causing the result to be random/junk
on the final calculation in main.  According to the docs the function seems to
qualify for pure status -- it uses only the parameters given.   It does however
create a temporary (but as this exists on the stack I assumed it is okay, since
it still doesn't violate the notion of being pure).

Expected result (with -DNOATTRIB or -DNOCOPYCTOR flags):
5, 5
1, 1

Actual Result (compiled with g++ -o test point_err.cc):
5, 5
338848, 4.85849e-270

(NOTE: Worked on 3.3)

It is curious also that no declaring the copy constructor also allows this code
to work with the pure attribute.

So, either this is a bug in the 4.0 "pure" handling, or the documentation for
"pure" is omitting some vital point which my code violates.

-- 
           Summary: pure attribute produces incorrect results
           Product: gcc
           Version: 4.0.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: eda-qa at disemia dot com
                CC: gcc-bugs at gcc dot gnu dot org


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

Reply via email to