]> granicus.if.org Git - clang/commitdiff
Add a hackaround to avoid the crash in PR10355. However, our recovery
authorDouglas Gregor <dgregor@apple.com>
Thu, 14 Jul 2011 04:54:23 +0000 (04:54 +0000)
committerDouglas Gregor <dgregor@apple.com>
Thu, 14 Jul 2011 04:54:23 +0000 (04:54 +0000)
is still terrible here because typo correction is not behaving well in
the presence of overloaded functions.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@135128 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaDecl.cpp
test/FixIt/typo-crash.cpp [new file with mode: 0644]

index ebb1324dcd0e0b88ff9ccfc77750b4c2aacff496..9d91a48bdcd76f613ed2ce9710c6ec2fd3d6ab2f 100644 (file)
@@ -515,6 +515,7 @@ Corrected:
     // Perform typo correction to determine if there is another name that is
     // close to this name.
     if (!SecondTry) {
+      SecondTry = true;
       if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(),
                                                  Result.getLookupKind(), S, &SS)) {
         unsigned UnqualifiedDiag = diag::err_undeclared_var_use_suggest;
@@ -560,8 +561,9 @@ Corrected:
         if (Corrected.isKeyword())
           return Corrected.getCorrectionAsIdentifierInfo();
         
-        Diag(FirstDecl->getLocation(), diag::note_previous_decl)
-          << CorrectedQuotedStr;
+        if (FirstDecl)
+          Diag(FirstDecl->getLocation(), diag::note_previous_decl)
+            << CorrectedQuotedStr;
 
         // If we found an Objective-C instance variable, let
         // LookupInObjCMethod build the appropriate expression to
diff --git a/test/FixIt/typo-crash.cpp b/test/FixIt/typo-crash.cpp
new file mode 100644 (file)
index 0000000..b156e1b
--- /dev/null
@@ -0,0 +1,11 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+
+// FIXME: The diagnostics and recovery here are very, very poor.
+
+// PR10355
+template<typename T> void template_id1() {
+  template_id2<> t; // expected-error 2{{use of undeclared identifier 'template_id2'; did you mean 'template_id1'?}} \
+  // expected-error{{expected expression}} \
+  // expected-error{{use of undeclared identifier 't'}}
+ }
+