[cfe-commits] r148516 - in /cfe/trunk: include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h lib/StaticAnalyzer/Core/CheckerContext.cpp
Anna Zaks
ganna at apple.com
Thu Jan 19 16:11:12 PST 2012
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();
+}
+
More information about the cfe-commits
mailing list