[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