Quuxplusone added inline comments.

================
Comment at: clang/include/clang/Basic/AttrDocs.td:4087-4088
 
-Marking virtual functions as ``not_tail_called`` is an error:
+Marking virtual functions as ``not_tail_called`` will not have effect on the
+overriding functions of derived classes:
 
----------------
ahatanak wrote:
> Quuxplusone wrote:
> > aaron.ballman wrote:
> > > 
> > /will not have effect/will have no effect/
> > However, this phrasing is easy to interpret the wrong way around: actually 
> > marking a (base-class) virtual function //will// affect overriding 
> > functions in derived classes! You meant that marking the //overrider// 
> > wouldn't retroactively affect the //overridden// function from the base 
> > class.
> > I think the correct explanation would be more like this:
> > 
> >     Generally, marking an overriding virtual function as 
> > ``not_tail_called`` is
> >     not useful, because this attribute is a property of the static type. 
> > Calls
> >     made through a pointer or reference to the base class type will respect
> >     the ``no_tail_called`` attribute of the base class's member function,
> >     regardless of the runtime destination of the call.
> > 
> > I think it'd also be correct and helpful to add:
> > 
> >     Similarly, calls made through a function pointer will respect the
> >     ``no_tail_called`` attribute of the function pointer, not of its
> >     runtime destination.
> > 
> > (I admit this is mildly redundant with the `foo2` example above.)
> > calls made through a function pointer will respect the ``no_tail_called`` 
> > attribute of the function pointer
> 
> But function pointers currently can't be annotated with `no_tail_called`, 
> right?
Ah, maybe. By "will respect the not-tail-called attribute of the function 
pointer," I meant both "will not-tail-call it if it has the attribute" and also 
"may tail-call it if it lacks the attribute." Sounds like only the latter is 
hittable today (as shown in the `foo2` example).

Also, I notice that everyone (including me) keeps misspelling the name of this 
attribute. I wish it were spelled as a command, like "nodiscard" — e.g. 
"notailcall" or "do_not_tail_call" — but I assume that ship has sailed?  
Anyway, apparently `not_tail_called` is the current spelling, and we should 
make sure the docs use it consistently :)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D96832/new/

https://reviews.llvm.org/D96832

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

Reply via email to