]> granicus.if.org Git - clang/commit
Add an option to disable tail-call optimization for escaping blocks.
authorAkira Hatanaka <ahatanaka@apple.com>
Fri, 2 Mar 2018 01:53:15 +0000 (01:53 +0000)
committerAkira Hatanaka <ahatanaka@apple.com>
Fri, 2 Mar 2018 01:53:15 +0000 (01:53 +0000)
commita4fcfa4da04771d28ea76ad876fa8645fd6032e6
tree2db1da2968a7549d6a8aa120dac5ec5e41daf673
parente0586d3d1fdcb78d4c391a21798fe2319db8d07f
Add an option to disable tail-call optimization for escaping blocks.

This makes it easier to debug crashes and hangs in block functions since
users can easily find out where the block is called from. The option
doesn't disable tail-calls from non-escaping blocks since non-escaping
blocks are not as hard to debug as escaping blocks.

rdar://problem/35758207

Differential Revision: https://reviews.llvm.org/D43841

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@326530 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/AST/Decl.h
include/clang/Driver/Options.td
include/clang/Frontend/CodeGenOptions.def
lib/CodeGen/CGCall.cpp
lib/Driver/ToolChains/Clang.cpp
lib/Frontend/CompilerInvocation.cpp
lib/Sema/SemaExpr.cpp
lib/Sema/SemaExprObjC.cpp
lib/Sema/SemaPseudoObject.cpp
test/CodeGenObjC/disable-tail-call-escaping-block.m [new file with mode: 0644]
test/Driver/fno-escaping-block-tail-calls.c [new file with mode: 0644]