// begin main.cpp struct A { virtual void do1() { } }; struct B { A* m_a; B() : m_a(nullptr) {} B(A* a) : m_a(a) {} ~B() { if (m_a) m_a->do1(); } void do2(B& other) { A* tmp = m_a; m_a = other.m_a; other.m_a = tmp; } B& operator=(A* a) { B(a).do2(*this); return *this; } }; int main() { int ar[] = { 0, 1 }; for (int i = 0; i < 2; ++i) { int j = ar[i]; B b; b = nullptr; } return 0; } // end main.cpp $ g++ -S -std=c++11 -O2 -fnon-call-exceptions main.cpp main.cpp: In function ‘int main()’: main.cpp:25:5: internal compiler error: Segmentation fault int main() ^~~~ Please submit a full bug report, with preprocessed source if appropriate. See <file:///usr/share/doc/gcc-6/README.Bugs> for instructions $ g++ --version gcc (Debian 6.3.0-18) 6.3.0 20170516 Copyright (C) 2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ uname -a Linux machine 4.9.0-3-amd64 #1 SMP Debian 4.9.30-2+deb9u2 (2017-06-26) x86_64 GNU/Linux
How to avoid this bug?
(In reply to Ubikovich from comment #1) > How to avoid this bug? Compiling this code with optimization -O1 helps to avoid the problem.
This has been fixed in GCC 6.4.