[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