Home | History | Annotate | Download | only in dcl.init.ref
      1 // RUN: %clang_cc1 -fsyntax-only -verify %s
      2 
      3 namespace 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 
     14 namespace 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 
     26 namespace 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 
     42 namespace 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