> On 2015-Oct-13, at 09:55, Aaron Ballman <aaron.ball...@gmail.com> wrote:
> 
> aaron.ballman added a comment.
> 
> In http://reviews.llvm.org/D12922#265452, @ahatanak wrote:
> 
>> I think there are a couple of things that have to be discussed:
>> 
>> 1. Name of the attribute: Should it be "notail" or "notailcall"? Perhaps it 
>> should be named something like "nodirecttail" to indicate it is used to 
>> block direct calls, but not indirect calls?
> 
> 
> The attribute prevents tail calls from the call site, not for the function 
> itself. "notail", at least to me, implies that the function definition itself 
> will not have TCO; it does not imply that callers will be affected. Perhaps 
> "not_tail_called" or "disable_tail_calls"? It's a hard concept to get across 
> in a small identifier.

Note that LLVM has an IR-level attribute called "disabletailcails" that implies 
that the function definition itself will not have TCO.

I like notailcall because of its relation to noinline.  They're both structured 
like "no<someverb>", and both apply to what callers can do.

I don't really have a strong opinion though, just sharing those thoughts.

> 
> Also, I would like to see a test that shows always_inline, notail also gets 
> diagnosed as mutually exclusive, and a test that the right thing happens with 
> a C++ spelling on a member function.
> 
> ~Aaron
> 
> 
> ================
> Comment at: include/clang/Basic/AttrDocs.td:1619
> @@ +1618,3 @@
> +  let Content = [{
> +Tail call optimization is not performed on direct calls to a function marked 
> ``notail``.
> +  }];
> ----------------
> It would be good to clarify what you mean by direct calls, as not all of the 
> readers are going to understand that easily. Perhaps a simple code example 
> showing a call to the function, and a call to the same function through a 
> function pointer, with comments showing which one has TCO.
> 
> You should also call out that it is mutually exclusive with always_inline.
> 
> ================
> Comment at: lib/Sema/SemaDeclAttr.cpp:1705
> @@ +1704,3 @@
> +static void handleNoTailAttr(Sema &S, Decl *D, const AttributeList &Attr) {
> +  if (checkAttrMutualExclusion<AlwaysInlineAttr>(S, D, Attr))
> +    return;
> ----------------
> Missing the same check in the always_inline attribute handler.
> 
> 
> http://reviews.llvm.org/D12922
> 
> 
> 

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to