From: Sam McCall Date: Wed, 10 Oct 2018 10:51:48 +0000 (+0000) Subject: [CodeComplete] Fix crash when completing params function declarations. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=37521757fa2168cc9b401c37069623f19d07b0b7;p=clang [CodeComplete] Fix crash when completing params function declarations. Summary: In a decl like `int AA(BB cc)` where BB isn't defined, we end up trying to parse `BB cc` as an expression (vexing parse) and end up triggering the parser's "recovery-in-function" completion with no actual function scope. This patch avoids the assumption that such a scope exists in this context. Reviewers: kadircet Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D53070 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@344133 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaCodeComplete.cpp b/lib/Sema/SemaCodeComplete.cpp index 33bb1229ac..bdf538b9dc 100644 --- a/lib/Sema/SemaCodeComplete.cpp +++ b/lib/Sema/SemaCodeComplete.cpp @@ -1881,7 +1881,8 @@ static void AddOrdinaryNameResults(Sema::ParserCompletionContext CCC, } // Switch-specific statements. - if (!SemaRef.getCurFunction()->SwitchStack.empty()) { + if (SemaRef.getCurFunction() && + !SemaRef.getCurFunction()->SwitchStack.empty()) { // case expression: Builder.AddTypedTextChunk("case"); Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace); diff --git a/test/CodeCompletion/crash-func-decl.cpp b/test/CodeCompletion/crash-func-decl.cpp new file mode 100644 index 0000000000..7abcdcdb27 --- /dev/null +++ b/test/CodeCompletion/crash-func-decl.cpp @@ -0,0 +1,5 @@ +// Important that BB is unknown. +// This triggers completion in PCC_RecoveryInFunction context, with no function. +int AA(BB cc); +// RUN: not %clang_cc1 -fsyntax-only -code-completion-at=%s:3:12 %s | FileCheck %s +// CHECK: COMPLETION: char