[PATCH] D158247: [CUDA][HIP] Fix overloading resolution in global variable initializer
Yaxun Liu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 18 21:35:21 PDT 2023
yaxunl marked 3 inline comments as done.
yaxunl added inline comments.
================
Comment at: clang/include/clang/Sema/Sema.h:4753
+ /// Otherwise, use \p D to determiine the host/device target.
bool CheckCallingConvAttr(const ParsedAttr &attr, CallingConv &CC,
+ const FunctionDecl *FD = nullptr,
----------------
tra wrote:
> It appears that `Declarator D` here is only used as an attribute carrier used to identify CUDA calling target.
> Should we pass `CudaTarget ContextTarget` instead and let the caller figure out how to find it?
>
> I'm just thinking that we're hardcoding just one specific way to find the target, while there may potentially be more.
> The current way is OK, as we have just one use case at the moment.
>
>
will do
================
Comment at: clang/lib/Sema/SemaCUDA.cpp:137
+ // Code that lives outside a function gets the target from CurCUDATargetCtx.
+ if (D == nullptr) {
+ return CurCUDATargetCtx.Target;
----------------
tra wrote:
> Style nit: no braces around single-statement body.
will fix
================
Comment at: clang/test/CodeGenCUDA/global-initializers.cu:11-12
+// Check host/device-based overloding resolution in global variable initializer.
+template<typename T, typename U>
+T pow(T, U) { return 1.0; }
+
----------------
tra wrote:
> We don't really need templates to reproduce the issue. We just need a host function with lower overloading priority. A function requiring type conversion or with an additional default argument should do. E.g. `float pow(float, int); ` or `double X = pow(double, int, bool lower_priority_host_overload=1);`
>
> Removing template should unclutter the tests a bit.
>
will do
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D158247/new/
https://reviews.llvm.org/D158247
More information about the cfe-commits
mailing list