c++: robustify testcase [PR109752]
[official-gcc.git] / gcc / testsuite / g++.dg / pr100574.C
blob0df62aa70ad28423b3baa3e9bbc2cefaa8553129
1 /* PR middle-end/100574 - ICE: in size_remaining, at builtins.c:413 with
2    -O3 -ftracer -fno-tree-dominator-opts -fno-tree-fre
3    { dg-do compile { target c++11 } }
4    { dg-options "-O3 -ftracer -fno-tree-dominator-opts -fno-tree-fre" } */
6 void *operator new (__SIZE_TYPE__, void *__p) { return __p; }
8 template <typename> struct allocator_traits;
9 template <typename> class allocator {};
10 template <typename _Tp> struct allocator_traits<allocator<_Tp> >
12   using allocator_type = allocator<_Tp>;
13   using pointer = _Tp *;
14   using size_type = long;
15   template <typename _Up> using rebind_alloc = allocator<_Up>;
16   static pointer allocate(allocator_type, size_type);
17   template <typename _Up> static void construct(_Up __p) { new (__p) _Up(); }
20 struct __alloc_traits : allocator_traits<allocator<char>> {
21   struct rebind {
22     typedef rebind_alloc<char> other;
23   };
26 struct _Vector_base {
27   struct : __alloc_traits::rebind::other {
28   } _M_impl;
29   long _M_allocate___n;
32 template <typename, typename = char> class vector : _Vector_base {
33   long max_size();
34 public:
35   void push_back() { _M_realloc_insert(); }
36   template <typename...> void _M_realloc_insert();
39 template <typename _Tp, typename _Alloc>
40 template <typename...>
41 void vector<_Tp, _Alloc>::_M_realloc_insert() {
42   __alloc_traits::pointer __trans_tmp_5;
43   /* __len is used uninitialized below, which might trigger warnings,
44      even without -Wall (and other than -Wuninitialized).  */
45   long __len(__len || max_size()), __elems_before;
46   __trans_tmp_5 = _M_allocate___n
47     ? __alloc_traits::allocate(_M_impl, _M_allocate___n)
48     : __alloc_traits::pointer();
49   __alloc_traits::construct(__trans_tmp_5 + __elems_before);
52 enum { MIDIST_PITCHBEND };
53 struct DataBlock {
54   vector<char> data;
57 char ReadTrackChunk_status;
59 void ReadTrackChunk()
61   DataBlock block;
62   while (!0)
63     switch (ReadTrackChunk_status)
64     case MIDIST_PITCHBEND:
65       block.data.push_back();
68 // { dg-prune-output "warning" }