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