aboutsummaryrefslogtreecommitdiff
path: root/test/CodeGenCXX/block-rvalue-reference-capture.cpp
blob: 997e14f8518f8079f0bba1be7e166dd46a4b7dfd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// RUN: %clang_cc1 %s -std=c++11 -fblocks -triple x86_64-apple-darwin -emit-llvm -o - | FileCheck %s
// rdar://9971124

int foo(int && i)
{ 
     return ^{ return i; }();
}

int main() {
  return foo(100);
}

// CHECK: [[B:%.*]] = bitcast i8* [[BD:%.*]] to <{ {{.*}} i32 }>*
// CHECK: [[C:%.*]] = getelementptr inbounds <{ {{.*}} i32 }>* [[B]]
// CHECK: [[R:%.*]] = load i32* [[C]], align 4
// CHECK: ret i32 [[R]]

class S {
public:
  S (const S &);
  S(int);
  int field;
};

int func(S && rv)
{ 
     return ^{ return rv.field; }();
}

// CHECK: define i32 @_Z4funcO1S
// CHECK: call void @_ZN1SC1ERKS_