[PATCH] D137872: Implement lambdas with inalloca parameters by forwarding to function without inalloca calling convention.

Amy Huang via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Dec 7 10:27:24 PST 2022


akhuang added a comment.

ping @efriedma, do you mind looking at this again? thanks!



================
Comment at: clang/include/clang/CodeGen/CGFunctionInfo.h:571
+  /// Whether this function should avoid inalloca arguments.
+  unsigned DontInAlloca: 1;
+
----------------
rnk wrote:
> This is an amusing name, but we should try to find something better. :)
> 
> Can we build on this flag to support re-writing a varargs prototype to receive a va_list? If so, we should plan for that, and name this to cover both use cases. Elsewhere in clang we use the terminology "delegate call" see [EmitDelegateCallArg](https://github.com/llvm/llvm-project/blob/2e999b7dd1934a44d38c3a753460f1e5a217e9a5/clang/lib/CodeGen/CGVTables.cpp#L341). Could this be something like `ForDelegation` or `ForDelegateCall` or `IsDelegateCall` or `IsDelegateTarget` or something like that? Or Thunk? I think I like `ForDelegateCall`, but I'm not sure.
> 
> ---
> 
> Does anyone know what a "chain call" is? It wasn't clear to me immediately.
> 
> 
Yeah, that naming makes sense. 

chain call: https://reviews.llvm.org/D6332? 


================
Comment at: clang/lib/CodeGen/CGClass.cpp:3097
+
+  std::string ImplName = (CallOpFn->getName() + ".impl").str();
+  llvm::Function *Fn = CallOpFn->getParent()->getFunction(ImplName);
----------------
rnk wrote:
> We should use a name which demangles correctly, as we do for `__invoke`. This is a good first draft, though.
Fixed to replace different part of the mangled name with `__impl`. Don't know if it would be better to use the actual mangling functions, but the string replace here seems simple enough.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D137872



More information about the cfe-commits mailing list