diff options
author | Martin Sebor <msebor@redhat.com> | 2021-05-13 11:32:33 -0600 |
---|---|---|
committer | Martin Sebor <msebor@redhat.com> | 2021-05-13 11:35:03 -0600 |
commit | e554887df0934325464fd3e811022ee048328bb5 (patch) | |
tree | 14c605873c6c1fa7ebbacaba67d4aef88aef2dca /gcc | |
parent | 9feb5822b713c6a12cb290ba0406ba2362d4c09c (diff) | |
download | gcc-e554887df0934325464fd3e811022ee048328bb5.zip gcc-e554887df0934325464fd3e811022ee048328bb5.tar.gz gcc-e554887df0934325464fd3e811022ee048328bb5.tar.bz2 |
Fix compilation error in ILP32.
gcc/testsuite/ChangeLog:
* g++.dg/pr100574.C: Use size_t as operator new argument type.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/g++.dg/pr100574.C | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/pr100574.C b/gcc/testsuite/g++.dg/pr100574.C new file mode 100644 index 0000000..42ba040 --- /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 <typename> struct allocator_traits; +template <typename> class allocator {}; +template <typename _Tp> struct allocator_traits<allocator<_Tp> > +{ + using allocator_type = allocator<_Tp>; + using pointer = _Tp *; + using size_type = long; + template <typename _Up> using rebind_alloc = allocator<_Up>; + static pointer allocate(allocator_type, size_type); + template <typename _Up> static void construct(_Up __p) { new (__p) _Up(); } +}; + +struct __alloc_traits : allocator_traits<allocator<char>> { + struct rebind { + typedef rebind_alloc<char> other; + }; +}; + +struct _Vector_base { + struct : __alloc_traits::rebind::other { + } _M_impl; + long _M_allocate___n; +}; + +template <typename, typename = char> class vector : _Vector_base { + long max_size(); +public: + void push_back() { _M_realloc_insert(); } + template <typename...> void _M_realloc_insert(); +}; + +template <typename _Tp, typename _Alloc> +template <typename...> +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<char> data; +}; + +char ReadTrackChunk_status; + +void ReadTrackChunk() +{ + DataBlock block; + while (!0) + switch (ReadTrackChunk_status) + case MIDIST_PITCHBEND: + block.data.push_back(); +} |