aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/pr100574.C
blob: 0df62aa70ad28423b3baa3e9bbc2cefaa8553129 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/* 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;
  /* __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<char> data;
};

char ReadTrackChunk_status;

void ReadTrackChunk()
{
  DataBlock block;
  while (!0)
    switch (ReadTrackChunk_status)
    case MIDIST_PITCHBEND:
      block.data.push_back();
}

// { dg-prune-output "warning" }