1 | // RUN: %clang_cc1 -ast-dump %s 2>&1 | FileCheck %s
|
2 |
|
3 | // CHECK-LABEL: 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-LABEL: example1
|
18 | void example1() {
|
19 | // CHECK: VarDecl{{.*}}ra 'A &'
|
20 | // CHECK: ImplicitCastExpr{{.*}}'A' lvalue <DerivedToBase (A)>
|
21 | A &ra = b;
|
22 | // CHECK: VarDecl{{.*}}rca 'const A &'
|
23 | // CHECK: ImplicitCastExpr{{.*}}'const A' lvalue <DerivedToBase (A)>
|
24 | // CHECK-NOT: MaterializeTemporaryExpr
|
25 | // CHECK: ImplicitCastExpr{{.*}}'const B' lvalue <NoOp>
|
26 | const A& rca = b;
|
27 | }
|
28 |
|
29 | extern B f();
|
30 |
|
31 | struct X {
|
32 | operator B();
|
33 | } x;
|
34 |
|
35 | // CHECK-LABEL: example2
|
36 | void example2() {
|
37 | // CHECK: VarDecl{{.*}}rca 'const A &'
|
38 | // CHECK: ImplicitCastExpr{{.*}}'const A' lvalue <DerivedToBase (A)>
|
39 | // CHECK: MaterializeTemporaryExpr{{.*}}'const B'
|
40 | // CHECK: ImplicitCastExpr{{.*}}'const B' <NoOp>
|
41 | // CHECK: CallExpr{{.*}}B
|
42 | const A &rca = f();
|
43 | // CHECK: VarDecl{{.*}}r 'const A &'
|
44 | // CHECK: ImplicitCastExpr{{.*}}'const A' lvalue <DerivedToBase (A)>
|
45 | // CHECK: MaterializeTemporaryExpr{{.*}}'const B'
|
46 | // CHECK: ImplicitCastExpr{{.*}}'const B' <NoOp>
|
47 | // CHECK: CXXMemberCallExpr{{.*}}'B'
|
48 | const A& r = x;
|
49 | }
|
50 |
|
51 | // CHECK-LABEL: example3
|
52 | void example3() {
|
53 | // CHECK: VarDecl{{.*}}rcd2 'const double &'
|
54 | // CHECK: ImplicitCastExpr{{.*}} <IntegralToFloating>
|
55 | const double& rcd2 = 2;
|
56 | }
|
57 | |