| // RUN: clang-cc -emit-llvm %s -o %t -triple=x86_64-apple-darwin9 && |
| struct A { |
| A(); |
| ~A(); |
| void f(); |
| }; |
| |
| // RUN: grep "call void @_ZN1AC1Ev" %t | count 2 && |
| // RUN: grep "call void @_ZN1AD1Ev" %t | count 2 && |
| void f1() { |
| (void)A(); |
| A().f(); |
| } |
| |
| // Function calls |
| struct B { |
| B(); |
| ~B(); |
| }; |
| |
| B g(); |
| |
| // RUN: grep "call void @_ZN1BC1Ev" %t | count 0 && |
| // RUN: grep "call void @_ZN1BD1Ev" %t | count 1 && |
| void f2() { |
| (void)g(); |
| } |
| |
| // Member function calls |
| struct C { |
| C(); |
| ~C(); |
| |
| C f(); |
| }; |
| |
| // RUN: grep "call void @_ZN1CC1Ev" %t | count 1 && |
| // RUN: grep "call void @_ZN1CD1Ev" %t | count 2 && |
| void f3() { |
| C().f(); |
| } |
| |
| // Function call operator |
| struct D { |
| D(); |
| ~D(); |
| |
| D operator()(); |
| }; |
| |
| // RUN: grep "call void @_ZN1DC1Ev" %t | count 1 && |
| // RUN: grep "call void @_ZN1DD1Ev" %t | count 2 && |
| void f4() { |
| D()(); |
| } |
| |
| // Overloaded operators |
| struct E { |
| E(); |
| ~E(); |
| E operator+(const E&); |
| E operator!(); |
| }; |
| |
| // RUN: grep "call void @_ZN1EC1Ev" %t | count 3 && |
| // RUN: grep "call void @_ZN1ED1Ev" %t | count 5 && |
| void f5() { |
| E() + E(); |
| !E(); |
| } |
| |
| struct F { |
| F(); |
| ~F(); |
| F& f(); |
| }; |
| |
| // RUN: grep "call void @_ZN1FC1Ev" %t | count 1 && |
| // RUN: grep "call void @_ZN1FD1Ev" %t | count 1 |
| void f6() { |
| F().f(); |
| } |
| |