xref: /llvm-project/clang/test/Parser/cxx-reference.cpp (revision 85dec55989d42c659708467623c360e59078b121)
18fbe78f6SDaniel Dunbar // RUN: %clang_cc1 -fsyntax-only -verify %s
2*85dec559SCharles Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s
3*85dec559SCharles Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
4cbf4709cSBill Wendling 
56811c0b5SBill Wendling extern char *bork;
66811c0b5SBill Wendling char *& bar = bork;
76811c0b5SBill Wendling 
88e1cf608SDouglas Gregor int val;
98e1cf608SDouglas Gregor 
foo(int & a)106811c0b5SBill Wendling void foo(int &a) {
116811c0b5SBill Wendling }
12cbf4709cSBill Wendling 
13cbf4709cSBill Wendling typedef int & A;
14cbf4709cSBill Wendling 
g(const A aref)1540259443SRichard Smith void g(const A aref) { // expected-warning {{'const' qualifier on reference type 'A' (aka 'int &') has no effect}}
16cbf4709cSBill Wendling }
17cbf4709cSBill Wendling 
188e1cf608SDouglas Gregor int & const X = val; // expected-error {{'const' qualifier may not be applied to a reference}}
198e1cf608SDouglas Gregor int & volatile Y = val; // expected-error {{'volatile' qualifier may not be applied to a reference}}
208e1cf608SDouglas Gregor int & const volatile Z = val; /* expected-error {{'const' qualifier may not be applied}} \
21eb2def66SBill Wendling                            expected-error {{'volatile' qualifier may not be applied}} */
223b27be6cSSebastian Redl 
23*85dec559SCharles Li typedef int && RV;
24*85dec559SCharles Li #if __cplusplus <= 199711L
25*85dec559SCharles Li // expected-warning@-2 {{rvalue references are a C++11 extension}}
26*85dec559SCharles Li #endif
27