1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s
25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerextern char *bork;
45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerchar *& bar = bork;
55f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
627c8dc06f65d7abcf6a7e7f64a7960c9a150ca01Douglas Gregorint val;
727c8dc06f65d7abcf6a7e7f64a7960c9a150ca01Douglas Gregor
85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencervoid foo(int &a) {
95f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}
105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencertypedef int & A;
125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid g(const A aref) { // expected-warning {{'const' qualifier on reference type 'A' (aka 'int &') has no effect}}
145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}
155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
1627c8dc06f65d7abcf6a7e7f64a7960c9a150ca01Douglas Gregorint & const X = val; // expected-error {{'const' qualifier may not be applied to a reference}}
1727c8dc06f65d7abcf6a7e7f64a7960c9a150ca01Douglas Gregorint & volatile Y = val; // expected-error {{'volatile' qualifier may not be applied to a reference}}
1827c8dc06f65d7abcf6a7e7f64a7960c9a150ca01Douglas Gregorint & const volatile Z = val; /* expected-error {{'const' qualifier may not be applied}} \
195f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer                           expected-error {{'volatile' qualifier may not be applied}} */
20743de1f671ee0ef213c7404cfdc85579dd12c56eSebastian Redl
21b3df1386680b3830d2f4d300d4d7eaba134135fcDouglas Gregortypedef int && RV; // expected-warning {{rvalue references are a C++11 extension}}
22