From e554887df0934325464fd3e811022ee048328bb5 Mon Sep 17 00:00:00 2001 From: Martin Sebor Date: Thu, 13 May 2021 11:32:33 -0600 Subject: [PATCH] Fix compilation error in ILP32. gcc/testsuite/ChangeLog: * g++.dg/pr100574.C: Use size_t as operator new argument type. --- gcc/testsuite/g++.dg/pr100574.C | 64 +++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 gcc/testsuite/g++.dg/pr100574.C diff --git a/gcc/testsuite/g++.dg/pr100574.C b/gcc/testsuite/g++.dg/pr100574.C new file mode 100644 index 000000000000..42ba0404a28e --- /dev/null +++ b/gcc/testsuite/g++.dg/pr100574.C @@ -0,0 +1,64 @@ +/* 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; + 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(); +}