[clang] [clang][Sema] Fix particular operator overload crash (PR #105976)
via cfe-commits
cfe-commits at lists.llvm.org
Sat Aug 24 23:57:26 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Nicolas van Kempen (nicovank)
<details>
<summary>Changes</summary>
Fix #<!-- -->104883.
Fix #<!-- -->104800.
Thanks @<!-- -->Endilll for the reduced reproducer. Bisection points to 0cb7e7ca0c864e052bf49978f3bcd667c9e16930 as the faulty commit, but nothing there seems to indicate what the problem is. After some print debugging, `Decl` on [this line](https://github.com/llvm/llvm-project/blob/f22b1da8791edd557ce34c87190e329df2e1c892/clang/lib/Sema/SemaOverload.cpp#L7429) is a `UsingDecl`, not a `CXXMethodDecl`, and the cast fails.
Add a conditional case for `UsingDecl`.
I am not familiar with Clang/Sema so please make sure this fix makes sense.
---
Full diff: https://github.com/llvm/llvm-project/pull/105976.diff
1 Files Affected:
- (modified) clang/lib/Sema/SemaOverload.cpp (+7)
``````````diff
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp
index 1ce0fa091938d7..a2cf334bd176fe 100644
--- a/clang/lib/Sema/SemaOverload.cpp
+++ b/clang/lib/Sema/SemaOverload.cpp
@@ -7425,6 +7425,13 @@ void Sema::AddMethodCandidate(DeclAccessPair FoundDecl, QualType ObjectType,
/*ExplicitArgs*/ nullptr, ObjectType,
ObjectClassification, Args, CandidateSet,
SuppressUserConversions, false, PO);
+ } else if (UsingDecl *UD = dyn_cast<UsingDecl>(Decl)) {
+ for (auto *Shadow : UD->shadows()) {
+ AddMethodCandidate(cast<CXXMethodDecl>(Shadow->getTargetDecl()),
+ FoundDecl, ActingContext, ObjectType,
+ ObjectClassification, Args, CandidateSet,
+ SuppressUserConversions, false, std::nullopt, PO);
+ }
} else {
AddMethodCandidate(cast<CXXMethodDecl>(Decl), FoundDecl, ActingContext,
ObjectType, ObjectClassification, Args, CandidateSet,
``````````
</details>
https://github.com/llvm/llvm-project/pull/105976
More information about the cfe-commits
mailing list