diff options
author | Sam McCall <sam.mccall@gmail.com> | 2018-10-10 10:51:48 +0000 |
---|---|---|
committer | Sam McCall <sam.mccall@gmail.com> | 2018-10-10 10:51:48 +0000 |
commit | aeb4b3e6324bfcce4b997204e54b8a0bf63efd5d (patch) | |
tree | bb79c5938723a1c61dd31ff221a32629bb4343ff /clang | |
parent | 5cb3a82892ed66655849b49cd693c69f2139ec5c (diff) | |
download | bcm5719-llvm-aeb4b3e6324bfcce4b997204e54b8a0bf63efd5d.tar.gz bcm5719-llvm-aeb4b3e6324bfcce4b997204e54b8a0bf63efd5d.zip |
[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
llvm-svn: 344133
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Sema/SemaCodeComplete.cpp | 3 | ||||
-rw-r--r-- | clang/test/CodeCompletion/crash-func-decl.cpp | 5 |
2 files changed, 7 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp index 33bb1229ac1..bdf538b9dcd 100644 --- a/clang/lib/Sema/SemaCodeComplete.cpp +++ b/clang/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/clang/test/CodeCompletion/crash-func-decl.cpp b/clang/test/CodeCompletion/crash-func-decl.cpp new file mode 100644 index 00000000000..7abcdcdb271 --- /dev/null +++ b/clang/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 |