[cfe-commits] r167385 - in /cfe/trunk: include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h include/clang/StaticAnalyzer/Core/PathSensitive/ProgramStateTrait.h lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp lib/StaticAnalyzer/Core/ProgramState.cpp lib/StaticAnalyzer/Core/RangeConstraintManager.cpp
Anna Zaks
ganna at apple.com
Mon Nov 5 09:28:59 PST 2012
On Nov 5, 2012, at 8:58 AM, Jordan Rose <jordan_rose at apple.com> wrote:
> Author: jrose
> Date: Mon Nov 5 10:58:00 2012
> New Revision: 167385
>
> URL: http://llvm.org/viewvc/llvm-project?rev=167385&view=rev
> Log:
> [analyzer] Move convenience REGISTER_*_WITH_PROGRAMSTATE to CheckerContext.h
>
> As Anna pointed out, ProgramStateTrait.h is a relatively obscure header,
> and checker writers may not know to look there to add their own custom
> state.
>
> The base macro that specializes the template remains in ProgramStateTrait.h
> (REGISTER_TRAIT_WITH_PROGRAMSTATE), which allows the analyzer core to keep
> using it.
>
> Modified:
> cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h
> cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramStateTrait.h
> cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp
> cfe/trunk/lib/StaticAnalyzer/Core/ProgramState.cpp
> cfe/trunk/lib/StaticAnalyzer/Core/RangeConstraintManager.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=167385&r1=167384&r2=167385&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h (original)
> +++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h Mon Nov 5 10:58:00 2012
> @@ -16,10 +16,37 @@
> #define LLVM_CLANG_SA_CORE_PATHSENSITIVE_CHECKERCONTEXT
>
> #include "clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h"
> +#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramStateTrait.h"
>
> namespace clang {
> namespace ento {
>
> + /// Declares an immutable map of type \p NameTy, suitable for placement into
> + /// the ProgramState.
> + ///
> + /// The macro should not be used inside namespaces, or for traits that must
> + /// be accessible from more than one translation unit.
Should we document how the map should be used? Ex: adding/removing a value, getting the whole map?
(Similarly to what we do in the upcoming talk.)
> + #define REGISTER_MAP_WITH_PROGRAMSTATE(Name, Key, Value) \
> + REGISTER_TRAIT_WITH_PROGRAMSTATE(Name, \
> + CLANG_ENTO_PROGRAMSTATE_MAP(Key, Value))
> +
> + /// Declares an immutable list of type \p NameTy, suitable for placement into
> + /// the ProgramState.
> + ///
> + /// The macro should not be used inside namespaces, or for traits that must
> + /// be accessible from more than one translation unit.
> + #define REGISTER_SET_WITH_PROGRAMSTATE(Name, Elem) \
> + REGISTER_TRAIT_WITH_PROGRAMSTATE(Name, llvm::ImmutableSet<Elem>)
> +
> + /// Declares an immutable list of type \p NameTy, suitable for placement into
> + /// the ProgramState.
> + ///
> + /// The macro should not be used inside namespaces, or for traits that must
> + /// be accessible from more than one translation unit.
> + #define REGISTER_LIST_WITH_PROGRAMSTATE(Name, Elem) \
> + REGISTER_TRAIT_WITH_PROGRAMSTATE(Name, llvm::ImmutableList<Elem>)
> +
> +
> class CheckerContext {
> ExprEngine &Eng;
> /// The current exploded(symbolic execution) graph node.
>
> Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramStateTrait.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramStateTrait.h?rev=167385&r1=167384&r2=167385&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramStateTrait.h (original)
> +++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramStateTrait.h Mon Nov 5 10:58:00 2012
> @@ -91,17 +91,15 @@
> }
> };
>
> - /// Helper for REGISTER_MAP_WITH_PROGRAMSTATE.
> + /// Helper for registering a map trait.
> + ///
> + /// If the map type were written directly in the invocation of
> + /// REGISTER_TRAIT_WITH_PROGRAMSTATE, the comma in the template arguments
> + /// would be treated as a macro argument separator, which is wrong.
> + /// This allows the user to specify a map type in a way that the preprocessor
> + /// can deal with.
> #define CLANG_ENTO_PROGRAMSTATE_MAP(Key, Value) llvm::ImmutableMap<Key, Value>
>
> - /// Declares an immutable map of type \p NameTy, suitable for placement into
> - /// the ProgramState.
> - /// The macro should not be used inside namespaces, or for traits that must
> - /// be accessible from more than one translation unit.
> - #define REGISTER_MAP_WITH_PROGRAMSTATE(Name, Key, Value) \
> - REGISTER_TRAIT_WITH_PROGRAMSTATE(Name, \
> - CLANG_ENTO_PROGRAMSTATE_MAP(Key, Value))
> -
>
> // Partial-specialization for ImmutableSet.
>
> @@ -144,13 +142,6 @@
> }
> };
>
> - /// Declares an immutable list of type \p NameTy, suitable for placement into
> - /// the ProgramState.
> - /// The macro should not be used inside namespaces, or for traits that must
> - /// be accessible from more than one translation unit.
> - #define REGISTER_SET_WITH_PROGRAMSTATE(Name, Elem) \
> - REGISTER_TRAIT_WITH_PROGRAMSTATE(Name, llvm::ImmutableSet<Elem>)
> -
>
> // Partial-specialization for ImmutableList.
>
> @@ -189,13 +180,6 @@
> delete (typename data_type::Factory*) Ctx;
> }
> };
> -
> - /// Declares an immutable list of type \p NameTy, suitable for placement into
> - /// the ProgramState.
> - /// The macro should not be used inside namespaces, or for traits that must
> - /// be accessible from more than one translation unit.
> - #define REGISTER_LIST_WITH_PROGRAMSTATE(Name, Elem) \
> - REGISTER_TRAIT_WITH_PROGRAMSTATE(Name, llvm::ImmutableList<Elem>)
>
>
> // Partial specialization for bool.
>
> Modified: cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp?rev=167385&r1=167384&r2=167385&view=diff
> ==============================================================================
> --- cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp (original)
> +++ cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp Mon Nov 5 10:58:00 2012
> @@ -450,8 +450,9 @@
> DynamicDispatchModeConservative
> };
> }
> -REGISTER_MAP_WITH_PROGRAMSTATE(DynamicDispatchBifurcationMap,
> - const MemRegion *, unsigned)
> +REGISTER_TRAIT_WITH_PROGRAMSTATE(DynamicDispatchBifurcationMap,
> + CLANG_ENTO_PROGRAMSTATE_MAP(const MemRegion *,
> + unsigned))
>
> bool ExprEngine::inlineCall(const CallEvent &Call, const Decl *D,
> NodeBuilder &Bldr, ExplodedNode *Pred,
>
> Modified: cfe/trunk/lib/StaticAnalyzer/Core/ProgramState.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ProgramState.cpp?rev=167385&r1=167384&r2=167385&view=diff
> ==============================================================================
> --- cfe/trunk/lib/StaticAnalyzer/Core/ProgramState.cpp (original)
> +++ cfe/trunk/lib/StaticAnalyzer/Core/ProgramState.cpp Mon Nov 5 10:58:00 2012
> @@ -714,9 +714,9 @@
>
> /// The GDM component containing the dynamic type info. This is a map from a
> /// symbol to its most likely type.
> -REGISTER_MAP_WITH_PROGRAMSTATE(DynamicTypeMap,
> - const MemRegion *,
> - DynamicTypeInfo)
> +REGISTER_TRAIT_WITH_PROGRAMSTATE(DynamicTypeMap,
> + CLANG_ENTO_PROGRAMSTATE_MAP(const MemRegion *,
> + DynamicTypeInfo))
>
> DynamicTypeInfo ProgramState::getDynamicTypeInfo(const MemRegion *Reg) const {
> Reg = Reg->StripCasts();
>
> Modified: cfe/trunk/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp?rev=167385&r1=167384&r2=167385&view=diff
> ==============================================================================
> --- cfe/trunk/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp (original)
> +++ cfe/trunk/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp Mon Nov 5 10:58:00 2012
> @@ -277,7 +277,9 @@
> };
> } // end anonymous namespace
>
> -REGISTER_MAP_WITH_PROGRAMSTATE(ConstraintRange, SymbolRef, RangeSet)
> +REGISTER_TRAIT_WITH_PROGRAMSTATE(ConstraintRange,
> + CLANG_ENTO_PROGRAMSTATE_MAP(SymbolRef,
> + RangeSet))
>
> namespace {
> class RangeConstraintManager : public SimpleConstraintManager{
>
>
> _______________________________________________
> 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