blob: d5382872f9d93d650fe6085fc0671d95fdb872f7 [file] [log] [blame]
Shih-wei Liaof8fd82b2010-02-10 11:10:31 -08001// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin9 -O3 | FileCheck %s
2
3namespace {
4
5static int ctorcalls;
6static int dtorcalls;
7
8struct A {
9 A() : i(0) { ctorcalls++; }
10 ~A() { dtorcalls++; }
11 int i;
12
13 friend const A& operator<<(const A& a, int n) {
14 return a;
15 }
16};
17
18void g(int) { }
19void g(const A&) { }
20
21void f1(bool b) {
22 g(b ? A().i : 0);
23 g(b || A().i);
24 g(b && A().i);
25 g(b ? A() << 1 : A() << 2);
26}
27
28struct Checker {
29 Checker() {
30 f1(true);
31 f1(false);
32 }
33};
34
35Checker c;
36
37}
38
39// CHECK: define i32 @_Z12getCtorCallsv()
40int getCtorCalls() {
41 // CHECK: ret i32 5
42 return ctorcalls;
43}
44
45// CHECK: define i32 @_Z12getDtorCallsv()
46int getDtorCalls() {
47 // CHECK: ret i32 5
48 return dtorcalls;
49}
50
51// CHECK: define zeroext i1 @_Z7successv()
52bool success() {
53 // CHECK: ret i1 true
54 return ctorcalls == dtorcalls;
55}