https://gcc.gnu.org/bugzilla/show_bug.cgi?id=19808
--- Comment #53 from David Binderman <dcb314 at hotmail dot com> --- I am not sure if this belongs here or in a separate bug report, but given this code: class AllocatorWithCleanup { public: int *allocate(int, void *); }; class SecBlock { SecBlock() : m_ptr(m_alloc.allocate(0, nullptr)) {} AllocatorWithCleanup m_alloc; int *m_ptr; }; Recent clang-14 thinks it is ok and new gcc trunk thinks it isn't. $ /home/dcb/llvm/results/bin/clang++ -c -O2 -Wall bug774.cc $ /home/dcb/llvm/results/bin/clang++ -v clang version 14.0.0 (https://github.com/llvm/llvm-project.git f95bd18b5faa6a5af4b5786312c373c5b2dce687) $ /home/dcb/gcc/results/bin/gcc -c -O2 -Wall bug774.cc bug774.cc: In constructor ‘SecBlock::SecBlock()’: bug774.cc:6:22: warning: member ‘SecBlock::m_alloc’ is used uninitialized [-Wuninitialized] 6 | SecBlock() : m_ptr(m_alloc.allocate(0, nullptr)) {} | ^~~~~~~ $ /home/dcb/gcc/results/bin/gcc -v gcc version 12.0.0 20211119 (experimental) (0e510ab53414430e) $