From: Douglas Gregor Date: Thu, 17 Feb 2011 03:09:23 +0000 (+0000) Subject: When Parser::ParseExpressionList isn't given a completer, fall back to X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4706e87595bd7f5b76d863d12cc9b15dc6abd495;p=clang When Parser::ParseExpressionList isn't given a completer, fall back to normal "expression" completion. Fixes the most annoying code-completion bug I've found. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125715 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Parse/ParseExpr.cpp b/lib/Parse/ParseExpr.cpp index 4113c4fac2..7a6ec5923c 100644 --- a/lib/Parse/ParseExpr.cpp +++ b/lib/Parse/ParseExpr.cpp @@ -1801,6 +1801,8 @@ bool Parser::ParseExpressionList(llvm::SmallVectorImpl &Exprs, if (Tok.is(tok::code_completion)) { if (Completer) (Actions.*Completer)(getCurScope(), Data, Exprs.data(), Exprs.size()); + else + Actions.CodeCompleteOrdinaryName(getCurScope(), Sema::PCC_Expression); ConsumeCodeCompletionToken(); } diff --git a/test/Index/complete-exprs.cpp b/test/Index/complete-exprs.cpp index b514c06bff..016254e763 100644 --- a/test/Index/complete-exprs.cpp +++ b/test/Index/complete-exprs.cpp @@ -20,6 +20,12 @@ void f() { } +int foo(); + +void g() { + vector(foo(), foo()); +} + // RUN: c-index-test -code-completion-at=%s:20:2 %s | FileCheck -check-prefix=CHECK-CC1 %s // RUN: env CINDEXTEST_EDITING=1 CINDEXTEST_COMPLETION_CACHING=1 c-index-test -code-completion-at=%s:20:2 %s | FileCheck -check-prefix=CHECK-CC1 %s // CHECK-CC1: NotImplemented:{TypedText operator} (40) @@ -37,3 +43,11 @@ void f() { // CHECK-CC2: ClassDecl:{TypedText string} (50) // CHECK-CC2-NOT: CXXConstructor // CHECK-CC2: ClassTemplate:{TypedText vector}{LeftAngle <}{Placeholder typename T}{RightAngle >} (50) + +// RUN: c-index-test -code-completion-at=%s:26:15 %s | FileCheck -check-prefix=CHECK-CC3 %s +// CHECK-CC3: NotImplemented:{TypedText float} (50) +// CHECK-CC3: FunctionDecl:{ResultType int}{TypedText foo}{LeftParen (}{RightParen )} (50) +// CHECK-CC3: FunctionDecl:{ResultType void}{TypedText g}{LeftParen (}{RightParen )} (50) +// CHECK-CC3: ClassTemplate:{TypedText vector}{LeftAngle <}{Placeholder typename T}{RightAngle >} (50) +// CHECK-CC3: CXXConstructor:{TypedText vector}{LeftAngle <}{Placeholder typename T}{RightAngle >}{LeftParen (}{Placeholder T const &}{Comma , }{Placeholder unsigned int n}{RightParen )} (50) +// CHECK-CC3: FunctionTemplate:{ResultType void}{TypedText vector}{LeftAngle <}{Placeholder typename T}{RightAngle >}{LeftParen (}{Placeholder InputIterator first}{Comma , }{Placeholder InputIterator last}{RightParen )} (50)