[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