1 // RUN: %clang_cc1 -ast-dump %s 2>&1 | FileCheck %s
2
3 // CHECK: example0
example0()4 void example0() {
5 double d = 2.0;
6 // CHECK: VarDecl{{.*}}rd 'double &'
7 // CHECK-NEXT: DeclRefExpr
8 double &rd = d;
9 // CHECK: VarDecl{{.*}}rcd 'const double &'
10 // CHECK-NEXT: ImplicitCastExpr{{.*}}'const double' lvalue <NoOp>
11 const double &rcd = d;
12 }
13
14 struct A { };
15 struct B : A { } b;
16
17 // CHECK: example1
example1()18 void example1() {
19 // CHECK: VarDecl{{.*}}ra 'struct A &'
20 // CHECK: ImplicitCastExpr{{.*}}'struct A' lvalue <DerivedToBase (A)>
21 A &ra = b;
22 // CHECK: VarDecl{{.*}}rca 'const struct A &'
23 // CHECK: ImplicitCastExpr{{.*}}'const struct A' lvalue <NoOp>
24 // CHECK: ImplicitCastExpr{{.*}}'struct A' lvalue <DerivedToBase (A)>
25 const A& rca = b;
26 }
27
28 extern B f();
29
30 struct X {
31 operator B();
32 } x;
33
34 // CHECK: example2
example2()35 void example2() {
36 // CHECK: VarDecl{{.*}}rca 'const struct A &'
37 // CHECK: ImplicitCastExpr{{.*}}'const struct A' <NoOp>
38 // CHECK: ImplicitCastExpr{{.*}}'struct A' <DerivedToBase (A)>
39 // CHECK: CallExpr{{.*}}B
40 const A &rca = f();
41 // CHECK: VarDecl{{.*}}r 'const struct A &'
42 // CHECK: ImplicitCastExpr{{.*}}'const struct A' <NoOp>
43 // CHECK: ImplicitCastExpr{{.*}}'struct A' <DerivedToBase (A)>
44 // CHECK: CXXMemberCallExpr{{.*}}'struct B'
45 const A& r = x;
46 }
47
48 // CHECK: example3
example3()49 void example3() {
50 // CHECK: VarDecl{{.*}}rcd2 'const double &'
51 // CHECK: ImplicitCastExpr{{.*}} <IntegralToFloating>
52 const double& rcd2 = 2;
53 }
54