1// RUN: %clang_cc1 -fsyntax-only -verify %s
2
3namespace PR5909 {
4  struct Foo {
5    int x : 20;
6  };
7
8  bool Test(const int& foo);
9
10  const Foo f = { 0 };  // It compiles without the 'const'.
11  bool z = Test(f.x);
12}
13
14namespace PR6264 {
15  typedef int (&T)[3];
16  struct S
17  {
18    operator T ();
19  };
20  void f()
21  {
22    T bar = S();
23  }
24}
25
26namespace PR6066 {
27  struct B { };
28  struct A : B {
29    operator B*();
30    operator B&(); // expected-warning{{conversion function converting 'PR6066::A' to its base class 'PR6066::B' will never be used}}
31  };
32
33  void f(B&); // no rvalues accepted
34  void f(B*);
35
36  int g() {
37    f(A()); // calls f(B*)
38    return 0;
39  }
40}
41
42namespace test3 {
43  struct A {
44    unsigned bitX : 4; // expected-note 4 {{bit-field is declared here}}
45    unsigned bitY : 4; // expected-note {{bit-field is declared here}}
46    unsigned var;
47
48    void foo();
49  };
50
51  void test(A *a) {
52    unsigned &t0 = a->bitX; // expected-error {{non-const reference cannot bind to bit-field 'bitX'}}
53    unsigned &t1 = (unsigned&) a->bitX; // expected-error {{non-const reference cannot bind to bit-field 'bitX'}}
54    unsigned &t2 = const_cast<unsigned&>(a->bitX); // expected-error {{const_cast from bit-field lvalue to reference type 'unsigned int &'}}
55    unsigned &t3 = (a->foo(), a->bitX); // expected-error {{non-const reference cannot bind to bit-field 'bitX'}}
56    unsigned &t4 = (a->var ? a->bitX : a->bitY); // expected-error {{non-const reference cannot bind to bit-field}}
57    unsigned &t5 = (a->var ? a->bitX : a->bitX); // expected-error {{non-const reference cannot bind to bit-field}}
58    unsigned &t6 = (a->var ? a->bitX : a->var); // expected-error {{non-const reference cannot bind to bit-field}}
59    unsigned &t7 = (a->var ? a->var : a->bitY); // expected-error {{non-const reference cannot bind to bit-field}}
60    unsigned &t8 = (a->bitX = 3); // expected-error {{non-const reference cannot bind to bit-field 'bitX'}}
61    unsigned &t9 = (a->bitY += 3); // expected-error {{non-const reference cannot bind to bit-field 'bitY'}}
62  }
63}
64