]> granicus.if.org Git - clang/commit
Add support for function attribute 'not_tail_called'.
authorAkira Hatanaka <ahatanaka@apple.com>
Fri, 6 Nov 2015 23:56:15 +0000 (23:56 +0000)
committerAkira Hatanaka <ahatanaka@apple.com>
Fri, 6 Nov 2015 23:56:15 +0000 (23:56 +0000)
commit08bdfb571a5977eb472cf7097e2ff346b0b264f2
tree687928b990d924a89a0baacc8cf7daf706f75017
parent67fafbb08d456c44dabca62e3af4c20abb715d65
Add support for function attribute 'not_tail_called'.

This attribute is used to prevent tail-call optimizations to the marked
function. For example, in the following piece of code, foo1 will not be
tail-call optimized:

int __attribute__((not_tail_called)) foo1(int);

int foo2(int a) {
  return foo1(a); // Tail-call optimization is not performed.
}

The attribute has effect only on statically bound calls. It has no
effect on indirect calls. Also, virtual functions and objective-c
methods cannot be marked as 'not_tail_called'.

rdar://problem/22667622

Differential Revision: http://reviews.llvm.org/D12922

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@252369 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/Basic/Attr.td
include/clang/Basic/AttrDocs.td
include/clang/Basic/DiagnosticSemaKinds.td
lib/CodeGen/CGCall.cpp
lib/Sema/SemaDecl.cpp
lib/Sema/SemaDeclAttr.cpp
test/CodeGen/attr-no-tail.c [new file with mode: 0644]
test/CodeGenCXX/attr-notail.cpp [new file with mode: 0644]
test/Sema/attr-notail.c [new file with mode: 0644]
test/SemaCXX/attr-notail.cpp [new file with mode: 0644]