blob: 66fd803c2ee88300eeefc6a1558f097c6c9f4e54 [file] [log] [blame]
Anders Carlsson5bb0ddd2010-02-04 17:06:52 +00001// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin9 -O3 | FileCheck %s
Anders Carlssona36bf8f2009-11-20 17:27:56 +00002
Anders Carlsson5bb0ddd2010-02-04 17:06:52 +00003namespace {
4
Anders Carlsson4e3014b2010-02-04 17:23:15 +00005static int ctorcalls;
6static int dtorcalls;
Anders Carlsson5bb0ddd2010-02-04 17:06:52 +00007
8struct A {
Anders Carlsson4e3014b2010-02-04 17:23:15 +00009 A() : i(0) { ctorcalls++; }
10 ~A() { dtorcalls++; }
Anders Carlssona36bf8f2009-11-20 17:27:56 +000011 int i;
Anders Carlssona36bf8f2009-11-20 17:27:56 +000012};
13
Anders Carlsson5bb0ddd2010-02-04 17:06:52 +000014void g(int) { }
Anders Carlssona36bf8f2009-11-20 17:27:56 +000015
Anders Carlsson5bb0ddd2010-02-04 17:06:52 +000016void f1(bool b) {
17 g(b ? A().i : 0);
18 g(b || A().i);
19 g(b && A().i);
20}
Anders Carlssona36bf8f2009-11-20 17:27:56 +000021
Anders Carlsson5bb0ddd2010-02-04 17:06:52 +000022struct Checker {
23 Checker() {
24 f1(true);
25 f1(false);
26 }
27};
Anders Carlssona36bf8f2009-11-20 17:27:56 +000028
Anders Carlsson5bb0ddd2010-02-04 17:06:52 +000029Checker c;
Anders Carlssona36bf8f2009-11-20 17:27:56 +000030
Anders Carlsson5bb0ddd2010-02-04 17:06:52 +000031}
32
Anders Carlsson4e3014b2010-02-04 17:23:15 +000033// CHECK: define i32 @_Z12getCtorCallsv()
34int getCtorCalls() {
35 // CHECK: ret i32 3
36 return ctorcalls;
37}
38
39// CHECK: define i32 @_Z12getDtorCallsv()
40int getDtorCalls() {
41 // CHECK: ret i32 3
42 return dtorcalls;
43}
44
45// CHECK: define zeroext i1 @_Z7successv()
46bool success() {
47 // CHECK: ret i1 true
48 return ctorcalls == dtorcalls;
Anders Carlssona36bf8f2009-11-20 17:27:56 +000049}