forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			56 lines
		
	
	
		
			857 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			857 B
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin9 -O3 | FileCheck %s
 | |
| 
 | |
| namespace {
 | |
| 
 | |
| static int ctorcalls;
 | |
| static int dtorcalls;
 | |
|   
 | |
| struct A {
 | |
|   A() : i(0) { ctorcalls++; }
 | |
|   ~A() { dtorcalls++; }
 | |
|   int i;
 | |
|   
 | |
|   friend const A& operator<<(const A& a, int n) {
 | |
|     return a;
 | |
|   }
 | |
| };
 | |
| 
 | |
| void g(int) { }
 | |
| void g(const A&) { }
 | |
| 
 | |
| void f1(bool b) {
 | |
|   g(b ? A().i : 0);
 | |
|   g(b || A().i);
 | |
|   g(b && A().i);
 | |
|   g(b ? A() << 1 : A() << 2);
 | |
| }
 | |
| 
 | |
| struct Checker {
 | |
|   Checker() {
 | |
|     f1(true);
 | |
|     f1(false);
 | |
|   }
 | |
| };
 | |
| 
 | |
| Checker c;
 | |
| 
 | |
| }
 | |
| 
 | |
| // CHECK: define i32 @_Z12getCtorCallsv()
 | |
| int getCtorCalls() {
 | |
|   // CHECK: ret i32 5
 | |
|   return ctorcalls;
 | |
| }
 | |
| 
 | |
| // CHECK: define i32 @_Z12getDtorCallsv()
 | |
| int getDtorCalls() {
 | |
|   // CHECK: ret i32 5
 | |
|   return dtorcalls;
 | |
| }
 | |
| 
 | |
| // CHECK: define zeroext i1 @_Z7successv()
 | |
| bool success() {
 | |
|   // CHECK: ret i1 true
 | |
|   return ctorcalls == dtorcalls;
 | |
| }
 |