https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67773
Bug ID: 67773 Summary: dealloc called on temp object before and named object after move, while not being called on named object before move Product: gcc Version: 4.8.4 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: awenocur at aol dot com Target Milestone: --- Created attachment 36420 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=36420&action=edit pre-processed C++11 file exhibiting this behavior The problem occurs on line 23813 of the provided .ii file. An object initialized with specific parameters is dealloc'd once before moving, and once after moving, while the target of the move is never dealloc'd. This demo is simplified from a program I'm writing that has to assign an object with an embedded pointer. In the original, this object is destroyed twice separately, resulting in a double free on the pointer. In the demo there is no pointer member, but the undesired behavior is the same. The workaround featured in the demo is the same one that fixed the real program. This problem appears to exist on dialects of C++, at least from '03 onward, but I chose to use C++11, because move constructors can be explicitly declared. In C++03, it does the move in the same manner. compilation command: c++ -g -O0 -std=c++11 -save-temps -o test test.cpp GCC info: Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.4-2ubuntu1~14.04' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04) OS description: Ubuntu 3.13.0-48.80-generic 3.13.11-ckt16