Add support for C++ namespace-aware typo correction, e.g., correcting

  vector<int>

to

  std::vector<int>

Patch by Kaelyn Uhrain, with minor tweaks + PCH support from me. Fixes
PR5776/<rdar://problem/8652971>.

Thanks Kaelyn!


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134007 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaTemplateVariadic.cpp b/lib/Sema/SemaTemplateVariadic.cpp
index 86d3bc1..daa1523 100644
--- a/lib/Sema/SemaTemplateVariadic.cpp
+++ b/lib/Sema/SemaTemplateVariadic.cpp
@@ -716,17 +716,19 @@
     
   case LookupResult::NotFound:
   case LookupResult::NotFoundInCurrentInstantiation:
-    if (DeclarationName CorrectedName = CorrectTypo(R, S, 0, 0, false, 
-                                                    CTC_NoKeywords)) {
-      if (NamedDecl *CorrectedResult = R.getAsSingle<NamedDecl>())
+    if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(),
+                                               R.getLookupKind(), S, 0, 0,
+                                               false, CTC_NoKeywords)) {
+      if (NamedDecl *CorrectedResult = Corrected.getCorrectionDecl())
         if (CorrectedResult->isParameterPack()) {
+          std::string CorrectedQuotedStr(Corrected.getQuoted(getLangOptions()));
           ParameterPack = CorrectedResult;
           Diag(NameLoc, diag::err_sizeof_pack_no_pack_name_suggest)
-            << &Name << CorrectedName
-            << FixItHint::CreateReplacement(NameLoc, 
-                                            CorrectedName.getAsString());
+            << &Name << CorrectedQuotedStr
+            << FixItHint::CreateReplacement(
+                NameLoc, Corrected.getAsString(getLangOptions()));
           Diag(ParameterPack->getLocation(), diag::note_parameter_pack_here)
-            << CorrectedName;
+            << CorrectedQuotedStr;
         }
     }