From: Zhanyong Wan Date: Tue, 5 Oct 2010 17:56:33 +0000 (+0000) Subject: Fix handling of the 'Invalid' argument in SourceManager's methods (patch by Dean... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1f24e11769016e84ebf86ac5d97d43a7ce5dd5c1;p=clang Fix handling of the 'Invalid' argument in SourceManager's methods (patch by Dean Sturtevant, reviewed by chandlerc and Sebastian Redl). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@115638 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Basic/SourceManager.cpp b/lib/Basic/SourceManager.cpp index 633d86c1eb..650308b6dd 100644 --- a/lib/Basic/SourceManager.cpp +++ b/lib/Basic/SourceManager.cpp @@ -796,16 +796,25 @@ unsigned SourceManager::getColumnNumber(FileID FID, unsigned FilePos, return FilePos-LineStart+1; } +// isInvalid - Return the result of calling loc.isInvalid(), and +// if Invalid is not null, set its value to same. +static bool isInvalid(SourceLocation Loc, bool *Invalid) { + bool MyInvalid = Loc.isInvalid(); + if (Invalid) + *Invalid = MyInvalid; + return MyInvalid; +} + unsigned SourceManager::getSpellingColumnNumber(SourceLocation Loc, bool *Invalid) const { - if (Loc.isInvalid()) return 0; + if (isInvalid(Loc, Invalid)) return 0; std::pair LocInfo = getDecomposedSpellingLoc(Loc); return getColumnNumber(LocInfo.first, LocInfo.second, Invalid); } unsigned SourceManager::getInstantiationColumnNumber(SourceLocation Loc, bool *Invalid) const { - if (Loc.isInvalid()) return 0; + if (isInvalid(Loc, Invalid)) return 0; std::pair LocInfo = getDecomposedInstantiationLoc(Loc); return getColumnNumber(LocInfo.first, LocInfo.second, Invalid); } @@ -974,13 +983,13 @@ unsigned SourceManager::getLineNumber(FileID FID, unsigned FilePos, unsigned SourceManager::getInstantiationLineNumber(SourceLocation Loc, bool *Invalid) const { - if (Loc.isInvalid()) return 0; + if (isInvalid(Loc, Invalid)) return 0; std::pair LocInfo = getDecomposedInstantiationLoc(Loc); return getLineNumber(LocInfo.first, LocInfo.second); } unsigned SourceManager::getSpellingLineNumber(SourceLocation Loc, bool *Invalid) const { - if (Loc.isInvalid()) return 0; + if (isInvalid(Loc, Invalid)) return 0; std::pair LocInfo = getDecomposedSpellingLoc(Loc); return getLineNumber(LocInfo.first, LocInfo.second); } @@ -1021,7 +1030,7 @@ SourceManager::getFileCharacteristic(SourceLocation Loc) const { /// for normal clients. const char *SourceManager::getBufferName(SourceLocation Loc, bool *Invalid) const { - if (Loc.isInvalid()) return ""; + if (isInvalid(Loc, Invalid)) return ""; return getBuffer(getFileID(Loc), Invalid)->getBufferIdentifier(); }