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