// RUN: %clang_cc1 -ast-dump %s 2>&1 | FileCheck %s // CHECK: example0 void example0() { double d = 2.0; // CHECK: double &rd = // CHECK-NEXT: DeclRefExpr double &rd = d; // CHECK: const double &rcd = // CHECK-NEXT: ImplicitCastExpr{{.*}}'const double' lvalue const double &rcd = d; } struct A { }; struct B : A { } b; // CHECK: example1 void example1() { // CHECK: A &ra = // CHECK: ImplicitCastExpr{{.*}}'struct A' lvalue A &ra = b; // CHECK: const A &rca = // CHECK: ImplicitCastExpr{{.*}}'const struct A' lvalue // CHECK: ImplicitCastExpr{{.*}}'struct A' lvalue const A& rca = b; } extern B f(); struct X { operator B(); } x; // CHECK: example2 void example2() { // CHECK: const A &rca = // CHECK: ImplicitCastExpr{{.*}}'const struct A' // CHECK: ImplicitCastExpr{{.*}}'struct A' // CHECK: CallExpr{{.*}}B const A &rca = f(); // CHECK: const A &r = // CHECK: ImplicitCastExpr{{.*}}'const struct A' // CHECK: ImplicitCastExpr{{.*}}'struct A' // CHECK: CXXMemberCallExpr{{.*}}'struct B' const A& r = x; } // CHECK: example3 void example3() { // CHECK: const double &rcd2 = // CHECK: ImplicitCastExpr{{.*}} const double& rcd2 = 2; }