[cfe-commits] r145264 - in /cfe/trunk: lib/Sema/SemaExpr.cpp test/Sema/attr-deprecated.c test/Sema/attr-unavailable-message.c test/SemaCXX/attr-deprecated.cpp

Fariborz Jahanian fjahanian at apple.com
Mon Nov 28 11:45:58 PST 2011


Author: fjahanian
Date: Mon Nov 28 13:45:58 2011
New Revision: 145264

URL: http://llvm.org/viewvc/llvm-project?rev=145264&view=rev
Log:
pinpoint name/location of deprecated/unavailable enumerator
whose enum has been made deprecated/unavailable in the warning.
// rdar://10201690

Modified:
    cfe/trunk/lib/Sema/SemaExpr.cpp
    cfe/trunk/test/Sema/attr-deprecated.c
    cfe/trunk/test/Sema/attr-unavailable-message.c
    cfe/trunk/test/SemaCXX/attr-deprecated.cpp

Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=145264&r1=145263&r2=145264&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Mon Nov 28 13:45:58 2011
@@ -68,6 +68,13 @@
   // See if this declaration is unavailable or deprecated.
   std::string Message;
   AvailabilityResult Result = D->getAvailability(&Message);
+  if (const EnumConstantDecl *ECD = dyn_cast<EnumConstantDecl>(D))
+    if (Result == AR_Available) {
+      const DeclContext *DC = ECD->getDeclContext();
+      if (const EnumDecl *TheEnumDecl = dyn_cast<EnumDecl>(DC))
+        Result = TheEnumDecl->getAvailability(&Message);
+    }
+  
   switch (Result) {
     case AR_Available:
     case AR_NotYetIntroduced:
@@ -158,7 +165,7 @@
       if (const EnumDecl *TheEnumDecl = dyn_cast<EnumDecl>(DC))
         DiagnoseAvailabilityOfDecl(*this,
                           const_cast< EnumDecl *>(TheEnumDecl), 
-                          Loc, UnknownObjCClass);
+                          D->getLocation(), UnknownObjCClass);
     }
   return false;
 }

Modified: cfe/trunk/test/Sema/attr-deprecated.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-deprecated.c?rev=145264&r1=145263&r2=145264&view=diff
==============================================================================
--- cfe/trunk/test/Sema/attr-deprecated.c (original)
+++ cfe/trunk/test/Sema/attr-deprecated.c Mon Nov 28 13:45:58 2011
@@ -109,7 +109,7 @@
 void test20() {
   enum Test20 f; // expected-warning {{'Test20' is deprecated}}
   f = test20_a; // expected-warning {{'test20_a' is deprecated}}
-  f = test20_b; // expected-warning {{'Test20' is deprecated}}
+  f = test20_b; // expected-warning {{'test20_b' is deprecated}}
 }
 
 char test21[__has_feature(attribute_deprecated_with_message) ? 1 : -1];

Modified: cfe/trunk/test/Sema/attr-unavailable-message.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-unavailable-message.c?rev=145264&r1=145263&r2=145264&view=diff
==============================================================================
--- cfe/trunk/test/Sema/attr-unavailable-message.c (original)
+++ cfe/trunk/test/Sema/attr-unavailable-message.c Mon Nov 28 13:45:58 2011
@@ -34,16 +34,16 @@
     c = 3
 }__attribute__((deprecated()));  
 
-enum fee { // expected-note 2 {{declaration has been explicitly marked unavailable here}}
-    r = 1,
+enum fee { // expected-note {{declaration has been explicitly marked unavailable here}}
+    r = 1, // expected-note {{declaration has been explicitly marked unavailable here}}
     s = 2,
     t = 3
 }__attribute__((unavailable()));  
 
 enum fee f() { // expected-error {{error: 'fee' is unavailable}}
-    int i = a; // expected-warning {{'foo' is deprecated }}
+    int i = a; // expected-warning {{'a' is deprecated }}
 
     i = b; // expected-warning {{'b' is deprecated}}
 
-    return r; // expected-error {{'fee' is unavailable}}
+    return r; // expected-error {{'r' is unavailable}}
 }

Modified: cfe/trunk/test/SemaCXX/attr-deprecated.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/attr-deprecated.cpp?rev=145264&r1=145263&r2=145264&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/attr-deprecated.cpp (original)
+++ cfe/trunk/test/SemaCXX/attr-deprecated.cpp Mon Nov 28 13:45:58 2011
@@ -198,7 +198,7 @@
   };
   void testA() {
     A x; // expected-warning {{'A' is deprecated}}
-    x = a0; // expected-warning {{'A' is deprecated}}
+    x = a0; // expected-warning {{'a0' is deprecated}}
   }
   
   enum B {
@@ -218,7 +218,7 @@
   };
   void testC() {
     C<int>::Enum x; // expected-warning {{'Enum' is deprecated}}
-    x = C<int>::c0; // expected-warning {{'Enum' is deprecated}}
+    x = C<int>::c0; // expected-warning {{'c0' is deprecated}}
   }
 
   template <class T> struct D {





More information about the cfe-commits mailing list