Anders Carlsson | 5bb0ddd | 2010-02-04 17:06:52 +0000 | [diff] [blame^] | 1 | // RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin9 -O3 | FileCheck %s |
Anders Carlsson | a36bf8f | 2009-11-20 17:27:56 +0000 | [diff] [blame] | 2 | |
Anders Carlsson | 5bb0ddd | 2010-02-04 17:06:52 +0000 | [diff] [blame^] | 3 | namespace { |
4 | |||||
5 | static int counter; | ||||
6 | |||||
7 | struct A { | ||||
8 | A() : i(0) { counter++; } | ||||
9 | ~A() { counter--; } | ||||
Anders Carlsson | a36bf8f | 2009-11-20 17:27:56 +0000 | [diff] [blame] | 10 | int i; |
Anders Carlsson | a36bf8f | 2009-11-20 17:27:56 +0000 | [diff] [blame] | 11 | }; |
12 | |||||
Anders Carlsson | 5bb0ddd | 2010-02-04 17:06:52 +0000 | [diff] [blame^] | 13 | void g(int) { } |
Anders Carlsson | a36bf8f | 2009-11-20 17:27:56 +0000 | [diff] [blame] | 14 | |
Anders Carlsson | 5bb0ddd | 2010-02-04 17:06:52 +0000 | [diff] [blame^] | 15 | void f1(bool b) { |
16 | g(b ? A().i : 0); | ||||
17 | g(b || A().i); | ||||
18 | g(b && A().i); | ||||
19 | } | ||||
Anders Carlsson | a36bf8f | 2009-11-20 17:27:56 +0000 | [diff] [blame] | 20 | |
Anders Carlsson | 5bb0ddd | 2010-02-04 17:06:52 +0000 | [diff] [blame^] | 21 | struct Checker { |
22 | Checker() { | ||||
23 | f1(true); | ||||
24 | f1(false); | ||||
25 | } | ||||
26 | }; | ||||
Anders Carlsson | a36bf8f | 2009-11-20 17:27:56 +0000 | [diff] [blame] | 27 | |
Anders Carlsson | 5bb0ddd | 2010-02-04 17:06:52 +0000 | [diff] [blame^] | 28 | Checker c; |
Anders Carlsson | a36bf8f | 2009-11-20 17:27:56 +0000 | [diff] [blame] | 29 | |
Anders Carlsson | 5bb0ddd | 2010-02-04 17:06:52 +0000 | [diff] [blame^] | 30 | } |
31 | |||||
32 | // CHECK: define i32 @_Z10getCounterv() | ||||
33 | int getCounter() { | ||||
34 | // CHECK: ret i32 0 | ||||
35 | return counter; | ||||
Anders Carlsson | a36bf8f | 2009-11-20 17:27:56 +0000 | [diff] [blame] | 36 | } |