]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGenCXX/conditional-temporaries.cpp
Vendor import of clang release_34 branch r197841 (effectively, 3.4 RC3):
[FreeBSD/FreeBSD.git] / test / CodeGenCXX / conditional-temporaries.cpp
1 // RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin9 -O3 | FileCheck %s
2
3 namespace {
4
5 static int ctorcalls;
6 static int dtorcalls;
7   
8 struct 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
18 void g(int) { }
19 void g(const A&) { }
20
21 void 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
28 struct Checker {
29   Checker() {
30     f1(true);
31     f1(false);
32   }
33 };
34
35 Checker c;
36
37 }
38
39 // CHECK-LABEL: define i32 @_Z12getCtorCallsv()
40 int getCtorCalls() {
41   // CHECK: ret i32 5
42   return ctorcalls;
43 }
44
45 // CHECK-LABEL: define i32 @_Z12getDtorCallsv()
46 int getDtorCalls() {
47   // CHECK: ret i32 5
48   return dtorcalls;
49 }
50
51 // CHECK-LABEL: define zeroext i1 @_Z7successv()
52 bool success() {
53   // CHECK: ret i1 true
54   return ctorcalls == dtorcalls;
55 }