[cfe-commits] r152977 - in /cfe/trunk: lib/Sema/CodeCompleteConsumer.cpp test/Index/complete-enums.c

Douglas Gregor dgregor at apple.com
Fri Mar 16 23:39:06 PDT 2012


Author: dgregor
Date: Sat Mar 17 01:39:06 2012
New Revision: 152977

URL: http://llvm.org/viewvc/llvm-project?rev=152977&view=rev
Log:
When determining the availability of an enum constant, also consider
the availability of the enumeration type itself. Fixes
<rdar://problem/10996386>.

Modified:
    cfe/trunk/lib/Sema/CodeCompleteConsumer.cpp
    cfe/trunk/test/Index/complete-enums.c

Modified: cfe/trunk/lib/Sema/CodeCompleteConsumer.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/CodeCompleteConsumer.cpp?rev=152977&r1=152976&r2=152977&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/CodeCompleteConsumer.cpp (original)
+++ cfe/trunk/lib/Sema/CodeCompleteConsumer.cpp Sat Mar 17 01:39:06 2012
@@ -400,11 +400,19 @@
   }
 }
 
+/// \brief Retrieve the effective availability of the given declaration.
+static AvailabilityResult getDeclAvailability(Decl *D) {
+  AvailabilityResult AR = D->getAvailability();
+  if (isa<EnumConstantDecl>(D))
+    AR = std::max(AR, cast<Decl>(D->getDeclContext())->getAvailability());
+  return AR;
+}
+
 void CodeCompletionResult::computeCursorKindAndAvailability(bool Accessible) {
   switch (Kind) {
-  case RK_Declaration:
+  case RK_Declaration: {
     // Set the availability based on attributes.
-    switch (Declaration->getAvailability()) {
+    switch (getDeclAvailability(Declaration)) {
     case AR_Available:
     case AR_NotYetIntroduced:
       Availability = CXAvailability_Available;      
@@ -436,6 +444,7 @@
         CursorKind = CXCursor_NotImplemented;
     }
     break;
+  }
 
   case RK_Macro:
     Availability = CXAvailability_Available;      

Modified: cfe/trunk/test/Index/complete-enums.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/complete-enums.c?rev=152977&r1=152976&r2=152977&view=diff
==============================================================================
--- cfe/trunk/test/Index/complete-enums.c (original)
+++ cfe/trunk/test/Index/complete-enums.c Sat Mar 17 01:39:06 2012
@@ -1,22 +1,22 @@
 // Note: the run lines follow their respective tests, since line/column
 // matter in this test.
 
-enum Color {
+enum __attribute__((deprecated)) Color {
   Color_Red = 17,
   Color_Green,
   Color_Blue
 };
 int Greeby();
-void f(Color color) {
+void f(enum Color color) {
   switch (color) {
   case Red:
   }
 }
 
 // RUN: c-index-test -code-completion-at=%s:11:1 %s | FileCheck -check-prefix=CHECK-CC1 %s
-// CHECK-CC1: EnumConstantDecl:{ResultType enum Color}{TypedText Color_Red}
+// CHECK-CC1: EnumConstantDecl:{ResultType enum Color}{TypedText Color_Red} (65) (deprecated)
 
 // RUN: c-index-test -code-completion-at=%s:12:8 %s | FileCheck -check-prefix=CHECK-CC2 %s
-// CHECK-CC2: EnumConstantDecl:{ResultType enum Color}{TypedText Color_Blue} (7)
-// CHECK-CC2-NEXT: EnumConstantDecl:{ResultType enum Color}{TypedText Color_Green} (7)
-// CHECK-CC2-NEXT: EnumConstantDecl:{ResultType enum Color}{TypedText Color_Red} (7)
+// CHECK-CC2: EnumConstantDecl:{ResultType enum Color}{TypedText Color_Blue} (7) (deprecated)
+// CHECK-CC2-NEXT: EnumConstantDecl:{ResultType enum Color}{TypedText Color_Green} (7) (deprecated)
+// CHECK-CC2-NEXT: EnumConstantDecl:{ResultType enum Color}{TypedText Color_Red} (7) (deprecated)





More information about the cfe-commits mailing list