[all-commits] [llvm/llvm-project] acb6f8: [CUDA][HIP] Fix overloading resolution
Yaxun (Sam) Liu via All-commits
all-commits at lists.llvm.org
Wed Dec 2 13:34:16 PST 2020
Branch: refs/heads/master
Home: https://github.com/llvm/llvm-project
Commit: acb6f80d96b74af3ec515bb9811d213abb406c31
https://github.com/llvm/llvm-project/commit/acb6f80d96b74af3ec515bb9811d213abb406c31
Author: Yaxun (Sam) Liu <yaxun.liu at amd.com>
Date: 2020-12-02 (Wed, 02 Dec 2020)
Changed paths:
M clang/include/clang/Basic/LangOptions.def
M clang/include/clang/Driver/Options.td
M clang/include/clang/Sema/Overload.h
M clang/lib/Driver/ToolChains/Clang.cpp
M clang/lib/Frontend/CompilerInvocation.cpp
M clang/lib/Sema/SemaOverload.cpp
M clang/test/Driver/hip-options.hip
M clang/test/SemaCUDA/deferred-oeverload.cu
M clang/test/SemaCUDA/function-overload.cu
Log Message:
-----------
[CUDA][HIP] Fix overloading resolution
This patch implements correct hostness based overloading resolution
in isBetterOverloadCandidate.
Based on hostness, if one candidate is emittable whereas the other
candidate is not emittable, the emittable candidate is better.
If both candidates are emittable, or neither is emittable based on hostness, then
other rules should be used to determine which is better. This is because
hostness based overloading resolution is mostly for determining
viability of a function. If two functions are both viable, other factors
should take precedence in preference.
If other rules cannot determine which is better, CUDA preference will be
used again to determine which is better.
However, correct hostness based overloading resolution
requires overloading resolution diagnostics to be deferred,
which is not on by default. The rationale is that deferring
overloading resolution diagnostics may hide overloading reslolutions
issues in header files.
An option -fgpu-exclude-wrong-side-overloads is added, which is off by
default.
When -fgpu-exclude-wrong-side-overloads is off, keep the original behavior,
that is, exclude wrong side overloads only if there are same side overloads.
This may result in incorrect overloading resolution when there are no
same side candates, but is sufficient for most CUDA/HIP applications.
When -fgpu-exclude-wrong-side-overloads is on, enable deferring
overloading resolution diagnostics and enable correct hostness
based overloading resolution, i.e., always exclude wrong side overloads.
Differential Revision: https://reviews.llvm.org/D80450
More information about the All-commits
mailing list