p5-examples.cpp revision 0c42bb653dc40b1caae010618831e320af824b18
1// RUN: %clang_cc1 -ast-dump %s 2>&1 | FileCheck %s
2
3// CHECK: example0
4void example0() {
5  double d = 2.0;
6  // CHECK: double &rd =
7  // CHECK-NEXT: DeclRefExpr
8  double &rd = d;
9  // CHECK: const double &rcd =
10  // CHECK-NEXT: ImplicitCastExpr{{.*}}'const double' <NoOp>
11  const double &rcd = d;
12}
13
14struct A { };
15struct B : A { } b;
16
17// CHECK: example1
18void example1() {
19  // CHECK: A &ra =
20  // CHECK: ImplicitCastExpr{{.*}}'struct A' <DerivedToBase (A)> lvalue
21  A &ra = b;
22  // CHECK: const A &rca =
23  // CHECK: ImplicitCastExpr{{.*}}'const struct A' <NoOp>
24  // CHECK: ImplicitCastExpr{{.*}}'struct A' <DerivedToBase (A)>
25  const A& rca = b;
26}
27
28extern B f();
29
30struct X {
31  operator B();
32} x;
33
34// CHECK: example2
35void example2() {
36  // CHECK: const A &rca =
37  // CHECK: ImplicitCastExpr{{.*}}'const struct A' <NoOp>
38  // CHECK: ImplicitCastExpr{{.*}}'struct A' <DerivedToBase (A)>
39  // CHECK: CallExpr{{.*}}B
40  const A &rca = f();
41  // CHECK: const A &r =
42  // CHECK: ImplicitCastExpr{{.*}}'const struct A' <NoOp>
43  // CHECK: ImplicitCastExpr{{.*}}'struct A' <DerivedToBase (A)>
44  // CHECK: CXXMemberCallExpr{{.*}}'struct B'
45  const A& r = x;
46}
47
48// CHECK: example3
49void example3() {
50  // CHECK: const double &rcd2 =
51  // CHECK: ImplicitCastExpr{{.*}}<IntegralToFloating>
52  const double& rcd2 = 2;
53}
54