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