[clang] [Clang][Sema] Fix lookup of dependent operator= named by using-declaration (PR #91503)
via cfe-commits
cfe-commits at lists.llvm.org
Wed May 8 10:02:56 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Krystian Stasiowski (sdkrystian)
<details>
<summary>Changes</summary>
Fixes [this bug](https://github.com/llvm/llvm-project/pull/90152#issuecomment-2100932093) caused by #<!-- -->90152.
Will add tests shortly.
---
Full diff: https://github.com/llvm/llvm-project/pull/91503.diff
1 Files Affected:
- (modified) clang/lib/Sema/SemaDeclCXX.cpp (+12-5)
``````````diff
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 157d42c09cfcd..91c83564b567e 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -12963,14 +12963,15 @@ NamedDecl *Sema::BuildUsingDeclaration(
return nullptr;
}
- DeclContext *LookupContext = computeDeclContext(SS);
NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
- if (!LookupContext || EllipsisLoc.isValid()) {
- NamedDecl *D;
+ DeclContext *LookupContext = computeDeclContext(SS);
+
+ auto BuildDependent = [&] {
+ NamedDecl *D = nullptr;
// Dependent scope, or an unexpanded pack
if (!LookupContext && CheckUsingDeclQualifier(UsingLoc, HasTypenameKeyword,
SS, NameInfo, IdentLoc))
- return nullptr;
+ return D;
if (HasTypenameKeyword) {
// FIXME: not all declaration name kinds are legal here
@@ -12987,7 +12988,7 @@ NamedDecl *Sema::BuildUsingDeclaration(
CurContext->addDecl(D);
ProcessDeclAttributeList(S, D, AttrList);
return D;
- }
+ };
auto Build = [&](bool Invalid) {
UsingDecl *UD =
@@ -13002,6 +13003,9 @@ NamedDecl *Sema::BuildUsingDeclaration(
auto BuildInvalid = [&]{ return Build(true); };
auto BuildValid = [&]{ return Build(false); };
+ if (!LookupContext || EllipsisLoc.isValid())
+ return BuildDependent();
+
if (RequireCompleteDeclContext(SS, LookupContext))
return BuildInvalid();
@@ -13024,6 +13028,9 @@ NamedDecl *Sema::BuildUsingDeclaration(
LookupQualifiedName(R, LookupContext);
+ if (R.wasNotFoundInCurrentInstantiation())
+ return BuildDependent();
+
// Validate the context, now we have a lookup
if (CheckUsingDeclQualifier(UsingLoc, HasTypenameKeyword, SS, NameInfo,
IdentLoc, &R))
``````````
</details>
https://github.com/llvm/llvm-project/pull/91503
More information about the cfe-commits
mailing list