Author: kadircet Date: Tue Oct 23 06:49:37 2018 New Revision: 345029 URL: http://llvm.org/viewvc/llvm-project?rev=345029&view=rev Log: [clang] Fix a null pointer dereference.
Summary: Sometimes expression inside switch statement can be invalid, for example type might be incomplete. In those cases code were causing a null pointer dereference. This patch fixes that. Reviewers: sammccall, ioeric, hokein Reviewed By: sammccall Subscribers: arphaman, cfe-commits Differential Revision: https://reviews.llvm.org/D53561 Added: cfe/trunk/test/Index/complete-switch.c Modified: cfe/trunk/lib/Sema/SemaCodeComplete.cpp Modified: cfe/trunk/lib/Sema/SemaCodeComplete.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaCodeComplete.cpp?rev=345029&r1=345028&r2=345029&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaCodeComplete.cpp (original) +++ cfe/trunk/lib/Sema/SemaCodeComplete.cpp Tue Oct 23 06:49:37 2018 @@ -4419,6 +4419,9 @@ void Sema::CodeCompleteCase(Scope *S) { return; SwitchStmt *Switch = getCurFunction()->SwitchStack.back().getPointer(); + // Condition expression might be invalid, do not continue in this case. + if (!Switch->getCond()) + return; QualType type = Switch->getCond()->IgnoreImplicit()->getType(); if (!type->isEnumeralType()) { CodeCompleteExpressionData Data(type); Added: cfe/trunk/test/Index/complete-switch.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/complete-switch.c?rev=345029&view=auto ============================================================================== --- cfe/trunk/test/Index/complete-switch.c (added) +++ cfe/trunk/test/Index/complete-switch.c Tue Oct 23 06:49:37 2018 @@ -0,0 +1,10 @@ +void f() { + auto foo = bar; + switch(foo) { + case x: + break; + } +} + +// RUN: not %clang_cc1 -fsyntax-only -code-completion-at=%s:4:10 %s | FileCheck %s -allow-empty +// CHECK-NOT: COMPLETION: foo _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits