Home | History | Annotate | Download | only in CodeGenCXX
      1 // RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin9 -O3 | FileCheck %s
      2 
      3 namespace {
      4 
      5 static int ctorcalls;
      6 static int dtorcalls;
      7 
      8 struct A {
      9   A() : i(0) { ctorcalls++; }
     10   ~A() { dtorcalls++; }
     11   int i;
     12 
     13   friend const A& operator<<(const A& a, int n) {
     14     return a;
     15   }
     16 };
     17 
     18 void g(int) { }
     19 void g(const A&) { }
     20 
     21 void f1(bool b) {
     22   g(b ? A().i : 0);
     23   g(b || A().i);
     24   g(b && A().i);
     25   g(b ? A() << 1 : A() << 2);
     26 }
     27 
     28 struct Checker {
     29   Checker() {
     30     f1(true);
     31     f1(false);
     32   }
     33 };
     34 
     35 Checker c;
     36 
     37 }
     38 
     39 // CHECK-LABEL: define i32 @_Z12getCtorCallsv()
     40 int getCtorCalls() {
     41   // CHECK: ret i32 5
     42   return ctorcalls;
     43 }
     44 
     45 // CHECK-LABEL: define i32 @_Z12getDtorCallsv()
     46 int getDtorCalls() {
     47   // CHECK: ret i32 5
     48   return dtorcalls;
     49 }
     50 
     51 // CHECK-LABEL: define zeroext i1 @_Z7successv()
     52 bool success() {
     53   // CHECK: ret i1 true
     54   return ctorcalls == dtorcalls;
     55 }
     56