From 4164d31712ce330b506f3d1f8985e7d73d24afe4 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Tue, 16 Jun 2009 10:00:07 +0200
Subject: [PATCH] Fixed crash in SimpleDeclarationAST::lastToken()

---
 src/shared/cplusplus/AST.cpp | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/shared/cplusplus/AST.cpp b/src/shared/cplusplus/AST.cpp
index 53098b4a5ee..70d8b9223e3 100644
--- a/src/shared/cplusplus/AST.cpp
+++ b/src/shared/cplusplus/AST.cpp
@@ -1170,15 +1170,23 @@ void DeclaratorListAST::accept0(ASTVisitor *visitor)
 
 unsigned DeclaratorListAST::firstToken() const
 {
+    if (comma_token)
+        return comma_token;
+
     return declarator->firstToken();
 }
 
 unsigned DeclaratorListAST::lastToken() const
 {
     for (const DeclaratorListAST *it = this; it; it = it->next) {
-        if (! it->next)
-            return it->declarator->lastToken();
+        if (! it->next) {
+            if (it->declarator)
+                return it->declarator->lastToken();
+            else if (it->comma_token)
+                return it->comma_token + 1;
+        }
     }
+
     return 0;
 }
 
@@ -2877,10 +2885,8 @@ unsigned SimpleDeclarationAST::lastToken() const
     if (semicolon_token)
         return semicolon_token + 1;
 
-    for (DeclaratorListAST *it = declarators; it; it = it->next) {
-        if (! it->next)
-            return it->lastToken();
-    }
+    if (declarators)
+        return declarators->lastToken();
 
     for (SpecifierAST *it = decl_specifier_seq; it; it = it->next) {
         if (! it->next)
-- 
GitLab