[cfe-commits] r166174 - /cfe/trunk/lib/AST/TypeLoc.cpp

Abramo Bagnara abramo.bagnara at bugseng.com
Thu Oct 18 01:29:37 PDT 2012


Author: abramo
Date: Thu Oct 18 03:29:37 2012
New Revision: 166174

URL: http://llvm.org/viewvc/llvm-project?rev=166174&view=rev
Log:
Fixed some corner cases due to implicit int TypeLoc and simplified the logic.

Modified:
    cfe/trunk/lib/AST/TypeLoc.cpp

Modified: cfe/trunk/lib/AST/TypeLoc.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/TypeLoc.cpp?rev=166174&r1=166173&r2=166174&view=diff
==============================================================================
--- cfe/trunk/lib/AST/TypeLoc.cpp (original)
+++ cfe/trunk/lib/AST/TypeLoc.cpp Thu Oct 18 03:29:37 2012
@@ -98,27 +98,38 @@
 
 SourceLocation TypeLoc::getBeginLoc() const {
   TypeLoc Cur = *this;
+  TypeLoc LeftMost = Cur;
   while (true) {
     switch (Cur.getTypeLocClass()) {
+    case Elaborated:
+      LeftMost = Cur;
+      break;
     case FunctionProto:
-      if (cast<FunctionProtoTypeLoc>(&Cur)->getTypePtr()->hasTrailingReturn())
-        return Cur.getLocalSourceRange().getBegin();
+      if (cast<FunctionProtoTypeLoc>(&Cur)->getTypePtr()->hasTrailingReturn()) {
+        LeftMost = Cur;
+        break;
+      }
+      /* Fall through */
+    case FunctionNoProto:
+    case ConstantArray:
+    case DependentSizedArray:
+    case IncompleteArray:
+    case VariableArray:
+      // FIXME: Currently QualifiedTypeLoc does not have a source range
+    case Qualified:
       Cur = Cur.getNextTypeLoc();
-      assert(!Cur.isNull());
       continue;
-
-    // FIXME: Currently QualifiedTypeLoc does not have a source range
-    // case Qualified:
-    case Elaborated:
-      return Cur.getLocalSourceRange().getBegin();
-
     default:
-      if (Cur.getNextTypeLoc().isNull())
-        return Cur.getLocalSourceRange().getBegin();
+      if (!Cur.getLocalSourceRange().getBegin().isInvalid())
+        LeftMost = Cur;
       Cur = Cur.getNextTypeLoc();
+      if (Cur.isNull())
+        break;
       continue;
     } // switch
+    break;
   } // while
+  return LeftMost.getLocalSourceRange().getBegin();
 }
 
 SourceLocation TypeLoc::getEndLoc() const {





More information about the cfe-commits mailing list