From: Douglas Gregor Date: Thu, 14 Jul 2011 04:54:23 +0000 (+0000) Subject: Add a hackaround to avoid the crash in PR10355. However, our recovery X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3a348c86ffaebd3ba8bd9bbae342b6e9f5f62cd7;p=clang Add a hackaround to avoid the crash in PR10355. However, our recovery 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 --- diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index ebb1324dcd..9d91a48bdc 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -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 index 0000000000..b156e1b44c --- /dev/null +++ b/test/FixIt/typo-crash.cpp @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s + +// FIXME: The diagnostics and recovery here are very, very poor. + +// PR10355 +template 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'}} + } +