57 lines · cpp
1// RUN: %clang_cc1 -ast-dump %s 2>&1 | FileCheck %s2 3// CHECK-LABEL: example04void example0() {5 double d = 2.0;6 // CHECK: VarDecl{{.*}}rd 'double &'7 // CHECK-NEXT: DeclRefExpr8 double &rd = d;9 // CHECK: VarDecl{{.*}}rcd 'const double &'10 // CHECK-NEXT: ImplicitCastExpr{{.*}}'const double' lvalue <NoOp>11 const double &rcd = d;12}13 14struct A { };15struct B : A { } b;16 17// CHECK-LABEL: example118void 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: MaterializeTemporaryExpr25 // CHECK: ImplicitCastExpr{{.*}}'const struct B' lvalue <NoOp>26 const A& rca = b;27}28 29extern B f();30 31struct X {32 operator B();33} x;34 35// CHECK-LABEL: example236void 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{{.*}}B42 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: example352void example3() {53 // CHECK: VarDecl{{.*}}rcd2 'const double &'54 // CHECK: ImplicitCastExpr{{.*}} <IntegralToFloating>55 const double& rcd2 = 2;56}57