Просмотр исходного кода

[CodeComplete] Generate completion fix-its for C code as well

Current completion fix-its approach does not provide OtherOpBase for C code.
But we can easily proceed in this case taking the original Base type.

Differential Revision: https://reviews.llvm.org/D52261

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@342721 91177308-0d34-0410-b5e6-96231b3b80d8
Ivan Donchevskii 7 лет назад
Родитель
Сommit
362975cf73
2 измененных файлов с 21 добавлено и 0 удалено
  1. 2 0
      lib/Parse/ParseExpr.cpp
  2. 19 0
      test/CodeCompletion/member-access.c

+ 2 - 0
lib/Parse/ParseExpr.cpp

@@ -1766,6 +1766,8 @@ Parser::ParsePostfixExpressionSuffix(ExprResult LHS) {
 
 
         Expr *Base = LHS.get();
         Expr *Base = LHS.get();
         Expr *CorrectedBase = CorrectedLHS.get();
         Expr *CorrectedBase = CorrectedLHS.get();
+        if (!CorrectedBase && !getLangOpts().CPlusPlus)
+          CorrectedBase = Base;
 
 
         // Code completion for a member access expression.
         // Code completion for a member access expression.
         Actions.CodeCompleteMemberReferenceExpr(
         Actions.CodeCompleteMemberReferenceExpr(

+ 19 - 0
test/CodeCompletion/member-access.c

@@ -10,3 +10,22 @@ void test(struct Point *p) {
   // CHECK-CC1: x
   // CHECK-CC1: x
   // CHECK-CC1: y
   // CHECK-CC1: y
   // CHECK-CC1: z
   // CHECK-CC1: z
+}
+
+struct Point2 {
+  float x;
+};
+
+void test2(struct Point2 p) {
+  p->
+}
+
+void test3(struct Point2 *p) {
+  p.
+}
+
+// RUN: %clang_cc1 -fsyntax-only -code-completion-with-fixits -code-completion-at=%s:20:6 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s
+// CHECK-CC2: x (requires fix-it: {20:4-20:6} to ".")
+
+// RUN: %clang_cc1 -fsyntax-only -code-completion-with-fixits -code-completion-at=%s:24:5 %s -o - | FileCheck -check-prefix=CHECK-CC3 %s
+// CHECK-CC3: x (requires fix-it: {24:4-24:5} to "->")