//===-- SVals.def - Metadata about SVal kinds -------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // The list of symbolic values (SVal kinds and sub-kinds) used in the Static // Analyzer. The distinction between loc:: and nonloc:: SVal namespaces is // currently hardcoded, because it is too peculiar and explicit to be handled // uniformly. In order to use this information, users of this file must define // one or more of the following macros: // // BASIC_SVAL(Id, Parent) - for specific SVal sub-kinds, which are // neither in loc:: nor in nonloc:: namespace; these classes occupy // their own base kind IdKind. // // ABSTRACT_SVAL(Id, Parent) - for abstract SVal classes which are // neither in loc:: nor in nonloc:: namespace, // // ABSTRACT_SVAL_WITH_KIND(Id, Parent) - for SVal classes which are also // neither in loc:: nor in nonloc:: namespace, but occupy a whole base kind // identifier IdKind, much like BASIC_SVALs. // // LOC_SVAL(Id, Parent) - for values in loc:: namespace, which occupy a sub-kind // loc::IdKind. // // NONLOC_SVAL(Id, Parent) - for values in nonloc:: namespace, which occupy a // sub-kind nonloc::IdKind. // //===----------------------------------------------------------------------===// #ifndef BASIC_SVAL #define BASIC_SVAL(Id, Parent) #endif #ifndef ABSTRACT_SVAL #define ABSTRACT_SVAL(Id, Parent) #endif #ifndef ABSTRACT_SVAL_WITH_KIND #define ABSTRACT_SVAL_WITH_KIND(Id, Parent) ABSTRACT_SVAL(Id, Parent) #endif #ifndef LOC_SVAL #define LOC_SVAL(Id, Parent) #endif #ifndef NONLOC_SVAL #define NONLOC_SVAL(Id, Parent) #endif BASIC_SVAL(UndefinedVal, SVal) ABSTRACT_SVAL(DefinedOrUnknownSVal, SVal) BASIC_SVAL(UnknownVal, DefinedOrUnknownSVal) ABSTRACT_SVAL(DefinedSVal, DefinedOrUnknownSVal) ABSTRACT_SVAL_WITH_KIND(Loc, DefinedSVal) LOC_SVAL(ConcreteInt, Loc) LOC_SVAL(GotoLabel, Loc) LOC_SVAL(MemRegionVal, Loc) ABSTRACT_SVAL_WITH_KIND(NonLoc, DefinedSVal) NONLOC_SVAL(CompoundVal, NonLoc) NONLOC_SVAL(ConcreteInt, NonLoc) NONLOC_SVAL(LazyCompoundVal, NonLoc) NONLOC_SVAL(LocAsInteger, NonLoc) NONLOC_SVAL(SymbolVal, NonLoc) NONLOC_SVAL(PointerToMember, NonLoc) #undef NONLOC_SVAL #undef LOC_SVAL #undef ABSTRACT_SVAL_WITH_KIND #undef ABSTRACT_SVAL #undef BASIC_SVAL