blob: a3cc2fef1e8fda42ab7694d252f50521cfa80f75 [file] [log] [blame]
Anders Carlsson674cf892010-02-04 17:06:52 +00001// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin9 -O3 | FileCheck %s
Anders Carlsson0a66c262009-11-20 17:27:56 +00002
Anders Carlsson674cf892010-02-04 17:06:52 +00003namespace {
4
Anders Carlssone5dfc262010-02-04 17:23:15 +00005static int ctorcalls;
6static int dtorcalls;
Anders Carlsson674cf892010-02-04 17:06:52 +00007
8struct A {
Anders Carlssone5dfc262010-02-04 17:23:15 +00009 A() : i(0) { ctorcalls++; }
10 ~A() { dtorcalls++; }
Anders Carlsson0a66c262009-11-20 17:27:56 +000011 int i;
Anders Carlsson9b942c62010-02-04 17:26:01 +000012
13 friend const A& operator<<(const A& a, int n) {
14 return a;
15 }
Anders Carlsson0a66c262009-11-20 17:27:56 +000016};
17
Anders Carlsson674cf892010-02-04 17:06:52 +000018void g(int) { }
Anders Carlsson9b942c62010-02-04 17:26:01 +000019void g(const A&) { }
Anders Carlsson0a66c262009-11-20 17:27:56 +000020
Anders Carlsson674cf892010-02-04 17:06:52 +000021void f1(bool b) {
22 g(b ? A().i : 0);
23 g(b || A().i);
24 g(b && A().i);
Anders Carlsson9b942c62010-02-04 17:26:01 +000025 g(b ? A() << 1 : A() << 2);
Anders Carlsson674cf892010-02-04 17:06:52 +000026}
Anders Carlsson0a66c262009-11-20 17:27:56 +000027
Anders Carlsson674cf892010-02-04 17:06:52 +000028struct Checker {
29 Checker() {
30 f1(true);
31 f1(false);
32 }
33};
Anders Carlsson0a66c262009-11-20 17:27:56 +000034
Anders Carlsson674cf892010-02-04 17:06:52 +000035Checker c;
Anders Carlsson0a66c262009-11-20 17:27:56 +000036
Anders Carlsson674cf892010-02-04 17:06:52 +000037}
38
Stephen Lin43622612013-08-15 06:47:53 +000039// CHECK-LABEL: define i32 @_Z12getCtorCallsv()
Anders Carlssone5dfc262010-02-04 17:23:15 +000040int getCtorCalls() {
Anders Carlsson3460aa12010-02-04 17:29:32 +000041 // CHECK: ret i32 5
Anders Carlssone5dfc262010-02-04 17:23:15 +000042 return ctorcalls;
43}
44
Stephen Lin43622612013-08-15 06:47:53 +000045// CHECK-LABEL: define i32 @_Z12getDtorCallsv()
Anders Carlssone5dfc262010-02-04 17:23:15 +000046int getDtorCalls() {
Anders Carlsson3460aa12010-02-04 17:29:32 +000047 // CHECK: ret i32 5
Anders Carlssone5dfc262010-02-04 17:23:15 +000048 return dtorcalls;
49}
50
Stephen Lin43622612013-08-15 06:47:53 +000051// CHECK-LABEL: define zeroext i1 @_Z7successv()
Anders Carlssone5dfc262010-02-04 17:23:15 +000052bool success() {
53 // CHECK: ret i1 true
54 return ctorcalls == dtorcalls;
Anders Carlsson0a66c262009-11-20 17:27:56 +000055}