On Jan 20, 2012, at 12:55 PM, David Blaikie wrote: > On Thu, Jan 19, 2012 at 4:11 PM, Anna Zaks <[email protected]> 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 >> [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
