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 3 {{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 {{C-style cast from bit-field lvalue to reference type 'unsigned int &'}} |
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 | |
65 | namespace explicit_ctor { |
66 | struct A {}; |
67 | struct B { // expected-note 2{{candidate}} |
68 | explicit B(const A&); |
69 | }; |
70 | A a; |
71 | const B &b(a); // expected-error {{no viable conversion}} |
72 | } |
73 | |