John McCall | d1e40d5 | 2011-10-02 01:16:38 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -emit-llvm -o - -fblocks %s -O1 -triple x86_64-apple-darwin10.0.0 -fobjc-fragile-abi | FileCheck %s |
Douglas Gregor | f7603f6 | 2011-09-06 20:33:37 +0000 | [diff] [blame] | 2 | |
| 3 | // PR10835 / <rdar://problem/10050178> |
| 4 | struct X { |
| 5 | X(); |
| 6 | X(const X&); |
| 7 | ~X(); |
| 8 | }; |
| 9 | |
| 10 | @interface NRVO |
| 11 | @end |
| 12 | |
| 13 | @implementation NRVO |
| 14 | // CHECK: define internal void @"\01-[NRVO getNRVO]" |
| 15 | - (X)getNRVO { |
| 16 | X x; |
| 17 | // CHECK: tail call void @_ZN1XC1Ev |
| 18 | // CHECK-NEXT: ret void |
| 19 | return x; |
| 20 | } |
| 21 | @end |
Douglas Gregor | f8b7f71 | 2011-09-06 20:46:03 +0000 | [diff] [blame] | 22 | |
| 23 | X blocksNRVO() { |
| 24 | return ^{ |
| 25 | // CHECK: define internal void @__blocksNRVO_block_invoke_0 |
| 26 | X x; |
| 27 | // CHECK: tail call void @_ZN1XC1Ev |
| 28 | // CHECK-NEXT: ret void |
| 29 | return x; |
| 30 | }() ; |
| 31 | } |
| 32 | |