| //===-- SVals.def - Metadata about SVal kinds -------------------*- C++ -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // 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 |