For enums with no tag name, display its location in
the diagnostic instead of displaying ''. // rdar://11082110 llvm-svn: 153219
This commit is contained in:
parent
7e7d5eefb2
commit
a6983a9bce
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue