r260993 - [typo-correction] Apply name specifier corrections when forming a NNS
Reid Kleckner via cfe-commits
cfe-commits at lists.llvm.org
Tue Feb 16 11:16:20 PST 2016
Author: rnk
Date: Tue Feb 16 13:16:20 2016
New Revision: 260993
URL: http://llvm.org/viewvc/llvm-project?rev=260993&view=rev
Log:
[typo-correction] Apply name specifier corrections when forming a NNS
Previously we would leave behind the old name specifier prefix, which
creates an invalid AST. Other callers of CorrectTypo update their
CXXScopeSpec objects with the correction specifier if one is present.
Modified:
cfe/trunk/lib/Sema/SemaCXXScopeSpec.cpp
cfe/trunk/test/SemaCXX/typo-correction-crash.cpp
Modified: cfe/trunk/lib/Sema/SemaCXXScopeSpec.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaCXXScopeSpec.cpp?rev=260993&r1=260992&r2=260993&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaCXXScopeSpec.cpp (original)
+++ cfe/trunk/lib/Sema/SemaCXXScopeSpec.cpp Tue Feb 16 13:16:20 2016
@@ -606,6 +606,10 @@ bool Sema::BuildCXXNestedNameSpecifier(S
diagnoseTypo(Corrected, PDiag(diag::err_undeclared_var_use_suggest)
<< Name);
+ if (Corrected.getCorrectionSpecifier())
+ SS.MakeTrivial(Context, Corrected.getCorrectionSpecifier(),
+ SourceRange(Found.getNameLoc()));
+
if (NamedDecl *ND = Corrected.getFoundDecl())
Found.addDecl(ND);
Found.setLookupName(Corrected.getCorrection());
Modified: cfe/trunk/test/SemaCXX/typo-correction-crash.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/typo-correction-crash.cpp?rev=260993&r1=260992&r2=260993&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/typo-correction-crash.cpp (original)
+++ cfe/trunk/test/SemaCXX/typo-correction-crash.cpp Tue Feb 16 13:16:20 2016
@@ -9,3 +9,11 @@ auto check2() {
return "s";
return tes; // expected-error {{use of undeclared identifier 'tes'; did you mean 'test'?}}
}
+
+namespace BarNamespace {
+namespace NestedNamespace { // expected-note {{'BarNamespace::NestedNamespace' declared here}}
+typedef int type;
+}
+}
+struct FooRecord { };
+FooRecord::NestedNamespace::type x; // expected-error {{no member named 'NestedNamespace' in 'FooRecord'; did you mean 'BarNamespace::NestedNamespace'?}}
More information about the cfe-commits
mailing list