[cfe-commits] r148516 - in /cfe/trunk: include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h lib/StaticAnalyzer/Core/CheckerContext.cpp
Anna Zaks
ganna at apple.com
Fri Jan 20 13:46:45 PST 2012
On Jan 20, 2012, at 12:55 PM, David Blaikie wrote:
> On Thu, Jan 19, 2012 at 4:11 PM, Anna Zaks <ganna at apple.com> wrote:
>> Author: zaks
>> Date: Thu Jan 19 18:11:12 2012
>> New Revision: 148516
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=148516&view=rev
>> Log:
>> [analyzer] Add a utility method that allows to find the macro name used
>> at the given location.
>>
>> This could be useful when checkers' logic depends on whether a function
>> is called with a given macro argument.
>>
>> Modified:
>> cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h
>> cfe/trunk/lib/StaticAnalyzer/Core/CheckerContext.cpp
>>
>> Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h?rev=148516&r1=148515&r2=148516&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h (original)
>> +++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h Thu Jan 19 18:11:12 2012
>> @@ -66,7 +66,11 @@
>> ASTContext &getASTContext() {
>> return Eng.getContext();
>> }
>> -
>> +
>> + const LangOptions &getLangOptions() const {
>> + return Eng.getContext().getLangOptions();
>> + }
>> +
>> const LocationContext *getLocationContext() const {
>> return Pred->getLocationContext();
>> }
>> @@ -161,6 +165,17 @@
>> /// function with the given name.
>> bool isCLibraryFunction(const FunctionDecl *FD, StringRef Name);
>>
>> + /// \brief Depending on wither the location corresponds to a macro, return
>> + /// either the macro name or the token spelling.
>> + ///
>> + /// This could be useful when checkers' logic depends on whether a function
>> + /// is called with a given macro argument. For example:
>> + /// s = socket(AF_INET,..)
>> + /// If AF_INET is a macro, the result should be treated as a source of taint.
>> + ///
>> + /// \sa clang::Lexer::getSpelling(), clang::Lexer::getImmediateMacroName().
>> + StringRef getMacroNameOrSpelling(SourceLocation &Loc);
>> +
>> private:
>> ExplodedNode *addTransitionImpl(const ProgramState *State,
>> bool MarkAsSink,
>>
>> Modified: cfe/trunk/lib/StaticAnalyzer/Core/CheckerContext.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/CheckerContext.cpp?rev=148516&r1=148515&r2=148516&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/StaticAnalyzer/Core/CheckerContext.cpp (original)
>> +++ cfe/trunk/lib/StaticAnalyzer/Core/CheckerContext.cpp Thu Jan 19 18:11:12 2012
>> @@ -14,6 +14,7 @@
>>
>> #include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
>> #include "clang/Basic/Builtins.h"
>> +#include "clang/Lex/Lexer.h"
>>
>> using namespace clang;
>> using namespace ento;
>> @@ -53,3 +54,15 @@
>>
>> return false;
>> }
>> +
>> +StringRef CheckerContext::getMacroNameOrSpelling(SourceLocation &Loc) {
>> + if (!Loc.isMacroID()) {
>> + SmallVector<char, 16> buf;
>> + return Lexer::getSpelling(Loc, buf, getSourceManager(), getLangOptions());
>> + } else {
>> + return Lexer::getImmediateMacroName(Loc, getSourceManager(),
>> + getLangOptions());
>> + }
>> + return StringRef();
>
> This last return is trivially unreachable (& found by
> -Wunreachable-code). I've refactored this to:
>
> if (Loc.isMacroID())
> return Lexer::getImmediateMacroName...
> SmallVector...
> return Lexer::getSpelling...
>
> & I'll be checking this in along with a lot of other unreachable-code
> fixes in a little while (once I confirm that I don't have any extra
> warnings with GCC, etc)
Refactor looks good.
Thanks for catching this,
Anna.
>
>> +}
>> +
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list