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

            Bug ID: 64150
           Summary: Missed optimisation opportunity with moved-from pimpl
                    classes and a nullptr d-pointer
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: marc at kdab dot com

Created attachment 34162
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=34162&action=edit
Sample program

When compiling attached sample program to assembler source, the compiler emits
two calls to destroy(), one for p1 and one for p2. However, it should be
statically clear that p1.d == nullptr, always, so dead code elimination should
remove the check for nullptr, the branch and the call to destroy().

$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/opt/gcc/trunk/libexec/gcc/x86_64-unknown-linux-gnu/5.0.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../gcc/configure --prefix=/opt/gcc/trunk
--program-suffix=-trunk --enable-checking=release
--enable-languages=c,c++,go,fortran,objc,obj-c++ : (reconfigured)
../gcc/configure --prefix=/opt/gcc/trunk --enable-checking=release
--enable-languages=c,c++,go,fortran,objc,obj-c++
Thread model: posix
gcc version 5.0.0 20141015 (experimental) (GCC)

Reply via email to