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 Wendlingvoid foo(int &a) { 116811c0b5SBill Wendling } 12cbf4709cSBill Wendling 13cbf4709cSBill Wendling typedef int & A; 14cbf4709cSBill Wendling g(const A aref)1540259443SRichard Smithvoid 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