[PATCH] D16870: [CUDA] Tweak attribute-based overload resolution to match nvcc behavior.
Jingyue Wu via cfe-commits
cfe-commits at lists.llvm.org
Wed Feb 3 21:40:28 PST 2016
jingyue added inline comments.
================
Comment at: lib/Sema/SemaCUDA.cpp:132-141
@@ -131,12 +131,12 @@
// (d) HostDevice behavior depends on compilation mode.
if (CallerTarget == CFT_HostDevice) {
// Calling a function that matches compilation mode is OK.
// Calling a function from the other side is frowned upon.
if (getLangOpts().CUDAIsDevice)
- return CalleeTarget == CFT_Device ? CFP_Fallback : QuestionableResult;
+ return CalleeTarget == CFT_Device ? CFP_SameSide : QuestionableResult;
else
return (CalleeTarget == CFT_Host || CalleeTarget == CFT_Global)
- ? CFP_Fallback
+ ? CFP_SameSide
: QuestionableResult;
}
----------------
Maybe a clearer way is to replace QuestionableResult with CFP_WrongSide in this if block, and after this if block say
```
if (DisabletargetCallChecks && CFP_WrongSide)
return CFP_Never;
```
================
Comment at: lib/Sema/SemaOverload.cpp:8544
@@ +8543,3 @@
+ S.IdentifyCUDAPreference(Caller, Cand2.Function);
+ if (((CFP1 == Sema::CFP_SameSide || CFP1 == Sema::CFP_Native) &&
+ (CFP2 <= Sema::CFP_WrongSide)) ||
----------------
Why can't we just return `CFP1>CFP2`? What's a counter example for that?
================
Comment at: lib/Sema/SemaOverload.cpp:8548
@@ +8547,3 @@
+ (CFP2 == Sema::CFP_SameSide || CFP2 == Sema::CFP_Native)))
+ return CFP1 > CFP2;
+ }
----------------
You assume some numeric orders between these CFPs. May be worth adding a comment in CFP's definition.
http://reviews.llvm.org/D16870
More information about the cfe-commits
mailing list