yujincheng08 wrote:
@AaronBallman Hi, I will quickly cover my motivation for this.
Basically, I want to implement a "function wrapper", in which we can insert
code snippets before and after the function, e.g., performance instruments.
Like the following:
```c++
<typename T>
struct FunctionWrapper;
<typename R, typename ...Args>
struct FunctionWrapper<R(Args...)> {
R (*inner)(Args...);
R operator()(Args... &&args) {
// before snippets
R ret = inner(std::forward<Args>(args)...);
// after snippets
return ret;
}
};
```
Most of the time, it works. Until I face a function pointer with *calling
convention*, e.g., `__fastcall___`. In this case, we cannot assign inner =
*fastcall function pointer*.
So in this case, one way I think of is:
```
wrapper = +[] static (auto... args) [[gnu::copy(inner)]] { inner(args...); }
```
so that I can use a lambda instead to implement the wrapper and preserve the
calling convention. It works on GCC, but I found that Clang does not support
copy attribute.
https://github.com/llvm/llvm-project/pull/229355
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits