Clang Project

clang_source_code/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-examples.cpp
1// RUN: %clang_cc1 -ast-dump %s 2>&1 | FileCheck %s
2
3// CHECK-LABEL: example0
4void 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
14struct A { };
15struct B : A { } b;
16
17// CHECK-LABEL: example1
18void 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
29extern B f();
30
31struct X {
32  operator B();
33} x;
34
35// CHECK-LABEL: example2
36void 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
52void example3() {
53  // CHECK: VarDecl{{.*}}rcd2 'const double &'
54  // CHECK: ImplicitCastExpr{{.*}} <IntegralToFloating>
55  const double& rcd2 = 2;
56}
57