[cfe-commits] r93370 - in /cfe/trunk: lib/Sema/ test/CodeCompletion/ test/Index/

Douglas Gregor dgregor at apple.com
Wed Jan 13 15:24:39 PST 2010


Author: dgregor
Date: Wed Jan 13 17:24:38 2010
New Revision: 93370

URL: http://llvm.org/viewvc/llvm-project?rev=93370&view=rev
Log:
Improve the sorting of code-completion results. We now always sort by
the "typed" text, first, then take into account
nested-name-specifiers, name hiding, etc. This means that the
resulting sort is actually alphabetical :)


Modified:
    cfe/trunk/lib/Sema/CodeCompleteConsumer.cpp
    cfe/trunk/lib/Sema/SemaCodeComplete.cpp
    cfe/trunk/test/CodeCompletion/enum-switch-case-qualified.cpp
    cfe/trunk/test/CodeCompletion/enum-switch-case.c
    cfe/trunk/test/CodeCompletion/enum-switch-case.cpp
    cfe/trunk/test/CodeCompletion/macros.c
    cfe/trunk/test/CodeCompletion/member-access.cpp
    cfe/trunk/test/CodeCompletion/namespace-alias.cpp
    cfe/trunk/test/CodeCompletion/namespace.cpp
    cfe/trunk/test/CodeCompletion/nested-name-specifier.cpp
    cfe/trunk/test/CodeCompletion/objc-message.m
    cfe/trunk/test/CodeCompletion/operator.cpp
    cfe/trunk/test/CodeCompletion/ordinary-name.c
    cfe/trunk/test/CodeCompletion/ordinary-name.cpp
    cfe/trunk/test/CodeCompletion/tag.c
    cfe/trunk/test/CodeCompletion/tag.cpp
    cfe/trunk/test/CodeCompletion/truncation.c
    cfe/trunk/test/CodeCompletion/using-namespace.cpp
    cfe/trunk/test/CodeCompletion/using.cpp
    cfe/trunk/test/Index/code-completion.cpp
    cfe/trunk/test/Index/complete-at-directives.m
    cfe/trunk/test/Index/complete-at-exprstmt.m
    cfe/trunk/test/Index/complete-objc-message.m

Modified: cfe/trunk/lib/Sema/CodeCompleteConsumer.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/CodeCompleteConsumer.cpp?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/CodeCompleteConsumer.cpp (original)
+++ cfe/trunk/lib/Sema/CodeCompleteConsumer.cpp Wed Jan 13 17:24:38 2010
@@ -426,8 +426,7 @@
     OS << "COMPLETION: ";
     switch (Results[I].Kind) {
     case Result::RK_Declaration:
-      OS << Results[I].Declaration->getNameAsString() << " : " 
-         << Results[I].Rank;
+      OS << Results[I].Declaration->getNameAsString() ;
       if (Results[I].Hidden)
         OS << " (Hidden)";
       if (CodeCompletionString *CCS 
@@ -440,13 +439,13 @@
       break;
       
     case Result::RK_Keyword:
-      OS << Results[I].Keyword << " : " << Results[I].Rank << '\n';
+      OS << Results[I].Keyword << '\n';
       break;
         
     case Result::RK_Macro: {
-      OS << Results[I].Macro->getName() << " : " << Results[I].Rank;
+      OS << Results[I].Macro->getName();
       if (CodeCompletionString *CCS 
-          = Results[I].CreateCodeCompletionString(SemaRef)) {
+            = Results[I].CreateCodeCompletionString(SemaRef)) {
         OS << " : " << CCS->getAsString();
         delete CCS;
       }
@@ -455,7 +454,7 @@
     }
         
     case Result::RK_Pattern: {
-      OS << "Pattern : " << Results[I].Rank << " : " 
+      OS << "Pattern : " 
          << Results[I].Pattern->getAsString() << '\n';
       break;
     }

Modified: cfe/trunk/lib/Sema/SemaCodeComplete.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaCodeComplete.cpp?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaCodeComplete.cpp (original)
+++ cfe/trunk/lib/Sema/SemaCodeComplete.cpp Wed Jan 13 17:24:38 2010
@@ -1889,29 +1889,49 @@
                                                  Y.getAsString()) < 0;
     }
     
-    bool operator()(const Result &X, const Result &Y) const {
-      // Sort first by rank.
-      if (X.Rank < Y.Rank)
-        return true;
-      else if (X.Rank > Y.Rank)
-        return false;
-      
-      // We use a special ordering for keywords and patterns, based on the
-      // typed text.
-      if ((X.Kind == Result::RK_Keyword || X.Kind == Result::RK_Pattern) &&
-          (Y.Kind == Result::RK_Keyword || Y.Kind == Result::RK_Pattern)) {
-        const char *XStr = (X.Kind == Result::RK_Keyword)? X.Keyword 
-                                                   : X.Pattern->getTypedText();
-        const char *YStr = (Y.Kind == Result::RK_Keyword)? Y.Keyword 
-                                                   : Y.Pattern->getTypedText();
-        return llvm::StringRef(XStr).compare_lower(YStr) < 0;
+    /// \brief Retrieve the name that should be used to order a result.
+    ///
+    /// If the name needs to be constructed as a string, that string will be
+    /// saved into Saved and the returned StringRef will refer to it.
+    static llvm::StringRef getOrderedName(const Result &R,
+                                          std::string &Saved) {
+      switch (R.Kind) {
+      case Result::RK_Keyword:
+        return R.Keyword;
+          
+      case Result::RK_Pattern:
+        return R.Pattern->getTypedText();
+          
+      case Result::RK_Macro:
+        return R.Macro->getName();
+          
+      case Result::RK_Declaration:
+        // Handle declarations below.
+        break;
       }
+            
+      DeclarationName Name = R.Declaration->getDeclName();
       
-      // Result kinds are ordered by decreasing importance.
-      if (X.Kind < Y.Kind)
-        return true;
-      else if (X.Kind > Y.Kind)
-        return false;
+      // If the name is a simple identifier (by far the common case), or a
+      // zero-argument selector, just return a reference to that identifier.
+      if (IdentifierInfo *Id = Name.getAsIdentifierInfo())
+        return Id->getName();
+      if (Name.isObjCZeroArgSelector())
+        if (IdentifierInfo *Id
+                          = Name.getObjCSelector().getIdentifierInfoForSlot(0))
+          return Id->getName();
+      
+      Saved = Name.getAsString();
+      return Saved;
+    }
+    
+    bool operator()(const Result &X, const Result &Y) const {
+      std::string XSaved, YSaved;
+      llvm::StringRef XStr = getOrderedName(X, XSaved);
+      llvm::StringRef YStr = getOrderedName(Y, YSaved);
+      int cmp = XStr.compare_lower(YStr);
+      if (cmp)
+        return cmp < 0;
       
       // Non-hidden names precede hidden names.
       if (X.Hidden != Y.Hidden)
@@ -1921,23 +1941,6 @@
       if (X.StartsNestedNameSpecifier != Y.StartsNestedNameSpecifier)
         return !X.StartsNestedNameSpecifier;
       
-      // Ordering depends on the kind of result.
-      switch (X.Kind) {
-        case Result::RK_Declaration:
-          // Order based on the declaration names.
-          return isEarlierDeclarationName(X.Declaration->getDeclName(),
-                                          Y.Declaration->getDeclName());
-          
-        case Result::RK_Macro:
-          return X.Macro->getName().compare_lower(Y.Macro->getName()) < 0;
-          
-        case Result::RK_Keyword:
-        case Result::RK_Pattern:
-          llvm_unreachable("Result kinds handled above");
-          break;
-      }
-      
-      // Silence GCC warning.
       return false;
     }
   };

Modified: cfe/trunk/test/CodeCompletion/enum-switch-case-qualified.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeCompletion/enum-switch-case-qualified.cpp?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/test/CodeCompletion/enum-switch-case-qualified.cpp (original)
+++ cfe/trunk/test/CodeCompletion/enum-switch-case-qualified.cpp Wed Jan 13 17:24:38 2010
@@ -22,11 +22,11 @@
   switch (color) {
   case 
     // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:23:8 %s -o - | FileCheck -check-prefix=CC1 %s
-    // CHECK-CC1: Blue : 0 : [#enum M::N::C::Color#]N::C::Blue
-    // CHECK-CC1-NEXT: Green : 0 : [#enum M::N::C::Color#]N::C::Green
-    // CHECK-CC1-NEXT: Indigo : 0 : [#enum M::N::C::Color#]N::C::Indigo
-    // CHECK-CC1-NEXT: Orange : 0 : [#enum M::N::C::Color#]N::C::Orange
-    // CHECK-CC1-NEXT: Red : 0 : [#enum M::N::C::Color#]N::C::Red
-    // CHECK-CC1-NEXT: Violet : 0 : [#enum M::N::C::Color#]N::C::Violet
-    // CHECK-CC1: Yellow : 0 : [#enum M::N::C::Color#]N::C::Yellow
+    // CHECK-CC1: Blue : [#enum M::N::C::Color#]N::C::Blue
+    // CHECK-CC1-NEXT: Green : [#enum M::N::C::Color#]N::C::Green
+    // CHECK-CC1-NEXT: Indigo : [#enum M::N::C::Color#]N::C::Indigo
+    // CHECK-CC1-NEXT: Orange : [#enum M::N::C::Color#]N::C::Orange
+    // CHECK-CC1-NEXT: Red : [#enum M::N::C::Color#]N::C::Red
+    // CHECK-CC1-NEXT: Violet : [#enum M::N::C::Color#]N::C::Violet
+    // CHECK-CC1: Yellow : [#enum M::N::C::Color#]N::C::Yellow
       

Modified: cfe/trunk/test/CodeCompletion/enum-switch-case.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeCompletion/enum-switch-case.c?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/test/CodeCompletion/enum-switch-case.c (original)
+++ cfe/trunk/test/CodeCompletion/enum-switch-case.c Wed Jan 13 17:24:38 2010
@@ -20,9 +20,9 @@
       break;
       
     // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:19:10 %s -o - | FileCheck -check-prefix=CC1 %s
-    // CHECK-CC1: Blue : 0
-    // CHECK-CC1-NEXT: Green : 0
-    // CHECK-CC1-NEXT: Indigo : 0
-    // CHECK-CC1-NEXT: Orange : 0
-    // CHECK-CC1-NEXT: Violet : 0
+    // CHECK-CC1: Blue
+    // CHECK-CC1-NEXT: Green
+    // CHECK-CC1-NEXT: Indigo
+    // CHECK-CC1-NEXT: Orange
+    // CHECK-CC1-NEXT: Violet
       

Modified: cfe/trunk/test/CodeCompletion/enum-switch-case.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeCompletion/enum-switch-case.cpp?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/test/CodeCompletion/enum-switch-case.cpp (original)
+++ cfe/trunk/test/CodeCompletion/enum-switch-case.cpp Wed Jan 13 17:24:38 2010
@@ -20,9 +20,9 @@
     
   case 
     // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:21:8 %s -o - | FileCheck -check-prefix=CC1 %s
-    // CHECK-CC1: Blue : 0 : [#enum N::Color#]N::Blue
-    // CHECK-CC1-NEXT: Green : 0 : [#enum N::Color#]N::Green
-    // CHECK-CC1-NEXT: Indigo : 0 : [#enum N::Color#]N::Indigo
-    // CHECK-CC1-NEXT: Orange : 0 : [#enum N::Color#]N::Orange
-    // CHECK-CC1-NEXT: Violet : 0 : [#enum N::Color#]N::Violet
+    // CHECK-CC1: Blue : [#enum N::Color#]N::Blue
+    // CHECK-CC1-NEXT: Green : [#enum N::Color#]N::Green
+    // CHECK-CC1-NEXT: Indigo : [#enum N::Color#]N::Indigo
+    // CHECK-CC1-NEXT: Orange : [#enum N::Color#]N::Orange
+    // CHECK-CC1-NEXT: Violet : [#enum N::Color#]N::Violet
     

Modified: cfe/trunk/test/CodeCompletion/macros.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeCompletion/macros.c?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/test/CodeCompletion/macros.c (original)
+++ cfe/trunk/test/CodeCompletion/macros.c Wed Jan 13 17:24:38 2010
@@ -19,19 +19,20 @@
   // RUN: %clang_cc1 -include-pch %t -fsyntax-only -code-completion-macros -code-completion-at=%s:12:14 %s -o - | FileCheck -check-prefix=CC1 %s
   // RUN: %clang_cc1 -include-pch %t -fsyntax-only -code-completion-macros -code-completion-at=%s:14:9 %s -o - | FileCheck -check-prefix=CC2 %s
 
-  // CC1: color
-  // CC1: x
-  // CC1: y
-  // CC1: z
   // CC1: BAR(<#X#>, <#Y#>)
+  // CC1: color
   // CC1: FOO
   // CC1: IDENTITY(<#X#>)
   // CC1: WIBBLE
-  // CC2: Blue
-  // CC2: Green
-  // CC2: Red
+  // CC1: x
+  // CC1: y
+  // CC1: z
+
   // CC2: BAR(<#X#>, <#Y#>)
+  // CC2: Blue
   // CC2: FOO
+  // CC2: Green
   // CC2: IDENTITY(<#X#>)
+  // CC2: Red
   // CC2: WIBBLE
 }

Modified: cfe/trunk/test/CodeCompletion/member-access.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeCompletion/member-access.cpp?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/test/CodeCompletion/member-access.cpp (original)
+++ cfe/trunk/test/CodeCompletion/member-access.cpp Wed Jan 13 17:24:38 2010
@@ -28,15 +28,15 @@
 void test(const Proxy &p) {
   p->
   // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:29:6 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s
-  // CHECK-CC1: member1 : 0 : [#int#][#Base1::#]member1
-  // CHECK-CC1: member1 : 0 : [#int#][#Base2::#]member1
-  // CHECK-CC1: member2 : 0 : [#float#][#Base1::#]member2
-  // CHECK-CC1: member3 : 0
-  // CHECK-CC1: member4 : 0
-  // CHECK-CC1: memfun1 : 0 : [#void#][#Base3::#]memfun1(<#float#>)
-  // CHECK-CC1: memfun1 : 0 : [#void#][#Base3::#]memfun1(<#double#>)[# const#]
-  // CHECK-CC1: memfun2 : 0 : [#void#][#Base3::#]memfun2(<#int#>)
-  // CHECK-CC1: memfun3 : 0 : [#int#]memfun3(<#int#>)
-  // CHECK-CC1: memfun1 : 0 (Hidden) : [#void#]Base2::memfun1(<#int#>)
-  // CHECK-CC1: Base1 : 3 : Base1::
+  // CHECK-CC1: Base1 : Base1::
+  // CHECK-CC1: member1 : [#int#][#Base1::#]member1
+  // CHECK-CC1: member1 : [#int#][#Base2::#]member1
+  // CHECK-CC1: member2 : [#float#][#Base1::#]member2
+  // CHECK-CC1: member3
+  // CHECK-CC1: member4
+  // CHECK-CC1: memfun1 : [#void#][#Base3::#]memfun1(<#float#>)
+  // CHECK-CC1: memfun1 : [#void#][#Base3::#]memfun1(<#double#>)[# const#]
+  // CHECK-CC1: memfun1 (Hidden) : [#void#]Base2::memfun1(<#int#>)
+  // CHECK-CC1: memfun2 : [#void#][#Base3::#]memfun2(<#int#>)
+  // CHECK-CC1: memfun3 : [#int#]memfun3(<#int#>)
   

Modified: cfe/trunk/test/CodeCompletion/namespace-alias.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeCompletion/namespace-alias.cpp?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/test/CodeCompletion/namespace-alias.cpp (original)
+++ cfe/trunk/test/CodeCompletion/namespace-alias.cpp Wed Jan 13 17:24:38 2010
@@ -12,9 +12,9 @@
   
   namespace New =
   // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:13:18 %s -o - | FileCheck -check-prefix=CC1 %s
-  // CHECK-CC1: I1 : 1
-  // CHECK-CC1: I4 : 1
-  // CHECK-CC1: I5 : 1
-  // CHECK-CC1: N2 : 3
-  // CHECK-CC1-NEXT: N4 : 3
+  // CHECK-CC1: I1
+  // CHECK-CC1: I4
+  // CHECK-CC1: I5
+  // CHECK-CC1: N2
+  // CHECK-CC1-NEXT: N4
   

Modified: cfe/trunk/test/CodeCompletion/namespace.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeCompletion/namespace.cpp?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/test/CodeCompletion/namespace.cpp (original)
+++ cfe/trunk/test/CodeCompletion/namespace.cpp Wed Jan 13 17:24:38 2010
@@ -9,6 +9,6 @@
   
   namespace
   // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:10:12 %s -o - | FileCheck -check-prefix=CC1 %s
-  // CHECK-CC1: I1 : 0
-  // CHECK-CC1-NEXT: I5 : 0
+  // CHECK-CC1: I1
+  // CHECK-CC1-NEXT: I5
   

Modified: cfe/trunk/test/CodeCompletion/nested-name-specifier.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeCompletion/nested-name-specifier.cpp?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/test/CodeCompletion/nested-name-specifier.cpp (original)
+++ cfe/trunk/test/CodeCompletion/nested-name-specifier.cpp Wed Jan 13 17:24:38 2010
@@ -11,7 +11,7 @@
 
 N::
 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:12:4 %s -o - | FileCheck -check-prefix=CC1 %s
-// CHECK-CC1: A : 0
-// CHECK-CC1: B : 0
-// CHECK-CC1: M : 0
+// CHECK-CC1: A
+// CHECK-CC1: B
+// CHECK-CC1: M
 

Modified: cfe/trunk/test/CodeCompletion/objc-message.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeCompletion/objc-message.m?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/test/CodeCompletion/objc-message.m (original)
+++ cfe/trunk/test/CodeCompletion/objc-message.m Wed Jan 13 17:24:38 2010
@@ -24,12 +24,12 @@
   [obj xx];
 }
 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:23:19 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s
-// CHECK-CC1: categoryClassMethod : 0
-// CHECK-CC1: classMethod1:withKeyword: : 0
-// CHECK-CC1: classMethod2 : 0
-// CHECK-CC1: new : 0
-// CHECK-CC1: protocolClassMethod : 0
+// CHECK-CC1: categoryClassMethod
+// CHECK-CC1: classMethod1:withKeyword:
+// CHECK-CC1: classMethod2
+// CHECK-CC1: new
+// CHECK-CC1: protocolClassMethod
 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:24:8 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s
-// CHECK-CC2: categoryInstanceMethod : 0
-// CHECK-CC2: instanceMethod1 : 0
-// CHECK-CC2: protocolInstanceMethod : 0
+// CHECK-CC2: categoryInstanceMethod
+// CHECK-CC2: instanceMethod1
+// CHECK-CC2: protocolInstanceMethod

Modified: cfe/trunk/test/CodeCompletion/operator.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeCompletion/operator.cpp?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/test/CodeCompletion/operator.cpp (original)
+++ cfe/trunk/test/CodeCompletion/operator.cpp Wed Jan 13 17:24:38 2010
@@ -9,9 +9,9 @@
   
   operator
   // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:10:11 %s -o - | FileCheck -check-prefix=CC1 %s
-  // CHECK-CC1: Float : 0
-  // CHECK-CC1: + : 0
-  // CHECK-CC1: short : 0
-  // CHECK-CC1: Integer : 2
-  // CHECK-CC1: T : 2
-  // CHECK-CC1: N : 6
+  // CHECK-CC1: +
+  // CHECK-CC1: Float
+  // CHECK-CC1: Integer
+  // CHECK-CC1: N
+  // CHECK-CC1: short
+  // CHECK-CC1: T

Modified: cfe/trunk/test/CodeCompletion/ordinary-name.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeCompletion/ordinary-name.c?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/test/CodeCompletion/ordinary-name.c (original)
+++ cfe/trunk/test/CodeCompletion/ordinary-name.c Wed Jan 13 17:24:38 2010
@@ -5,7 +5,6 @@
 void foo() {
   int y;
   // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:6:9 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s
-  // CHECK-CC1: y : 0
-  // CHECK-CC1: foo : 2
-  // CHECK-NOT-CC1: y : 2
-  // CHECK-CC1-NEXT: TYPEDEF : 2
+  // CHECK-CC1: foo
+  // CHECK-CC1: y
+  // CHECK-CC1: TYPEDEF

Modified: cfe/trunk/test/CodeCompletion/ordinary-name.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeCompletion/ordinary-name.cpp?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/test/CodeCompletion/ordinary-name.cpp (original)
+++ cfe/trunk/test/CodeCompletion/ordinary-name.cpp Wed Jan 13 17:24:38 2010
@@ -5,166 +5,167 @@
 void foo() {
   int y = 17;
   // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:6:14 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s
-  // CHECK-CC1: COMPLETION: y : 0 : [#int#]y
-  // CHECK-CC1-NEXT: COMPLETION: foo : 2 : [#void#]foo()
-  // CHECK-CC1-NEXT: COMPLETION: t : 2 : t
-  // CHECK-CC1-NEXT: COMPLETION: TYPEDEF : 2 : TYPEDEF
-  // CHECK-CC1-NEXT: COMPLETION: X : 2 : X
-  // CHECK-CC1-NOT: x
-  // CHECK-CC1-NEXT: COMPLETION: z : 2 : [#void#]z(<#int#>)
-  // CHECK-CC1-NEXT: COMPLETION: bool : 3
-  // CHECK-CC1-NEXT: COMPLETION: char : 3
-  // CHECK-CC1-NEXT: COMPLETION: class : 3
-  // CHECK-CC1-NEXT: COMPLETION: const : 3
-  // CHECK-CC1-NEXT: COMPLETION: Pattern : 3 : const_cast<<#type-id#>>(<#expression#>)
-  // CHECK-CC1-NEXT: COMPLETION: Pattern : 3 : delete <#expression#>
-  // CHECK-CC1-NEXT: COMPLETION: Pattern : 3 : delete[] <#expression#>
-  // CHECK-CC1-NEXT: COMPLETION: Pattern : 3 : do{<#statements#>
-  // CHECK-CC1: COMPLETION: double : 3
-  // CHECK-CC1-NEXT: COMPLETION: Pattern : 3 : dynamic_cast<<#type-id#>>(<#expression#>)
-  // CHECK-CC1-NEXT: COMPLETION: enum : 3
-  // CHECK-CC1-NEXT: COMPLETION: extern : 3
-  // CHECK-CC1-NEXT: COMPLETION: false : 3
-  // CHECK-CC1-NEXT: COMPLETION: float : 3
-  // CHECK-CC1-NEXT: COMPLETION: Pattern : 3 : for(<#init-statement#>;<#condition#>;<#inc-expression#>){<#statements#>
-  // CHECK-CC1: COMPLETION: Pattern : 3 : goto <#identifier#>;
-  // CHECK-CC1-NEXT: COMPLETION: Pattern : 3 : if(<#condition#>){<#statements#>
-  // CHECK-CC1: COMPLETION: int : 3
-  // CHECK-CC1-NEXT: COMPLETION: long : 3
-  // CHECK-CC1-NEXT: COMPLETION: Pattern : 3 : new <#type-id#>(<#expressions#>)
-  // CHECK-CC1-NEXT: COMPLETION: Pattern : 3 : new <#type-id#>[<#size#>](<#expressions#>)
-  // CHECK-CC1-NEXT: COMPLETION: operator : 3
-  // CHECK-CC1-NEXT: COMPLETION: Pattern : 3 : reinterpret_cast<<#type-id#>>(<#expression#>)
-  // CHECK-CC1-NEXT: COMPLETION: Pattern : 3 : return;
-  // CHECK-CC1-NEXT: COMPLETION: short : 3
-  // CHECK-CC1-NEXT: COMPLETION: signed : 3
-  // CHECK-CC1-NEXT: COMPLETION: Pattern : 3 : sizeof(<#expression-or-type#>)
-  // CHECK-CC1-NEXT: COMPLETION: static : 3
-  // CHECK-CC1-NEXT: COMPLETION: Pattern : 3 : static_cast<<#type-id#>>(<#expression#>)
-  // CHECK-CC1-NEXT: COMPLETION: struct : 3
-  // CHECK-CC1-NEXT: COMPLETION: Pattern : 3 : switch(<#condition#>){
-  // CHECK-CC1: COMPLETION: Pattern : 3 : throw <#expression#>
-  // CHECK-CC1-NEXT: COMPLETION: true : 3
-  // CHECK-CC1-NEXT: COMPLETION: Pattern : 3 : try{<#statements#>
-  // CHECK-CC1: COMPLETION: typedef : 3
-  // CHECK-CC1-NEXT: COMPLETION: Pattern : 3 : typeid(<#expression-or-type#>)
-  // CHECK-CC1-NEXT: COMPLETION: Pattern : 3 : typename <#qualified-id#>
-  // CHECK-CC1-NEXT: COMPLETION: Pattern : 3 : typeof(<#expression-or-type#>)
-  // CHECK-CC1-NEXT: COMPLETION: union : 3
-  // CHECK-CC1-NEXT: COMPLETION: unsigned : 3
-  // CHECK-CC1-NEXT: COMPLETION: Pattern : 3 : using namespace <#identifier#>;
-  // CHECK-CC1-NEXT: COMPLETION: void : 3
-  // CHECK-CC1-NEXT: COMPLETION: volatile : 3
-  // CHECK-CC1-NEXT: COMPLETION: wchar_t : 3
-  // CHECK-CC1-NEXT: COMPLETION: Pattern : 3 : while(<#condition#>){<#statements#>
+  // CHECK-CC1: COMPLETION: bool
+  // CHECK-CC1-NEXT: COMPLETION: char
+  // CHECK-CC1-NEXT: COMPLETION: class
+  // CHECK-CC1-NEXT: COMPLETION: const
+  // CHECK-CC1-NEXT: COMPLETION: Pattern : const_cast<<#type-id#>>(<#expression#>)
+  // CHECK-CC1: COMPLETION: Pattern : delete <#expression#>
+  // CHECK-CC1-NEXT: COMPLETION: Pattern : delete[] <#expression#>
+  // CHECK-CC1-NEXT: COMPLETION: Pattern : do{<#statements#>
+  // CHECK-CC1: COMPLETION: double
+  // CHECK-CC1-NEXT: COMPLETION: Pattern : dynamic_cast<<#type-id#>>(<#expression#>)
+  // CHECK-CC1-NEXT: COMPLETION: enum
+  // CHECK-CC1-NEXT: COMPLETION: extern
+  // CHECK-CC1-NEXT: COMPLETION: false
+  // CHECK-CC1-NEXT: COMPLETION: float
+  // CHECK-CC1-NEXT: COMPLETION: foo : [#void#]foo()
+  // CHECK-CC1-NEXT: COMPLETION: Pattern : for(<#init-statement#>;<#condition#>;<#inc-expression#>){<#statements#>
+  // CHECK-CC1: COMPLETION: Pattern : goto <#identifier#>;
+  // CHECK-CC1-NEXT: COMPLETION: Pattern : if(<#condition#>){<#statements#>
+  // CHECK-CC1: COMPLETION: int
+  // CHECK-CC1-NEXT: COMPLETION: long
+  // CHECK-CC1-NEXT: COMPLETION: Pattern : new <#type-id#>(<#expressions#>)
+  // CHECK-CC1-NEXT: COMPLETION: Pattern : new <#type-id#>[<#size#>](<#expressions#>)
+  // CHECK-CC1-NEXT: COMPLETION: operator
+  // CHECK-CC1-NEXT: COMPLETION: Pattern : reinterpret_cast<<#type-id#>>(<#expression#>)
+  // CHECK-CC1-NEXT: COMPLETION: Pattern : return;
+  // CHECK-CC1-NEXT: COMPLETION: short
+  // CHECK-CC1-NEXT: COMPLETION: signed
+  // CHECK-CC1-NEXT: COMPLETION: Pattern : sizeof(<#expression-or-type#>)
+  // CHECK-CC1-NEXT: COMPLETION: static
+  // CHECK-CC1-NEXT: COMPLETION: Pattern : static_cast<<#type-id#>>(<#expression#>)
+  // CHECK-CC1-NEXT: COMPLETION: struct
+  // CHECK-CC1-NEXT: COMPLETION: Pattern : switch(<#condition#>){
+  // CHECK-CC1: COMPLETION: t : t
+  // CHECK-CC1-NEXT: COMPLETION: Pattern : throw <#expression#>
+  // CHECK-CC1-NEXT: COMPLETION: true
+  // CHECK-CC1-NEXT: COMPLETION: Pattern : try{<#statements#>
+  // CHECK-CC1: COMPLETION: TYPEDEF : TYPEDEF
+  // CHECK-CC1-NEXT: COMPLETION: typedef
+  // CHECK-CC1-NEXT: COMPLETION: Pattern : typeid(<#expression-or-type#>)
+  // CHECK-CC1-NEXT: COMPLETION: Pattern : typename <#qualified-id#>
+  // CHECK-CC1-NEXT: COMPLETION: Pattern : typeof(<#expression-or-type#>)
+  // CHECK-CC1-NEXT: COMPLETION: union
+  // CHECK-CC1-NEXT: COMPLETION: unsigned
+  // CHECK-CC1-NEXT: COMPLETION: Pattern : using namespace <#identifier#>;
+  // CHECK-CC1-NEXT: COMPLETION: void
+  // CHECK-CC1-NEXT: COMPLETION: volatile
+  // CHECK-CC1-NEXT: COMPLETION: wchar_t
+  // CHECK-CC1-NEXT: COMPLETION: Pattern : while(<#condition#>){<#statements#>
+  // CHECK-CC1: COMPLETION: X : X
+  // CHECK-CC1-NEXT: COMPLETION: y : [#int#]y
+  // CHECK-CC1-NEXT: COMPLETION: z : [#void#]z(<#int#>)
+
   // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:4:1 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s
-  // CHECK-CC2: COMPLETION: t : 1 : t
-  // CHECK-CC2-NEXT: COMPLETION: TYPEDEF : 1 : TYPEDEF
-  // CHECK-CC2-NEXT: COMPLETION: X : 1 : X
-  // CHECK-CC2-NOT: COMPLETION: z
-  // CHECK-CC2-NEXT: COMPLETION: Pattern : 2 : asm(<#string-literal#>);
-  // CHECK-CC2-NEXT: COMPLETION: bool : 2
-  // CHECK-CC2-NEXT: COMPLETION: char : 2
-  // CHECK-CC2-NEXT: COMPLETION: class : 2
-  // CHECK-CC2-NEXT: COMPLETION: const : 2
-  // CHECK-CC2-NEXT: COMPLETION: double : 2
-  // CHECK-CC2-NEXT: COMPLETION: enum : 2
-  // CHECK-CC2-NEXT: COMPLETION: extern : 2
-  // CHECK-CC2-NEXT: COMPLETION: float : 2
-  // CHECK-CC2-NEXT: COMPLETION: inline : 2
-  // CHECK-CC2-NEXT: COMPLETION: int : 2
-  // CHECK-CC2-NEXT: COMPLETION: long : 2
-  // CHECK-CC2-NEXT: COMPLETION: Pattern : 2 : namespace <#identifier#>{<#declarations#>
-  // CHECK-CC2: COMPLETION: Pattern : 2 : namespace <#identifier#> = <#identifier#>;
-  // CHECK-CC2-NEXT: COMPLETION: operator : 2
-  // CHECK-CC2-NEXT: COMPLETION: short : 2
-  // CHECK-CC2-NEXT: COMPLETION: signed : 2
-  // CHECK-CC2-NEXT: COMPLETION: static : 2
-  // CHECK-CC2-NEXT: COMPLETION: struct : 2
-  // CHECK-CC2-NEXT: COMPLETION: Pattern : 2 : template <#declaration#>;
-  // CHECK-CC2-NEXT: COMPLETION: Pattern : 2 : template<<#parameters#>>
-  // CHECK-CC2-NEXT: COMPLETION: typedef : 2
-  // CHECK-CC2-NEXT: COMPLETION: Pattern : 2 : typename <#qualified-id#>
-  // CHECK-CC2-NEXT: COMPLETION: Pattern : 2 : typeof(<#expression-or-type#>)
-  // CHECK-CC2-NEXT: COMPLETION: union : 2
-  // CHECK-CC2-NEXT: COMPLETION: unsigned : 2
-  // CHECK-CC2-NEXT: COMPLETION: Pattern : 2 : using namespace <#identifier#>;
-  // CHECK-CC2-NEXT: COMPLETION: Pattern : 2 : using <#qualified-id#>;
-  // CHECK-CC2-NEXT: COMPLETION: void : 2
-  // CHECK-CC2-NEXT: COMPLETION: volatile : 2
-  // CHECK-CC2-NEXT: COMPLETION: wchar_t : 2
+  // CHECK-CC2: COMPLETION: Pattern : asm(<#string-literal#>);
+  // CHECK-CC2-NEXT: COMPLETION: bool
+  // CHECK-CC2-NEXT: COMPLETION: char
+  // CHECK-CC2-NEXT: COMPLETION: class
+  // CHECK-CC2-NEXT: COMPLETION: const
+  // CHECK-CC2-NEXT: COMPLETION: double
+  // CHECK-CC2-NEXT: COMPLETION: enum
+  // CHECK-CC2-NEXT: COMPLETION: extern
+  // CHECK-CC2-NEXT: COMPLETION: float
+  // CHECK-CC2-NEXT: COMPLETION: inline
+  // CHECK-CC2-NEXT: COMPLETION: int
+  // CHECK-CC2-NEXT: COMPLETION: long
+  // CHECK-CC2-NEXT: COMPLETION: Pattern : namespace <#identifier#>{<#declarations#>
+  // CHECK-CC2: COMPLETION: Pattern : namespace <#identifier#> = <#identifier#>;
+  // CHECK-CC2-NEXT: COMPLETION: operator
+  // CHECK-CC2-NEXT: COMPLETION: short
+  // CHECK-CC2-NEXT: COMPLETION: signed
+  // CHECK-CC2-NEXT: COMPLETION: static
+  // CHECK-CC2-NEXT: COMPLETION: struct
+  // CHECK-CC2-NEXT: COMPLETION: t : t
+  // CHECK-CC2-NEXT: COMPLETION: Pattern : template <#declaration#>;
+  // CHECK-CC2-NEXT: COMPLETION: Pattern : template<<#parameters#>>
+  // CHECK-CC2-NEXT: COMPLETION: TYPEDEF : TYPEDEF
+  // CHECK-CC2-NEXT: COMPLETION: typedef
+  // CHECK-CC2-NEXT: COMPLETION: Pattern : typename <#qualified-id#>
+  // CHECK-CC2-NEXT: COMPLETION: Pattern : typeof(<#expression-or-type#>)
+  // CHECK-CC2-NEXT: COMPLETION: union
+  // CHECK-CC2-NEXT: COMPLETION: unsigned
+  // CHECK-CC2-NEXT: COMPLETION: Pattern : using namespace <#identifier#>;
+  // CHECK-CC2-NEXT: COMPLETION: Pattern : using <#qualified-id#>;
+  // CHECK-CC2-NEXT: COMPLETION: void
+  // CHECK-CC2-NEXT: COMPLETION: volatile
+  // CHECK-CC2-NEXT: COMPLETION: wchar_t
+  // CHECK-CC2-NEXT: COMPLETION: X : X
+
   // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:1:19 %s -o - | FileCheck -check-prefix=CHECK-CC3 %s
-  // CHECK-CC3: COMPLETION: X : 1 : X
-  // CHECK-CC3-NEXT: COMPLETION: bool : 4
-  // CHECK-CC3-NEXT: COMPLETION: char : 4
-  // CHECK-CC3-NEXT: COMPLETION: class : 4
-  // CHECK-CC3-NEXT: COMPLETION: const : 4
-  // CHECK-CC3-NEXT: COMPLETION: double : 4
-  // CHECK-CC3-NEXT: COMPLETION: enum : 4
-  // CHECK-CC3-NEXT: COMPLETION: explicit : 4
-  // CHECK-CC3-NEXT: COMPLETION: extern : 4
-  // CHECK-CC3-NEXT: COMPLETION: float : 4
-  // CHECK-CC3-NEXT: COMPLETION: friend : 4
-  // CHECK-CC3-NEXT: COMPLETION: inline : 4
-  // CHECK-CC3-NEXT: COMPLETION: int : 4
-  // CHECK-CC3-NEXT: COMPLETION: long : 4
-  // CHECK-CC3-NEXT: COMPLETION: mutable : 4
-  // CHECK-CC3-NEXT: COMPLETION: operator : 4
-  // CHECK-CC3-NEXT: COMPLETION: Pattern : 4 : private: 
-  // CHECK-CC3-NEXT: COMPLETION: Pattern : 4 : protected: 
-  // CHECK-CC3-NEXT: COMPLETION: Pattern : 4 : public: 
-  // CHECK-CC3-NEXT: COMPLETION: short : 4
-  // CHECK-CC3-NEXT: COMPLETION: signed : 4
-  // CHECK-CC3-NEXT: COMPLETION: static : 4
-  // CHECK-CC3-NEXT: COMPLETION: struct : 4
-  // CHECK-CC3-NEXT: COMPLETION: Pattern : 4 : template<<#parameters#>>
-  // CHECK-CC3-NEXT: COMPLETION: typedef : 4
-  // CHECK-CC3-NEXT: COMPLETION: Pattern : 4 : typename <#qualified-id#>
-  // CHECK-CC3-NEXT: COMPLETION: Pattern : 4 : typeof(<#expression-or-type#>)
-  // CHECK-CC3-NEXT: COMPLETION: union : 4
-  // CHECK-CC3-NEXT: COMPLETION: unsigned : 4
-  // CHECK-CC3-NEXT: COMPLETION: Pattern : 4 : using <#qualified-id#>;
-  // CHECK-CC3-NEXT: COMPLETION: virtual : 4
-  // CHECK-CC3-NEXT: COMPLETION: void : 4
-  // CHECK-CC3-NEXT: COMPLETION: volatile : 4
-  // CHECK-CC3-NEXT: COMPLETION: wchar_t : 4
+  // CHECK-CC3: COMPLETION: bool
+  // CHECK-CC3-NEXT: COMPLETION: char
+  // CHECK-CC3-NEXT: COMPLETION: class
+  // CHECK-CC3-NEXT: COMPLETION: const
+  // CHECK-CC3-NEXT: COMPLETION: double
+  // CHECK-CC3-NEXT: COMPLETION: enum
+  // CHECK-CC3-NEXT: COMPLETION: explicit
+  // CHECK-CC3-NEXT: COMPLETION: extern
+  // CHECK-CC3-NEXT: COMPLETION: float
+  // CHECK-CC3-NEXT: COMPLETION: friend
+  // CHECK-CC3-NEXT: COMPLETION: inline
+  // CHECK-CC3-NEXT: COMPLETION: int
+  // CHECK-CC3-NEXT: COMPLETION: long
+  // CHECK-CC3-NEXT: COMPLETION: mutable
+  // CHECK-CC3-NEXT: COMPLETION: operator
+  // CHECK-CC3-NEXT: COMPLETION: Pattern : private: 
+  // CHECK-CC3-NEXT: COMPLETION: Pattern : protected: 
+  // CHECK-CC3-NEXT: COMPLETION: Pattern : public: 
+  // CHECK-CC3-NEXT: COMPLETION: short
+  // CHECK-CC3-NEXT: COMPLETION: signed
+  // CHECK-CC3-NEXT: COMPLETION: static
+  // CHECK-CC3-NEXT: COMPLETION: struct
+  // CHECK-CC3-NEXT: COMPLETION: Pattern : template<<#parameters#>>
+  // CHECK-CC3-NEXT: COMPLETION: typedef
+  // CHECK-CC3-NEXT: COMPLETION: Pattern : typename <#qualified-id#>
+  // CHECK-CC3-NEXT: COMPLETION: Pattern : typeof(<#expression-or-type#>)
+  // CHECK-CC3-NEXT: COMPLETION: union
+  // CHECK-CC3-NEXT: COMPLETION: unsigned
+  // CHECK-CC3-NEXT: COMPLETION: Pattern : using <#qualified-id#>;
+  // CHECK-CC3-NEXT: COMPLETION: virtual
+  // CHECK-CC3-NEXT: COMPLETION: void
+  // CHECK-CC3-NEXT: COMPLETION: volatile
+  // CHECK-CC3-NEXT: COMPLETION: wchar_t
+  // CHECK-CC3-NEXT: COMPLETION: X : X
+
   // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:6:11 %s -o - | FileCheck -check-prefix=CHECK-CC4 %s
-  // CHECK-CC4: COMPLETION: y : 0 : [#int#]y
-  // CHECK-CC4-NEXT: COMPLETION: foo : 2 : [#void#]foo()
-  // CHECK-CC4-NEXT: COMPLETION: t : 2 : t
-  // CHECK-CC4-NEXT: COMPLETION: TYPEDEF : 2 : TYPEDEF
-  // CHECK-CC4-NEXT: COMPLETION: X : 2 : X
-  // CHECK-CC4-NEXT: COMPLETION: z : 2 : [#void#]z(<#int#>)
-  // CHECK-CC4-NEXT: COMPLETION: bool : 3
-  // CHECK-CC4-NEXT: COMPLETION: char : 3
-  // CHECK-CC4-NEXT: COMPLETION: class : 3
-  // CHECK-CC4-NEXT: COMPLETION: const : 3
-  // CHECK-CC4-NEXT: COMPLETION: Pattern : 3 : const_cast<<#type-id#>>(<#expression#>)
-  // CHECK-CC4-NEXT: COMPLETION: Pattern : 3 : delete <#expression#>
-  // CHECK-CC4-NEXT: COMPLETION: Pattern : 3 : delete[] <#expression#>
-  // CHECK-CC4-NEXT: COMPLETION: double : 3
-  // CHECK-CC4-NEXT: COMPLETION: Pattern : 3 : dynamic_cast<<#type-id#>>(<#expression#>)
-  // CHECK-CC4-NEXT: COMPLETION: enum : 3
-  // CHECK-CC4-NEXT: COMPLETION: false : 3
-  // CHECK-CC4-NEXT: COMPLETION: float : 3
-  // CHECK-CC4-NEXT: COMPLETION: int : 3
-  // CHECK-CC4-NEXT: COMPLETION: long : 3
-  // CHECK-CC4-NEXT: COMPLETION: Pattern : 3 : new <#type-id#>(<#expressions#>)
-  // CHECK-CC4-NEXT: COMPLETION: Pattern : 3 : new <#type-id#>[<#size#>](<#expressions#>)
-  // CHECK-CC4-NEXT: COMPLETION: operator : 3
-  // CHECK-CC4-NEXT: COMPLETION: Pattern : 3 : reinterpret_cast<<#type-id#>>(<#expression#>)
-  // CHECK-CC4-NEXT: COMPLETION: short : 3
-  // CHECK-CC4-NEXT: COMPLETION: signed : 3
-  // CHECK-CC4-NEXT: COMPLETION: Pattern : 3 : sizeof(<#expression-or-type#>)
-  // CHECK-CC4-NEXT: COMPLETION: Pattern : 3 : static_cast<<#type-id#>>(<#expression#>)
-  // CHECK-CC4-NEXT: COMPLETION: struct : 3
-  // CHECK-CC4-NEXT: COMPLETION: Pattern : 3 : throw <#expression#>
-  // CHECK-CC4-NEXT: COMPLETION: true : 3
-  // CHECK-CC4-NEXT: COMPLETION: Pattern : 3 : typeid(<#expression-or-type#>)
-  // CHECK-CC4-NEXT: COMPLETION: Pattern : 3 : typename <#qualified-id#>
-  // CHECK-CC4-NEXT: COMPLETION: Pattern : 3 : typeof(<#expression-or-type#>)
-  // CHECK-CC4-NEXT: COMPLETION: union : 3
-  // CHECK-CC4-NEXT: COMPLETION: unsigned : 3
-  // CHECK-CC4-NEXT: COMPLETION: void : 3
-  // CHECK-CC4-NEXT: COMPLETION: volatile : 3
-  // CHECK-CC4-NEXT: COMPLETION: wchar_t : 3
+  // CHECK-CC4: COMPLETION: bool
+  // CHECK-CC4-NEXT: COMPLETION: char
+  // CHECK-CC4-NEXT: COMPLETION: class
+  // CHECK-CC4-NEXT: COMPLETION: const
+  // CHECK-CC4-NEXT: COMPLETION: Pattern : const_cast<<#type-id#>>(<#expression#>)
+  // CHECK-CC4-NEXT: COMPLETION: Pattern : delete <#expression#>
+  // CHECK-CC4-NEXT: COMPLETION: Pattern : delete[] <#expression#>
+  // CHECK-CC4-NEXT: COMPLETION: double
+  // CHECK-CC4-NEXT: COMPLETION: Pattern : dynamic_cast<<#type-id#>>(<#expression#>)
+  // CHECK-CC4-NEXT: COMPLETION: enum
+  // CHECK-CC4-NEXT: COMPLETION: false
+  // CHECK-CC4-NEXT: COMPLETION: float
+  // CHECK-CC4-NEXT: COMPLETION: foo : [#void#]foo()
+  // CHECK-CC4-NEXT: COMPLETION: int
+  // CHECK-CC4-NEXT: COMPLETION: long
+  // CHECK-CC4-NEXT: COMPLETION: Pattern : new <#type-id#>(<#expressions#>)
+  // CHECK-CC4-NEXT: COMPLETION: Pattern : new <#type-id#>[<#size#>](<#expressions#>)
+  // CHECK-CC4-NEXT: COMPLETION: operator
+  // CHECK-CC4-NEXT: COMPLETION: Pattern : reinterpret_cast<<#type-id#>>(<#expression#>)
+  // CHECK-CC4-NEXT: COMPLETION: short
+  // CHECK-CC4-NEXT: COMPLETION: signed
+  // CHECK-CC4-NEXT: COMPLETION: Pattern : sizeof(<#expression-or-type#>)
+  // CHECK-CC4-NEXT: COMPLETION: Pattern : static_cast<<#type-id#>>(<#expression#>)
+  // CHECK-CC4-NEXT: COMPLETION: struct
+  // CHECK-CC4-NEXT: COMPLETION: t : t
+  // CHECK-CC4-NEXT: COMPLETION: Pattern : throw <#expression#>
+  // CHECK-CC4-NEXT: COMPLETION: true
+  // CHECK-CC4-NEXT: COMPLETION: TYPEDEF : TYPEDEF
+  // CHECK-CC4-NEXT: COMPLETION: Pattern : typeid(<#expression-or-type#>)
+  // CHECK-CC4-NEXT: COMPLETION: Pattern : typename <#qualified-id#>
+  // CHECK-CC4-NEXT: COMPLETION: Pattern : typeof(<#expression-or-type#>)
+  // CHECK-CC4-NEXT: COMPLETION: union
+  // CHECK-CC4-NEXT: COMPLETION: unsigned
+  // CHECK-CC4-NEXT: COMPLETION: void
+  // CHECK-CC4-NEXT: COMPLETION: volatile
+  // CHECK-CC4-NEXT: COMPLETION: wchar_t
+  // CHECK-CC4-NEXT: COMPLETION: X : X
+  // CHECK-CC4-NEXT: COMPLETION: y : [#int#]y
+  // CHECK-CC4-NEXT: COMPLETION: z : [#void#]z(<#int#>)

Modified: cfe/trunk/test/CodeCompletion/tag.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeCompletion/tag.c?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/test/CodeCompletion/tag.c (original)
+++ cfe/trunk/test/CodeCompletion/tag.c Wed Jan 13 17:24:38 2010
@@ -8,5 +8,5 @@
   enum X { x };
   enum
   // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:9:7 %s -o - | FileCheck -check-prefix=CC1 %s
-  // CHECK-CC1: X : 0
-  // CHECK-CC1: Y : 2
+  // CHECK-CC1: X
+  // CHECK-CC1: Y

Modified: cfe/trunk/test/CodeCompletion/tag.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeCompletion/tag.cpp?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/test/CodeCompletion/tag.cpp (original)
+++ cfe/trunk/test/CodeCompletion/tag.cpp Wed Jan 13 17:24:38 2010
@@ -16,10 +16,12 @@
   void test() {
     class
     // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:17:10 %s -o - | FileCheck -check-prefix=CC1 %s
-    // CHECK-CC1: Y : 2
-    // CHECK-CC1: Z : 2
-    // CHECK-CC1: A : 4
-    // CHECK-CC1: X : 4
-    // CHECK-CC1: Y : 4
-    // CHECK-CC1: M : 9 : M::
-    // CHECK-CC1: N : 9 : N::
+    // FIXME: the redundant Y is really annoying... it needs qualification to 
+    // actually be useful. Here, it just looks redundant :(
+    // CHECK-CC1: A
+    // CHECK-CC1: M : M::
+    // CHECK-CC1: N : N::
+    // CHECK-CC1: X
+    // CHECK-CC1: Y
+    // CHECK-CC1: Y
+    // CHECK-CC1: Z

Modified: cfe/trunk/test/CodeCompletion/truncation.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeCompletion/truncation.c?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/test/CodeCompletion/truncation.c (original)
+++ cfe/trunk/test/CodeCompletion/truncation.c Wed Jan 13 17:24:38 2010
@@ -3,9 +3,9 @@
 struct 
 
 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s.h:4:8 -o - %s | FileCheck -check-prefix=CC1 %s
-// CHECK-CC1: X : 1
-// CHECK-CC1-NEXT: Y : 1
+// CHECK-CC1: X
+// CHECK-CC1-NEXT: Y
 // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:3:8 -o - %s | FileCheck -check-prefix=CC2 %s
-// CHECK-CC2: X : 1
-// CHECK-CC2: Xa : 1
-// CHECK-CC2: Y : 1
+// CHECK-CC2: X
+// CHECK-CC2: Xa
+// CHECK-CC2: Y

Modified: cfe/trunk/test/CodeCompletion/using-namespace.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeCompletion/using-namespace.cpp?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/test/CodeCompletion/using-namespace.cpp (original)
+++ cfe/trunk/test/CodeCompletion/using-namespace.cpp Wed Jan 13 17:24:38 2010
@@ -13,8 +13,8 @@
   void foo() {
     using namespace
     // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:14:20 %s -o - | FileCheck -check-prefix=CC1 %s
-    // CHECK-CC1: I1 : 2
-    // CHECK-CC1: I4 : 2
-    // CHECK-CC1: I5 : 2
-    // CHECK-CC1: N2 : 4
-    // CHECK-CC1-NEXT: N4 : 4
+    // CHECK-CC1: I1
+    // CHECK-CC1: I4
+    // CHECK-CC1: I5
+    // CHECK-CC1: N2
+    // CHECK-CC1-NEXT: N4

Modified: cfe/trunk/test/CodeCompletion/using.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeCompletion/using.cpp?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/test/CodeCompletion/using.cpp (original)
+++ cfe/trunk/test/CodeCompletion/using.cpp Wed Jan 13 17:24:38 2010
@@ -15,10 +15,10 @@
     
     using
     // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:16:10 %s -o - | FileCheck -check-prefix=CC1 %s
-    // CHECK-CC1: I1 : 2
-    // CHECK-CC1: I4 : 2
-    // CHECK-CC1: I5 : 2
-    // CHECK-CC1: N2 : 4
-    // CHECK-CC1: N3 : 4
-    // CHECK-CC1-NEXT: N4 : 4
+    // CHECK-CC1: I1
+    // CHECK-CC1: I4
+    // CHECK-CC1: I5
+    // CHECK-CC1: N2
+    // CHECK-CC1: N3
+    // CHECK-CC1-NEXT: N4
 

Modified: cfe/trunk/test/Index/code-completion.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/code-completion.cpp?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/test/Index/code-completion.cpp (original)
+++ cfe/trunk/test/Index/code-completion.cpp Wed Jan 13 17:24:38 2010
@@ -34,20 +34,20 @@
 }
 
 // CHECK-MEMBER: FieldDecl:{ResultType double}{TypedText member}
+// CHECK-MEMBER: FieldDecl:{ResultType int}{Text X::}{TypedText member}
+// CHECK-MEMBER: FieldDecl:{ResultType float}{Text Y::}{TypedText member}
 // CHECK-MEMBER: FunctionDecl:{ResultType void}{Informative Y::}{TypedText memfunc}{LeftParen (}{Optional {Placeholder int i}}{RightParen )}
-// CHECK-MEMBER: EnumConstantDecl:{ResultType enum X::E}{Informative E::}{TypedText Val1}
-// CHECK-MEMBER: FunctionDecl:{ResultType void}{Informative X::}{TypedText ~X}{LeftParen (}{RightParen )}
-// CHECK-MEMBER: FunctionDecl:{ResultType void}{Informative Y::}{TypedText ~Y}{LeftParen (}{RightParen )}
-// CHECK-MEMBER: FunctionDecl:{ResultType void}{TypedText ~Z}{LeftParen (}{RightParen )}
 // CHECK-MEMBER: FunctionDecl:{ResultType int}{TypedText operator int}{LeftParen (}{RightParen )}{Informative  const}
 // CHECK-MEMBER: FunctionDecl:{ResultType struct Z &}{TypedText operator=}{LeftParen (}{Placeholder struct Z const &}{RightParen )}
-// CHECK-MEMBER: FieldDecl:{ResultType int}{Text X::}{TypedText member}
-// CHECK-MEMBER: FieldDecl:{ResultType float}{Text Y::}{TypedText member}
 // CHECK-MEMBER: FunctionDecl:{ResultType struct X &}{Text X::}{TypedText operator=}{LeftParen (}{Placeholder struct X const &}{RightParen )}
 // CHECK-MEMBER: FunctionDecl:{ResultType struct Y &}{Text Y::}{TypedText operator=}{LeftParen (}{Placeholder struct Y const &}{RightParen )}
+// CHECK-MEMBER: EnumConstantDecl:{ResultType enum X::E}{Informative E::}{TypedText Val1}
 // CHECK-MEMBER: StructDecl:{TypedText X}{Text ::}
 // CHECK-MEMBER: StructDecl:{TypedText Y}{Text ::}
 // CHECK-MEMBER: StructDecl:{TypedText Z}{Text ::}
+// CHECK-MEMBER: FunctionDecl:{ResultType void}{Informative X::}{TypedText ~X}{LeftParen (}{RightParen )}
+// CHECK-MEMBER: FunctionDecl:{ResultType void}{Informative Y::}{TypedText ~Y}{LeftParen (}{RightParen )}
+// CHECK-MEMBER: FunctionDecl:{ResultType void}{TypedText ~Z}{LeftParen (}{RightParen )}
 
 // CHECK-OVERLOAD: NotImplemented:{ResultType int &}{Text overloaded}{LeftParen (}{Text struct Z z}{Comma , }{CurrentParameter int second}{RightParen )}
 // CHECK-OVERLOAD: NotImplemented:{ResultType float &}{Text overloaded}{LeftParen (}{Text int i}{Comma , }{CurrentParameter long second}{RightParen )}

Modified: cfe/trunk/test/Index/complete-at-directives.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/complete-at-directives.m?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/test/Index/complete-at-directives.m (original)
+++ cfe/trunk/test/Index/complete-at-directives.m Wed Jan 13 17:24:38 2010
@@ -29,21 +29,21 @@
 // CHECK-CC4: NotImplemented:{TypedText @implementation}{HorizontalSpace  }{Placeholder class}
 // CHECK-CC4: NotImplemented:{TypedText @interface}{HorizontalSpace  }{Placeholder class}
 // CHECK-CC4: NotImplemented:{TypedText @protocol}{HorizontalSpace  }{Placeholder protocol}
+// CHECK-CC4: NotImplemented:{TypedText _Bool}
 // CHECK-CC4: TypedefDecl:{TypedText Class}
 // CHECK-CC4: TypedefDecl:{TypedText id}
 // CHECK-CC4: TypedefDecl:{TypedText SEL}
-// CHECK-CC4: NotImplemented:{TypedText _Bool}
 
 // RUN: c-index-test -code-completion-at=%s:3:1 %s | FileCheck -check-prefix=CHECK-CC5 %s
 // CHECK-CC5: {TypedText @end}
 // CHECK-CC5: {TypedText @optional}
 // CHECK-CC5: {TypedText @property}
 // CHECK-CC5: {TypedText @required}
+// CHECK-CC5: NotImplemented:{TypedText _Bool}
 // CHECK-CC5: TypedefDecl:{TypedText Class}
 // CHECK-CC5: TypedefDecl:{TypedText id}
 // CHECK-CC5: ObjCInterfaceDecl:{TypedText MyClass}
 // CHECK-CC5: TypedefDecl:{TypedText SEL}
-// CHECK-CC5: NotImplemented:{TypedText _Bool}
 
 // RUN: c-index-test -code-completion-at=%s:2:23 %s | FileCheck -check-prefix=CHECK-CC6 %s
 // CHECK-CC6: NotImplemented:{TypedText package}

Modified: cfe/trunk/test/Index/complete-at-exprstmt.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/complete-at-exprstmt.m?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/test/Index/complete-at-exprstmt.m (original)
+++ cfe/trunk/test/Index/complete-at-exprstmt.m Wed Jan 13 17:24:38 2010
@@ -21,16 +21,16 @@
 // CHECK-CC2: {TypedText protocol}{LeftParen (}{Placeholder protocol-name}{RightParen )}
 // CHECK-CC2: {TypedText selector}{LeftParen (}{Placeholder selector}{RightParen )}
 // RUN: c-index-test -code-completion-at=%s:9:3 %s | FileCheck -check-prefix=CHECK-CC3 %s
-// CHECK-CC3: NotImplemented:{ResultType SEL}{TypedText _cmd}
-// CHECK-CC3: ParmDecl:{ResultType int}{TypedText arg}
-// CHECK-CC3: NotImplemented:{ResultType MyClass *}{TypedText self}
+// CHECK-CC3: NotImplemented:{TypedText @encode}{LeftParen (}{Placeholder type-name}{RightParen )}
+// CHECK-CC3: NotImplemented:{TypedText @protocol}{LeftParen (}{Placeholder protocol-name}{RightParen )}
+// CHECK-CC3: NotImplemented:{TypedText @selector}{LeftParen (}{Placeholder selector}{RightParen )}
 // CHECK-CC3: NotImplemented:{TypedText @synchronized}{HorizontalSpace  }{LeftParen (}{Placeholder expression}{RightParen )}{LeftBrace {}{Placeholder statements}{RightBrace }}
 // CHECK-CC3: NotImplemented:{TypedText @throw}{HorizontalSpace  }{Placeholder expression}{SemiColon ;}
 // CHECK-CC3: NotImplemented:{TypedText @try}{LeftBrace {}{Placeholder statements}{RightBrace }}{Text @catch}{LeftParen (}{Placeholder parameter}{RightParen )}{LeftBrace {}{Placeholder statements}{RightBrace }}{Text @finally}{LeftBrace {}{Placeholder statements}{RightBrace }}
+// CHECK-CC3: NotImplemented:{ResultType SEL}{TypedText _cmd}
+// CHECK-CC3: ParmDecl:{ResultType int}{TypedText arg}
 // CHECK-CC3: TypedefDecl:{TypedText Class}
 // CHECK-CC3: TypedefDecl:{TypedText id}
 // CHECK-CC3: ObjCInterfaceDecl:{TypedText MyClass}
 // CHECK-CC3: TypedefDecl:{TypedText SEL}
-// CHECK-CC3: NotImplemented:{TypedText @encode}{LeftParen (}{Placeholder type-name}{RightParen )}
-// CHECK-CC3: NotImplemented:{TypedText @protocol}{LeftParen (}{Placeholder protocol-name}{RightParen )}
-// CHECK-CC3: NotImplemented:{TypedText @selector}{LeftParen (}{Placeholder selector}{RightParen )}
+// CHECK-CC3: NotImplemented:{ResultType MyClass *}{TypedText self}

Modified: cfe/trunk/test/Index/complete-objc-message.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/complete-objc-message.m?rev=93370&r1=93369&r2=93370&view=diff

==============================================================================
--- cfe/trunk/test/Index/complete-objc-message.m (original)
+++ cfe/trunk/test/Index/complete-objc-message.m Wed Jan 13 17:24:38 2010
@@ -142,7 +142,6 @@
 // CHECK-CC9: ObjCInstanceMethodDecl:{ResultType int}{Informative Method:}{Informative Arg1:}{TypedText OtherArg:}{Placeholder (id)obj}
 // RUN: c-index-test -code-completion-at=%s:61:11 %s | FileCheck -check-prefix=CHECK-CCA %s
 // CHECK-CCA: {ResultType SEL}{TypedText _cmd}
-// CHECK-CCA: {ResultType Class}{TypedText self}
 // CHECK-CCA: TypedefDecl:{TypedText Class}
 // CHECK-CCA: ObjCInterfaceDecl:{TypedText Foo}
 // CHECK-CCA: FunctionDecl:{ResultType void}{TypedText func}{LeftParen (}{RightParen )}
@@ -150,6 +149,7 @@
 // CHECK-CCA: ObjCInterfaceDecl:{TypedText MyClass}
 // CHECK-CCA: ObjCInterfaceDecl:{TypedText MySubClass}
 // CHECK-CCA: TypedefDecl:{TypedText SEL}
+// CHECK-CCA: {ResultType Class}{TypedText self}
 // CHECK-CCA: {TypedText super}
 // RUN: c-index-test -code-completion-at=%s:103:6 %s | FileCheck -check-prefix=CHECK-CCB %s
 // CHECK-CCB: ObjCInstanceMethodDecl:{ResultType int}{TypedText Method:}{Placeholder (int)i}{Placeholder , ...}





More information about the cfe-commits mailing list