https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79345
--- Comment #1 from Pedro Alves <palves at redhat dot com> --- Note, if we add a use of gdb_disassembler::m_stream somewhere, like: gdb_disassembler_test () : gdb_disassembler (verbose == 123 ? &stream_v : &stream_q) // bug here { if (m_stream != &stream_v) abort (); } then g++ 7 warns at -O2: $ /opt/gcc/bin/g++ -std=gnu++11 -O2 -Wall -Wextra -Wuninitialized gcc-bug.cc -o gcc-bug gcc-bug.cc: In function ‘int main()’: gcc-bug.cc:19:63: warning: ‘di.gdb_disassembler_test::verbose’ is used uninitialized in this function [-Wuninitialized] : gdb_disassembler (verbose == 123 ? &stream_v : &stream_q) // bug here ^ gcc-bug.cc:29:25: note: ‘di.gdb_disassembler_test::verbose’ was declared here gdb_disassembler_test di; ^~ Unfortunately, the compilation unit that has this but in gdb doesn't have any use like that, so the bug went unnoticed. To reiterate, I think the frontend _should_ be able to warn even without seeing the use of m_stream. I.e., I don't think this bug is the same category as the other truckload of bugs about missing -Winitialized opportunities at -O0 related to not running some parts of the optimization pipeline.