fix a segfault in cases where there are no cases.

llvm-svn: 41317
This commit is contained in:
Chris Lattner 2007-08-23 14:29:07 +00:00
parent 97cdac8d19
commit fcb920d32b
2 changed files with 16 additions and 10 deletions

View File

@ -274,16 +274,18 @@ Sema::FinishSwitchStmt(SourceLocation SwitchLoc, StmtTy *Switch, ExprTy *Body) {
// Sort all the scalar case values so we can easily detect duplicates.
std::stable_sort(CaseVals.begin(), CaseVals.end());
for (unsigned i = 0, e = CaseVals.size()-1; i != e; ++i) {
if (CaseVals[i].first == CaseVals[i+1].first) {
// If we have a duplicate, report it.
Diag(CaseVals[i+1].second->getLHS()->getLocStart(),
diag::err_duplicate_case, CaseVals[i].first.toString());
Diag(CaseVals[i].second->getLHS()->getLocStart(),
diag::err_duplicate_case_prev);
// FIXME: We really want to remove the bogus case stmt from the substmt,
// but we have no way to do this right now.
CaseListIsErroneous = true;
if (!CaseVals.empty()) {
for (unsigned i = 0, e = CaseVals.size()-1; i != e; ++i) {
if (CaseVals[i].first == CaseVals[i+1].first) {
// If we have a duplicate, report it.
Diag(CaseVals[i+1].second->getLHS()->getLocStart(),
diag::err_duplicate_case, CaseVals[i].first.toString());
Diag(CaseVals[i].second->getLHS()->getLocStart(),
diag::err_duplicate_case_prev);
// FIXME: We really want to remove the bogus case stmt from the substmt,
// but we have no way to do this right now.
CaseListIsErroneous = true;
}
}
}

View File

@ -15,3 +15,7 @@ void foo(int X) {
}
}
void test3(void) {
switch (0);
}