[cfe-commits] [PATCH] Fix diagnostic reporting of previous default statement.

Douglas Gregor dgregor at apple.com
Mon Jan 3 00:33:53 PST 2011


On Dec 30, 2010, at 1:00 AM, sashan wrote:

> On Thu Dec 23 07:40:49 2010, Douglas Gregor wrote:
>> 
>> It's still not the right solution to look at the source locations. Just
>> reverse the list and we'll have the cases in source order.
>> 
> 
> Reversing the list was what I originally (see
> http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-December/012387.html) did but it
> doesn't work for this sort of statement:
> 
>  default:
>  default:;

That seems like an easy fix?

> Anyway I've attached a patch that effectively reverses the list.
> 
> <0001-Store-the-case-default-stmts-at-the-end-of-the-list.patch>

--- a/include/clang/AST/Stmt.h
+++ b/include/clang/AST/Stmt.h
@@ -738,6 +738,7 @@ class SwitchStmt : public Stmt {
   Stmt* SubExprs[END_EXPR];
   // This points to a linked list of case and default statements.
   SwitchCase *FirstCase;
+  SwitchCase *LastCase;
   SourceLocation SwitchLoc;
 
   /// If the SwitchStmt is a switch on an enum value, this records whether

It'd be much nicer if we could avoid making the AST larger. How about either maintaining the LastCase state within Sema, or just reversing the list in-place within Sema at the end of the switch statement?

	- Doug



More information about the cfe-commits mailing list