]> granicus.if.org Git - clang/commitdiff
For enums with no tag name, display its location in
authorFariborz Jahanian <fjahanian@apple.com>
Wed, 21 Mar 2012 20:56:29 +0000 (20:56 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Wed, 21 Mar 2012 20:56:29 +0000 (20:56 +0000)
the diagnostic instead of displaying ''.
// rdar://11082110

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153219 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaStmt.cpp
test/Sema/switch.c

index 1ddedcfe6802ab11ebf95564965ca893a06bae1c..6db66a5eff8fcc97c7ee41c942f4b92ec5b0228b 100644 (file)
@@ -881,7 +881,7 @@ Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch,
           EI++;
         if (EI == EIend || EI->first > CI->first)
           Diag(CI->second->getLHS()->getExprLoc(), diag::warn_not_in_enum)
-            << ED->getDeclName();
+            << CondTypeBeforePromotion;
       }
       // See which of case ranges aren't in enum
       EI = EnumVals.begin();
@@ -892,7 +892,7 @@ Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch,
 
         if (EI == EIend || EI->first != RI->first) {
           Diag(RI->second->getLHS()->getExprLoc(), diag::warn_not_in_enum)
-            << ED->getDeclName();
+            << CondTypeBeforePromotion;
         }
 
         llvm::APSInt Hi = 
@@ -902,7 +902,7 @@ Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch,
           EI++;
         if (EI == EIend || EI->first != Hi)
           Diag(RI->second->getRHS()->getExprLoc(), diag::warn_not_in_enum)
-            << ED->getDeclName();
+            << CondTypeBeforePromotion;
       }
 
       // Check which enum vals aren't in switch
index 5c8ebf516c3173c0cc251d238316aecc46f06ca2..a7a7f60492150dd304dbc7b1ef1118ccdb5489f4 100644 (file)
@@ -109,14 +109,14 @@ void test7() {
   switch(a) {
     case A:
     case B:
-    case 3: // expected-warning{{case value not in enumerated type ''}}
+    case 3: // expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
       break;
   }
   switch(a) {
     case A:
     case B:
-    case 3 ... //expected-warning{{case value not in enumerated type ''}}
-        4: //expected-warning{{case value not in enumerated type ''}}
+    case 3 ... //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
+        4: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
       break;
   }
   switch(a) {
@@ -124,16 +124,16 @@ void test7() {
       break;
   }
   switch(a) {
-    case 0 ... 2: //expected-warning{{case value not in enumerated type ''}}
+    case 0 ... 2: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
       break;
   }
   switch(a) {
-    case 1 ... 3: //expected-warning{{case value not in enumerated type ''}}
+    case 1 ... 3: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
       break;
   }
   switch(a) {
-    case 0 ...  //expected-warning{{case value not in enumerated type ''}}
-      3:  //expected-warning{{case value not in enumerated type ''}}
+    case 0 ...  //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
+      3:  //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
       break;
   }
 
@@ -167,11 +167,11 @@ void test9() {
     C = 1
   } a;
   switch(a) {
-    case 0: //expected-warning{{case value not in enumerated type ''}}
+    case 0: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
     case 1:
-    case 2: //expected-warning{{case value not in enumerated type ''}}
+    case 2: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
     case 3:
-    case 4: //expected-warning{{case value not in enumerated type ''}}
+    case 4: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
       break;
   }
 }
@@ -184,14 +184,14 @@ void test10() {
     D = 12
   } a;
   switch(a) {
-    case 0 ...  //expected-warning{{case value not in enumerated type ''}}
-           1:  //expected-warning{{case value not in enumerated type ''}}
+    case 0 ...  //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
+           1:  //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
     case 2 ... 4:
-    case 5 ...  //expected-warning{{case value not in enumerated type ''}}     
-             9:  //expected-warning{{case value not in enumerated type ''}}
+    case 5 ...  //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}  
+             9:  //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
     case 10 ... 12:
-    case 13 ...  //expected-warning{{case value not in enumerated type ''}}
-              16: //expected-warning{{case value not in enumerated type ''}}
+    case 13 ...  //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
+              16: //expected-warning{{case value not in enumerated type 'enum <anonymous enum}}
       break;
   }
 }
@@ -303,3 +303,20 @@ int test18() {
   default: return 2; // expected-warning {{default label in switch which covers all enumeration values}}
   }
 }
+
+// rdar://110822110
+typedef enum {
+        kOne = 1,
+} Ints;
+        
+void rdar110822110(Ints i)
+{
+        switch (i) {
+                case kOne:
+                        break;
+                case 2:        // expected-warning {{case value not in enumerated type 'Ints'}}          
+                        break;
+                default:       // expected-warning {{default label in switch which covers all enumeration values}}
+                        break;
+                }
+}