1ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith// Header for PCH test cxx-for-range.cpp
2ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith
3ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smithstruct S {
4ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith  int *begin();
5ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith  int *end();
6ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith};
7ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith
8ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smithstruct T { };
9ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smithchar *begin(T);
10ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smithchar *end(T);
11ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith
12b1502bcd67fb593a95cbf73ec3814f4015666da0Richard Smithnamespace NS {
13b1502bcd67fb593a95cbf73ec3814f4015666da0Richard Smith  struct U { };
14ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith  char *begin(U);
15ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith  char *end(U);
16ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith}
17b1502bcd67fb593a95cbf73ec3814f4015666da0Richard Smithusing NS::U;
18ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith
19ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smithvoid f() {
20ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith  char a[3] = { 0, 1, 2 };
21ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith  for (auto w : a)
22ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith    for (auto x : S())
23ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith      for (auto y : T())
24ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith        for (auto z : U())
25ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith          ;
26ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith}
27ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith
28ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smithtemplate<typename A>
29ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smithvoid g() {
30ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith  A a[3] = { 0, 1, 2 };
31ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith  for (auto &v : a)
32ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith    for (auto x : S())
33ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith      for (auto y : T())
34ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith        for (auto z : U())
35ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith          ;
36ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith}
37