On Thu, Oct 18, 2012 at 1:29 AM, Abramo Bagnara <[email protected]>wrote:
> 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. > Did anything ever become of the idea of writing unittests for source location corner cases like these? (Did I just drop the ball on the email thread?) > > 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 { > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
