15bb0ddd10b07ecc0df43f0d5f50f0b9f10046426Anders Carlsson// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin9 -O3 | FileCheck %s 2a36bf8f74180e834c6bf2db867796fd5338495abAnders Carlsson 35bb0ddd10b07ecc0df43f0d5f50f0b9f10046426Anders Carlssonnamespace { 45bb0ddd10b07ecc0df43f0d5f50f0b9f10046426Anders Carlsson 54e3014be0606d6be5554d76f317d5908be3bccfcAnders Carlssonstatic int ctorcalls; 64e3014be0606d6be5554d76f317d5908be3bccfcAnders Carlssonstatic int dtorcalls; 75bb0ddd10b07ecc0df43f0d5f50f0b9f10046426Anders Carlsson 85bb0ddd10b07ecc0df43f0d5f50f0b9f10046426Anders Carlssonstruct A { 94e3014be0606d6be5554d76f317d5908be3bccfcAnders Carlsson A() : i(0) { ctorcalls++; } 104e3014be0606d6be5554d76f317d5908be3bccfcAnders Carlsson ~A() { dtorcalls++; } 11a36bf8f74180e834c6bf2db867796fd5338495abAnders Carlsson int i; 12c1b32f69687ed289fb1150df34965ada250caf70Anders Carlsson 13c1b32f69687ed289fb1150df34965ada250caf70Anders Carlsson friend const A& operator<<(const A& a, int n) { 14c1b32f69687ed289fb1150df34965ada250caf70Anders Carlsson return a; 15c1b32f69687ed289fb1150df34965ada250caf70Anders Carlsson } 16a36bf8f74180e834c6bf2db867796fd5338495abAnders Carlsson}; 17a36bf8f74180e834c6bf2db867796fd5338495abAnders Carlsson 185bb0ddd10b07ecc0df43f0d5f50f0b9f10046426Anders Carlssonvoid g(int) { } 19c1b32f69687ed289fb1150df34965ada250caf70Anders Carlssonvoid g(const A&) { } 20a36bf8f74180e834c6bf2db867796fd5338495abAnders Carlsson 215bb0ddd10b07ecc0df43f0d5f50f0b9f10046426Anders Carlssonvoid f1(bool b) { 225bb0ddd10b07ecc0df43f0d5f50f0b9f10046426Anders Carlsson g(b ? A().i : 0); 235bb0ddd10b07ecc0df43f0d5f50f0b9f10046426Anders Carlsson g(b || A().i); 245bb0ddd10b07ecc0df43f0d5f50f0b9f10046426Anders Carlsson g(b && A().i); 25c1b32f69687ed289fb1150df34965ada250caf70Anders Carlsson g(b ? A() << 1 : A() << 2); 265bb0ddd10b07ecc0df43f0d5f50f0b9f10046426Anders Carlsson} 27a36bf8f74180e834c6bf2db867796fd5338495abAnders Carlsson 285bb0ddd10b07ecc0df43f0d5f50f0b9f10046426Anders Carlssonstruct Checker { 295bb0ddd10b07ecc0df43f0d5f50f0b9f10046426Anders Carlsson Checker() { 305bb0ddd10b07ecc0df43f0d5f50f0b9f10046426Anders Carlsson f1(true); 315bb0ddd10b07ecc0df43f0d5f50f0b9f10046426Anders Carlsson f1(false); 325bb0ddd10b07ecc0df43f0d5f50f0b9f10046426Anders Carlsson } 335bb0ddd10b07ecc0df43f0d5f50f0b9f10046426Anders Carlsson}; 34a36bf8f74180e834c6bf2db867796fd5338495abAnders Carlsson 355bb0ddd10b07ecc0df43f0d5f50f0b9f10046426Anders CarlssonChecker c; 365bb0ddd10b07ecc0df43f0d5f50f0b9f10046426Anders Carlsson 375bb0ddd10b07ecc0df43f0d5f50f0b9f10046426Anders Carlsson} 38a36bf8f74180e834c6bf2db867796fd5338495abAnders Carlsson 3993ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define i32 @_Z12getCtorCallsv() 404e3014be0606d6be5554d76f317d5908be3bccfcAnders Carlssonint getCtorCalls() { 418ffc80fe5413bcb9f350ae4d1c2d7617af970c8eAnders Carlsson // CHECK: ret i32 5 424e3014be0606d6be5554d76f317d5908be3bccfcAnders Carlsson return ctorcalls; 434e3014be0606d6be5554d76f317d5908be3bccfcAnders Carlsson} 444e3014be0606d6be5554d76f317d5908be3bccfcAnders Carlsson 4593ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define i32 @_Z12getDtorCallsv() 464e3014be0606d6be5554d76f317d5908be3bccfcAnders Carlssonint getDtorCalls() { 478ffc80fe5413bcb9f350ae4d1c2d7617af970c8eAnders Carlsson // CHECK: ret i32 5 484e3014be0606d6be5554d76f317d5908be3bccfcAnders Carlsson return dtorcalls; 494e3014be0606d6be5554d76f317d5908be3bccfcAnders Carlsson} 504e3014be0606d6be5554d76f317d5908be3bccfcAnders Carlsson 5193ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define zeroext i1 @_Z7successv() 524e3014be0606d6be5554d76f317d5908be3bccfcAnders Carlssonbool success() { 534e3014be0606d6be5554d76f317d5908be3bccfcAnders Carlsson // CHECK: ret i1 true 544e3014be0606d6be5554d76f317d5908be3bccfcAnders Carlsson return ctorcalls == dtorcalls; 55a36bf8f74180e834c6bf2db867796fd5338495abAnders Carlsson} 56