1*67e74705SXin Li // RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin9 -O3 | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li namespace { 4*67e74705SXin Li 5*67e74705SXin Li static int ctorcalls; 6*67e74705SXin Li static int dtorcalls; 7*67e74705SXin Li 8*67e74705SXin Li struct A { A__anon15460c3e0111::A9*67e74705SXin Li A() : i(0) { ctorcalls++; } ~A__anon15460c3e0111::A10*67e74705SXin Li ~A() { dtorcalls++; } 11*67e74705SXin Li int i; 12*67e74705SXin Li operator <<(const A & a,int n)13*67e74705SXin Li friend const A& operator<<(const A& a, int n) { 14*67e74705SXin Li return a; 15*67e74705SXin Li } 16*67e74705SXin Li }; 17*67e74705SXin Li g(int)18*67e74705SXin Livoid g(int) { } g(const A &)19*67e74705SXin Livoid g(const A&) { } 20*67e74705SXin Li f1(bool b)21*67e74705SXin Livoid f1(bool b) { 22*67e74705SXin Li g(b ? A().i : 0); 23*67e74705SXin Li g(b || A().i); 24*67e74705SXin Li g(b && A().i); 25*67e74705SXin Li g(b ? A() << 1 : A() << 2); 26*67e74705SXin Li } 27*67e74705SXin Li 28*67e74705SXin Li struct Checker { Checker__anon15460c3e0111::Checker29*67e74705SXin Li Checker() { 30*67e74705SXin Li f1(true); 31*67e74705SXin Li f1(false); 32*67e74705SXin Li } 33*67e74705SXin Li }; 34*67e74705SXin Li 35*67e74705SXin Li Checker c; 36*67e74705SXin Li 37*67e74705SXin Li } 38*67e74705SXin Li 39*67e74705SXin Li // CHECK-LABEL: define i32 @_Z12getCtorCallsv() getCtorCalls()40*67e74705SXin Liint getCtorCalls() { 41*67e74705SXin Li // CHECK: ret i32 5 42*67e74705SXin Li return ctorcalls; 43*67e74705SXin Li } 44*67e74705SXin Li 45*67e74705SXin Li // CHECK-LABEL: define i32 @_Z12getDtorCallsv() getDtorCalls()46*67e74705SXin Liint getDtorCalls() { 47*67e74705SXin Li // CHECK: ret i32 5 48*67e74705SXin Li return dtorcalls; 49*67e74705SXin Li } 50*67e74705SXin Li 51*67e74705SXin Li // CHECK-LABEL: define zeroext i1 @_Z7successv() success()52*67e74705SXin Libool success() { 53*67e74705SXin Li // CHECK: ret i1 true 54*67e74705SXin Li return ctorcalls == dtorcalls; 55*67e74705SXin Li } 56