Author: ahatanak Date: Wed Aug 1 16:51:53 2018 New Revision: 338656 URL: http://llvm.org/viewvc/llvm-project?rev=338656&view=rev Log: Serialize DoesNotEscape.
I forgot to commit this in r326530. Added: cfe/trunk/test/PCH/no-escaping-block-tail-calls.cpp cfe/trunk/test/PCH/no-escaping-block-tail-calls.h Modified: cfe/trunk/lib/Serialization/ASTReaderDecl.cpp cfe/trunk/lib/Serialization/ASTWriterDecl.cpp Modified: cfe/trunk/lib/Serialization/ASTReaderDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReaderDecl.cpp?rev=338656&r1=338655&r2=338656&view=diff ============================================================================== --- cfe/trunk/lib/Serialization/ASTReaderDecl.cpp (original) +++ cfe/trunk/lib/Serialization/ASTReaderDecl.cpp Wed Aug 1 16:51:53 2018 @@ -1472,6 +1472,7 @@ void ASTDeclReader::VisitBlockDecl(Block BD->setIsVariadic(Record.readInt()); BD->setBlockMissingReturnType(Record.readInt()); BD->setIsConversionFromLambda(Record.readInt()); + BD->setDoesNotEscape(Record.readInt()); bool capturesCXXThis = Record.readInt(); unsigned numCaptures = Record.readInt(); Modified: cfe/trunk/lib/Serialization/ASTWriterDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriterDecl.cpp?rev=338656&r1=338655&r2=338656&view=diff ============================================================================== --- cfe/trunk/lib/Serialization/ASTWriterDecl.cpp (original) +++ cfe/trunk/lib/Serialization/ASTWriterDecl.cpp Wed Aug 1 16:51:53 2018 @@ -1097,6 +1097,7 @@ void ASTDeclWriter::VisitBlockDecl(Block Record.push_back(D->isVariadic()); Record.push_back(D->blockMissingReturnType()); Record.push_back(D->isConversionFromLambda()); + Record.push_back(D->doesNotEscape()); Record.push_back(D->capturesCXXThis()); Record.push_back(D->getNumCaptures()); for (const auto &capture : D->captures()) { Added: cfe/trunk/test/PCH/no-escaping-block-tail-calls.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/PCH/no-escaping-block-tail-calls.cpp?rev=338656&view=auto ============================================================================== --- cfe/trunk/test/PCH/no-escaping-block-tail-calls.cpp (added) +++ cfe/trunk/test/PCH/no-escaping-block-tail-calls.cpp Wed Aug 1 16:51:53 2018 @@ -0,0 +1,14 @@ +// RUN: %clang_cc1 -x c++-header -emit-pch -O1 -fblocks -fno-escaping-block-tail-calls -o %t %S/no-escaping-block-tail-calls.h +// RUN: %clang_cc1 -include-pch %t -emit-llvm -O1 -fblocks -fno-escaping-block-tail-calls -o - %s | FileCheck %s + +// Check that -fno-escaping-block-tail-calls doesn't disable tail-call +// optimization if the block is non-escaping. + +// CHECK-LABEL: define internal i32 @___ZN1S1mEv_block_invoke( +// CHECK: %[[CALL:.*]] = tail call i32 @_ZN1S3fooER2S0( +// CHECK-NEXT: ret i32 %[[CALL]] + +void test() { + S s; + s.m(); +} Added: cfe/trunk/test/PCH/no-escaping-block-tail-calls.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/PCH/no-escaping-block-tail-calls.h?rev=338656&view=auto ============================================================================== --- cfe/trunk/test/PCH/no-escaping-block-tail-calls.h (added) +++ cfe/trunk/test/PCH/no-escaping-block-tail-calls.h Wed Aug 1 16:51:53 2018 @@ -0,0 +1,16 @@ +typedef int (^BlockTy)(void); + +struct S0 { + int a; +}; + +struct S { + int i; + void func(BlockTy __attribute__((noescape))); + int foo(S0 &); + + void m() { + __block S0 x; + func(^{ return foo(x); }); + } +}; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits