diff options
Diffstat (limited to 'clang/lib/Basic/SourceManager.cpp')
| -rw-r--r-- | clang/lib/Basic/SourceManager.cpp | 18 | 
1 files changed, 11 insertions, 7 deletions
diff --git a/clang/lib/Basic/SourceManager.cpp b/clang/lib/Basic/SourceManager.cpp index 938c648..97aa0f2 100644 --- a/clang/lib/Basic/SourceManager.cpp +++ b/clang/lib/Basic/SourceManager.cpp @@ -907,19 +907,23 @@ getExpansionLocSlowCase(SourceLocation Loc) const {  SourceLocation SourceManager::getSpellingLocSlowCase(SourceLocation Loc) const {    do { -    FileIDAndOffset LocInfo = getDecomposedLoc(Loc); -    Loc = getSLocEntry(LocInfo.first).getExpansion().getSpellingLoc(); -    Loc = Loc.getLocWithOffset(LocInfo.second); +    const SLocEntry &Entry = getSLocEntry(getFileID(Loc)); +    Loc = Entry.getExpansion().getSpellingLoc().getLocWithOffset( +        Loc.getOffset() - Entry.getOffset());    } while (!Loc.isFileID());    return Loc;  }  SourceLocation SourceManager::getFileLocSlowCase(SourceLocation Loc) const {    do { -    if (isMacroArgExpansion(Loc)) -      Loc = getImmediateSpellingLoc(Loc); -    else -      Loc = getImmediateExpansionRange(Loc).getBegin(); +    const SLocEntry &Entry = getSLocEntry(getFileID(Loc)); +    const ExpansionInfo &ExpInfo = Entry.getExpansion(); +    if (ExpInfo.isMacroArgExpansion()) { +      Loc = ExpInfo.getSpellingLoc().getLocWithOffset(Loc.getOffset() - +                                                      Entry.getOffset()); +    } else { +      Loc = ExpInfo.getExpansionLocStart(); +    }    } while (!Loc.isFileID());    return Loc;  }  | 
