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 | |||||
Anders Carlsson | 4e3014b | 2010-02-04 17:23:15 +0000 | [diff] [blame^] | 5 | static int ctorcalls; |
6 | static int dtorcalls; | ||||
Anders Carlsson | 5bb0ddd | 2010-02-04 17:06:52 +0000 | [diff] [blame] | 7 | |
8 | struct A { | ||||
Anders Carlsson | 4e3014b | 2010-02-04 17:23:15 +0000 | [diff] [blame^] | 9 | A() : i(0) { ctorcalls++; } |
10 | ~A() { dtorcalls++; } | ||||
Anders Carlsson | a36bf8f | 2009-11-20 17:27:56 +0000 | [diff] [blame] | 11 | int i; |
Anders Carlsson | a36bf8f | 2009-11-20 17:27:56 +0000 | [diff] [blame] | 12 | }; |
13 | |||||
Anders Carlsson | 5bb0ddd | 2010-02-04 17:06:52 +0000 | [diff] [blame] | 14 | void g(int) { } |
Anders Carlsson | a36bf8f | 2009-11-20 17:27:56 +0000 | [diff] [blame] | 15 | |
Anders Carlsson | 5bb0ddd | 2010-02-04 17:06:52 +0000 | [diff] [blame] | 16 | void f1(bool b) { |
17 | g(b ? A().i : 0); | ||||
18 | g(b || A().i); | ||||
19 | g(b && A().i); | ||||
20 | } | ||||
Anders Carlsson | a36bf8f | 2009-11-20 17:27:56 +0000 | [diff] [blame] | 21 | |
Anders Carlsson | 5bb0ddd | 2010-02-04 17:06:52 +0000 | [diff] [blame] | 22 | struct Checker { |
23 | Checker() { | ||||
24 | f1(true); | ||||
25 | f1(false); | ||||
26 | } | ||||
27 | }; | ||||
Anders Carlsson | a36bf8f | 2009-11-20 17:27:56 +0000 | [diff] [blame] | 28 | |
Anders Carlsson | 5bb0ddd | 2010-02-04 17:06:52 +0000 | [diff] [blame] | 29 | Checker c; |
Anders Carlsson | a36bf8f | 2009-11-20 17:27:56 +0000 | [diff] [blame] | 30 | |
Anders Carlsson | 5bb0ddd | 2010-02-04 17:06:52 +0000 | [diff] [blame] | 31 | } |
32 | |||||
Anders Carlsson | 4e3014b | 2010-02-04 17:23:15 +0000 | [diff] [blame^] | 33 | // CHECK: define i32 @_Z12getCtorCallsv() |
34 | int getCtorCalls() { | ||||
35 | // CHECK: ret i32 3 | ||||
36 | return ctorcalls; | ||||
37 | } | ||||
38 | |||||
39 | // CHECK: define i32 @_Z12getDtorCallsv() | ||||
40 | int getDtorCalls() { | ||||
41 | // CHECK: ret i32 3 | ||||
42 | return dtorcalls; | ||||
43 | } | ||||
44 | |||||
45 | // CHECK: define zeroext i1 @_Z7successv() | ||||
46 | bool success() { | ||||
47 | // CHECK: ret i1 true | ||||
48 | return ctorcalls == dtorcalls; | ||||
Anders Carlsson | a36bf8f | 2009-11-20 17:27:56 +0000 | [diff] [blame] | 49 | } |