// RUN: %clang_cc1 -emit-llvm -o - -fblocks %s -O1 -fno-inline-functions -triple x86_64-apple-darwin10.0.0 -fobjc-runtime=macosx-fragile-10.5 | FileCheck %s // PR10835 struct X { X(); X(const X&); ~X(); }; @interface NRVO @end @implementation NRVO // CHECK: define internal void @"\01-[NRVO getNRVO]" - (X)getNRVO { X x; // CHECK: call void @_ZN1XC1Ev // CHECK-NEXT: ret void return x; } @end X blocksNRVO() { return ^{ // With the optimizer enabled, the DeadArgElim pass is able to // mark the block litteral address argument as unused and later the // related block_litteral global variable is removed. // This allows to promote this call to a fastcc call. // CHECK-LABEL: define internal fastcc void @___Z10blocksNRVOv_block_invoke X x; // CHECK: call void @_ZN1XC1Ev // CHECK-NEXT: ret void return x; }() ; }