// 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;
}
