[cfe-commits] r156904 - in /cfe/trunk: include/clang/Basic/DiagnosticSemaKinds.td lib/Sema/SemaStmt.cpp test/Sema/switch.c
Jordy Rose
jediknil at belkadan.com
Tue May 15 22:40:49 PDT 2012
On May 16, 2012, at 1:32, Douglas Gregor wrote:
> Modified: cfe/trunk/lib/Sema/SemaStmt.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=156904&r1=156903&r2=156904&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaStmt.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaStmt.cpp Wed May 16 00:32:58 2012
> @@ -768,8 +768,29 @@
>
> if (i != 0 && CaseVals[i].first == CaseVals[i-1].first) {
> // If we have a duplicate, report it.
> - Diag(CaseVals[i].second->getLHS()->getLocStart(),
> - diag::err_duplicate_case) << CaseVals[i].first.toString(10);
> + // First, determine if either case value has a name
> + StringRef PrevString, CurrString;
> + Expr *PrevCase = CaseVals[i-1].second->getLHS()->IgnoreParenCasts();
> + Expr *CurrCase = CaseVals[i].second->getLHS()->IgnoreParenCasts();
> + if (DeclRefExpr *DeclRef = dyn_cast<DeclRefExpr>(PrevCase)) {
> + PrevString = DeclRef->getDecl()->getName();
> + }
> + if (DeclRefExpr *DeclRef = dyn_cast<DeclRefExpr>(CurrCase)) {
> + CurrString = DeclRef->getDecl()->getName();
> + }
> + std::string CaseValStr = CaseVals[i-1].first.toString(10);
Just saw this earlier today. APSInt has a toString method that takes a SmallString to print to (and defaults to base 10).
SmallString<16> CaseValStr;
CaseVals[i-1].first.toString(CaseValStr);
Sorry for not getting that in before the commit!
Jordy
More information about the cfe-commits
mailing list