1// RUN: %clang_cc1 -fsyntax-only -verify %s
2
3#define restrict __restrict__
4typedef int* ptr;
5void test1(ptr p, const ptr cp, restrict ptr rp, const restrict ptr crp,
6           volatile ptr vp, const volatile ptr cvp, restrict volatile ptr rvp,
7           const restrict volatile ptr crvp) {
8  ptr& p1 = p;
9  ptr& p2 = cp; // expected-error {{drops 'const' qualifier}}
10  ptr& p3 = rp; // expected-error {{drops 'restrict' qualifier}}
11  ptr& p4 = crp; // expected-error {{drops 'const' and 'restrict' qualifiers}}
12  ptr& p5 = vp; // expected-error {{drops 'volatile' qualifier}}
13  ptr& p6 = cvp; // expected-error {{drops 'const' and 'volatile' qualifiers}}
14  ptr& p7 = rvp; // expected-error {{drops 'restrict' and 'volatile' qualifiers}}
15  ptr& p8 = crvp; // expected-error {{drops 'const', 'restrict', and 'volatile' qualifiers}}
16
17  const ptr& cp1 = p;
18  const ptr& cp2 = cp;
19  const ptr& cp3 = rp; // expected-error {{drops 'restrict' qualifier}}
20  const ptr& cp4 = crp; // expected-error {{drops 'restrict' qualifier}}
21  const ptr& cp5 = vp; // expected-error {{drops 'volatile' qualifier}}
22  const ptr& cp6 = cvp; // expected-error {{drops 'volatile' qualifier}}
23  const ptr& cp7 = rvp; // expected-error {{drops 'restrict' and 'volatile' qualifiers}}
24  const ptr& cp8 = crvp; // expected-error {{drops 'restrict' and 'volatile' qualifiers}}
25
26  const volatile ptr& cvp1 = p;
27  const volatile ptr& cvp2 = cp;
28  const volatile ptr& cvp3 = rp; // expected-error {{drops 'restrict' qualifier}}
29  const volatile ptr& cvp4 = crp; // expected-error {{drops 'restrict' qualifier}}
30  const volatile ptr& cvp5 = vp;
31  const volatile ptr& cvp6 = cvp;
32  const volatile ptr& cvp7 = rvp; // expected-error {{drops 'restrict' qualifier}}
33  const volatile ptr& cvp8 = crvp; // expected-error {{drops 'restrict' qualifier}}
34
35  const restrict volatile ptr& crvp1 = p;
36  const restrict volatile ptr& crvp2 = cp;
37  const restrict volatile ptr& crvp3 = rp;
38  const restrict volatile ptr& crvp4 = crp;
39  const restrict volatile ptr& crvp5 = vp;
40  const restrict volatile ptr& crvp6 = cvp;
41  const restrict volatile ptr& crvp7 = rvp;
42  const restrict volatile ptr& crvp8 = crvp;
43}
44