1//===-- Symbols.def - Metadata about SymExpr kinds --------------*- C++ -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// The list of symbols (SymExpr sub-classes) used in the Static Analyzer. 10// In order to use this information, users of this file must define 11// one or more of the three macros: 12// 13// SYMBOL(Id, Parent) - for specific SymExpr sub-classes, reserving the 14// IdKind identifier for its kind enumeration value. 15// 16// ABSTRACT_SYMBOL(Id, Parent) - for abstract symbol classes, 17// 18// SYMBOL_RANGE(Id, First, Last) - for ranges of kind-enums, 19// allowing to determine abstract class of a symbol 20// based on the kind enumeration value. 21// 22//===----------------------------------------------------------------------===// 23 24#ifndef SYMBOL 25#define SYMBOL(Id, Parent) 26#endif 27 28#ifndef ABSTRACT_SYMBOL 29#define ABSTRACT_SYMBOL(Id, Parent) 30#endif 31 32#ifndef SYMBOL_RANGE 33#define SYMBOL_RANGE(Id, First, Last) 34#endif 35 36ABSTRACT_SYMBOL(BinarySymExpr, SymExpr) 37 SYMBOL(IntSymExpr, BinarySymExpr) 38 SYMBOL(SymIntExpr, BinarySymExpr) 39 SYMBOL(SymSymExpr, BinarySymExpr) 40SYMBOL_RANGE(BINARYSYMEXPRS, IntSymExprKind, SymSymExprKind) 41 42SYMBOL(SymbolCast, SymExpr) 43 44ABSTRACT_SYMBOL(SymbolData, SymExpr) 45 SYMBOL(SymbolConjured, SymbolData) 46 SYMBOL(SymbolDerived, SymbolData) 47 SYMBOL(SymbolExtent, SymbolData) 48 SYMBOL(SymbolMetadata, SymbolData) 49 SYMBOL(SymbolRegionValue, SymbolData) 50SYMBOL_RANGE(SYMBOLS, SymbolConjuredKind, SymbolRegionValueKind) 51 52#undef SYMBOL 53#undef ABSTRACT_SYMBOL 54#undef SYMBOL_RANGE 55