/* PR middle-end/100574 - ICE: in size_remaining, at builtins.c:413 with -O3 -ftracer -fno-tree-dominator-opts -fno-tree-fre { dg-do compile { target c++11 } } { dg-options "-O3 -ftracer -fno-tree-dominator-opts -fno-tree-fre" } */ void *operator new (__SIZE_TYPE__, void *__p) { return __p; } template struct allocator_traits; template class allocator {}; template struct allocator_traits > { using allocator_type = allocator<_Tp>; using pointer = _Tp *; using size_type = long; template using rebind_alloc = allocator<_Up>; static pointer allocate(allocator_type, size_type); template static void construct(_Up __p) { new (__p) _Up(); } }; struct __alloc_traits : allocator_traits> { struct rebind { typedef rebind_alloc other; }; }; struct _Vector_base { struct : __alloc_traits::rebind::other { } _M_impl; long _M_allocate___n; }; template class vector : _Vector_base { long max_size(); public: void push_back() { _M_realloc_insert(); } template void _M_realloc_insert(); }; template template void vector<_Tp, _Alloc>::_M_realloc_insert() { __alloc_traits::pointer __trans_tmp_5; /* __len is used uninitialized below, which might trigger warnings, even without -Wall (and other than -Wuninitialized). */ long __len(__len || max_size()), __elems_before; __trans_tmp_5 = _M_allocate___n ? __alloc_traits::allocate(_M_impl, _M_allocate___n) : __alloc_traits::pointer(); __alloc_traits::construct(__trans_tmp_5 + __elems_before); } enum { MIDIST_PITCHBEND }; struct DataBlock { vector data; }; char ReadTrackChunk_status; void ReadTrackChunk() { DataBlock block; while (!0) switch (ReadTrackChunk_status) case MIDIST_PITCHBEND: block.data.push_back(); } // { dg-prune-output "warning" }