From: Argyrios Kyrtzidis Date: Thu, 7 Jul 2011 03:40:27 +0000 (+0000) Subject: Fix bug in SourceManager::getDecomposedInstantiationLocSlowCase. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8b86ef0b71900c64c0c2cfca54cac08a203a16a4;p=clang Fix bug in SourceManager::getDecomposedInstantiationLocSlowCase. It would add up relative (decomposed) offsets like in getDecomposedSpellingLocSlowCase, but while it makes sense to preserve the offset among lexed spelling locations, it doesn't make sense to add anything to the offset of the instantiation location. The instantiation location will be the same regardless of the relative offset in the tokens that were instantiated. This bug didn't actually affect anything because, currently, in practice we never create macro locations with relative offset greater than 0. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134586 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/SourceManager.h b/include/clang/Basic/SourceManager.h index f2a8bf3515..05551e5319 100644 --- a/include/clang/Basic/SourceManager.h +++ b/include/clang/Basic/SourceManager.h @@ -721,7 +721,7 @@ public: if (Loc.isFileID()) return std::make_pair(FID, Offset); - return getDecomposedInstantiationLocSlowCase(E, Offset); + return getDecomposedInstantiationLocSlowCase(E); } /// getDecomposedSpellingLoc - Decompose the specified location into a raw @@ -989,8 +989,7 @@ private: SourceLocation getSpellingLocSlowCase(SourceLocation Loc) const; std::pair - getDecomposedInstantiationLocSlowCase(const SrcMgr::SLocEntry *E, - unsigned Offset) const; + getDecomposedInstantiationLocSlowCase(const SrcMgr::SLocEntry *E) const; std::pair getDecomposedSpellingLocSlowCase(const SrcMgr::SLocEntry *E, unsigned Offset) const; diff --git a/lib/Basic/SourceManager.cpp b/lib/Basic/SourceManager.cpp index 9b8d1b4bb0..d6c4c16cec 100644 --- a/lib/Basic/SourceManager.cpp +++ b/lib/Basic/SourceManager.cpp @@ -749,18 +749,19 @@ SourceLocation SourceManager::getSpellingLocSlowCase(SourceLocation Loc) const { std::pair -SourceManager::getDecomposedInstantiationLocSlowCase(const SrcMgr::SLocEntry *E, - unsigned Offset) const { +SourceManager::getDecomposedInstantiationLocSlowCase( + const SrcMgr::SLocEntry *E) const { // If this is an instantiation record, walk through all the instantiation // points. FileID FID; SourceLocation Loc; + unsigned Offset; do { Loc = E->getInstantiation().getInstantiationLocStart(); FID = getFileID(Loc); E = &getSLocEntry(FID); - Offset += Loc.getOffset()-E->getOffset(); + Offset = Loc.getOffset()-E->getOffset(); } while (!Loc.isFileID()); return std::make_pair(FID, Offset);