// REQUIRES: amdgpu-registered-target // RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin9 -O3 | FileCheck %s // RUN: %clang_cc1 -emit-llvm %s -o - -triple=amdgcn-amd-amdhsa -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-LABEL: define i32 @_Z12getCtorCallsv() int getCtorCalls() { // CHECK: ret i32 5 return ctorcalls; } // CHECK-LABEL: define i32 @_Z12getDtorCallsv() int getDtorCalls() { // CHECK: ret i32 5 return dtorcalls; } // CHECK-LABEL: define zeroext i1 @_Z7successv() bool success() { // CHECK: ret i1 true return ctorcalls == dtorcalls; }