condition.cpp revision 01234bbc1cb94946df8046ad95e17537082b4f71
1// RUN: clang-cc -triple x86_64-apple-darwin10 -emit-llvm -o - %s | FileCheck %s 2void *f(); 3 4template <typename T> T* g() { 5 if (T* t = f()) 6 return t; 7 8 return 0; 9} 10 11void h() { 12 void *a = g<void>(); 13} 14 15struct X { 16 X(); 17 ~X(); 18 operator bool(); 19}; 20 21struct Y { 22 Y(); 23 ~Y(); 24}; 25 26void if_destruct(int z) { 27 // Verify that the condition variable is destroyed at the end of the 28 // "if" statement. 29 // CHECK: call void @_ZN1XC1Ev 30 // CHECK: call zeroext i1 @_ZN1XcvbEv 31 if (X x = X()) { 32 // CHECK: store i32 18 33 z = 18; 34 } 35 // CHECK: call void @_ZN1XD1Ev 36 // CHECK: store i32 17 37 z = 17; 38 39 // CHECK: call void @_ZN1XC1Ev 40 if (X x = X()) 41 Y y; 42 // CHECK: if.then 43 // CHECK: call void @_ZN1YC1Ev 44 // CHECK: call void @_ZN1YD1Ev 45 // CHECK: if.end 46 // CHECK: call void @_ZN1XD1Ev 47} 48