[llvm-branch-commits] [clang] 83a5dec - [clang] use typo-corrected name qualifier for expressions
Douglas Yung via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Mar 5 05:54:29 PST 2026
Author: Matheus Izvekov
Date: 2026-03-05T13:53:59Z
New Revision: 83a5dec8cadb86e877491b1a380f6c21120c7807
URL: https://github.com/llvm/llvm-project/commit/83a5dec8cadb86e877491b1a380f6c21120c7807
DIFF: https://github.com/llvm/llvm-project/commit/83a5dec8cadb86e877491b1a380f6c21120c7807.diff
LOG: [clang] use typo-corrected name qualifier for expressions
Fixes #175783
Added:
clang/test/SemaCXX/GH175783.cpp
Modified:
clang/lib/Sema/SemaExpr.cpp
clang/test/ParserOpenACC/parse-constructs.cpp
Removed:
################################################################################
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 270b82ef38b83..12681a1f0c73d 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -2653,6 +2653,13 @@ bool Sema::DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R,
<< DroppedSpecifier << NameRange,
PDiag(NoteID), AcceptableWithRecovery);
+ if (Corrected.WillReplaceSpecifier()) {
+ NestedNameSpecifier NNS = Corrected.getCorrectionSpecifier();
+ // In order to be valid, a non-empty CXXScopeSpec needs a source range.
+ SS.MakeTrivial(Context, NNS,
+ NNS ? NameRange.getBegin() : SourceRange());
+ }
+
// Tell the callee whether to try to recover.
return !AcceptableWithRecovery;
}
diff --git a/clang/test/ParserOpenACC/parse-constructs.cpp b/clang/test/ParserOpenACC/parse-constructs.cpp
index 69b04bcbad9e3..6d6285ce63bd2 100644
--- a/clang/test/ParserOpenACC/parse-constructs.cpp
+++ b/clang/test/ParserOpenACC/parse-constructs.cpp
@@ -18,13 +18,13 @@ namespace NS {
#pragma acc routine(NS::foo) seq
// expected-error at +2{{use of undeclared identifier 'templ'; did you mean 'NS::templ'?}}
-// expected-error at +1{{OpenACC routine name 'templ' names a set of overloads}}
+// expected-error at +1{{OpenACC routine name 'NS::templ' names a set of overloads}}
#pragma acc routine(templ) seq
// expected-error at +1{{OpenACC routine name 'NS::templ' names a set of overloads}}
#pragma acc routine(NS::templ) seq
// expected-error at +2{{use of undeclared identifier 'templ'; did you mean 'NS::templ'?}}
-// expected-error at +1{{OpenACC routine name 'templ<int>' names a set of overloads}}
+// expected-error at +1{{OpenACC routine name 'NS::templ<int>' names a set of overloads}}
#pragma acc routine(templ<int>) seq
// expected-error at +1{{OpenACC routine name 'NS::templ<int>' names a set of overloads}}
#pragma acc routine(NS::templ<int>) seq
diff --git a/clang/test/SemaCXX/GH175783.cpp b/clang/test/SemaCXX/GH175783.cpp
new file mode 100644
index 0000000000000..6bb2acffdeae2
--- /dev/null
+++ b/clang/test/SemaCXX/GH175783.cpp
@@ -0,0 +1,12 @@
+// RUN: %clang_cc1 -fspell-checking-limit=0 -verify %s
+
+namespace GH175783 {
+ class B {
+ public:
+ virtual void foo(); // #foo
+ };
+ void (*p)() = &GH175783::foo;
+ // expected-error at -1 {{no member named 'foo' in namespace 'GH175783'; did you mean 'B::foo'?}}
+ // expected-error at -2 {{cannot initialize a variable of type 'void (*)()' with an rvalue of type 'void (B::*)()'}}
+ // expected-note@#foo {{'B::foo' declared here}}
+} // namespace GH175783
More information about the llvm-branch-commits
mailing list