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

            Bug ID: 58920
           Summary: Overeager optimization based on TREE_THIS_NOTRAP
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jason at gcc dot gnu.org

Created attachment 31108
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=31108&action=edit
Patch to set TREE_THIS_NOTRAP for C++ references

The TREE_THIS_NOTRAP macro came up in email the other day, and it seemed to me
that it would be useful to set on C++ references, since they are required to
refer to objects; trying to read from a null reference gives undefined
behavior.  So I tried the attached patch.  But it breaks all the ext_pointer
tests in libstdc++.

Basically, what's happening is that there is a code path which is never taken
which leads to an explicit null dereference.  The optimizers see this happening
within a loop and decide to hoist it out of the loop.  So now it is executed
before the loop starts, and causes a SEGV.

Is this an appropriate optimization?

Reply via email to