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