10b57cec5SDimitry Andric//===- llvm/IR/DebugInfoFlags.def - Debug info flag definitions -*- C++ -*-===// 20b57cec5SDimitry Andric// 30b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric// 70b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric// 90b57cec5SDimitry Andric// Macros for running through debug info flags. 100b57cec5SDimitry Andric// 110b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 120b57cec5SDimitry Andric 130b57cec5SDimitry Andric#if !(defined HANDLE_DI_FLAG || defined HANDLE_DISP_FLAG) 140b57cec5SDimitry Andric#error "Missing macro definition of HANDLE_DI*" 150b57cec5SDimitry Andric#endif 160b57cec5SDimitry Andric 170b57cec5SDimitry Andric#ifndef HANDLE_DI_FLAG 180b57cec5SDimitry Andric#define HANDLE_DI_FLAG(ID, NAME) 190b57cec5SDimitry Andric#endif 200b57cec5SDimitry Andric 210b57cec5SDimitry Andric#ifndef HANDLE_DISP_FLAG 220b57cec5SDimitry Andric#define HANDLE_DISP_FLAG(ID, NAME) 230b57cec5SDimitry Andric#endif 240b57cec5SDimitry Andric 250b57cec5SDimitry Andric// General flags kept in DINode. 260b57cec5SDimitry Andric 270b57cec5SDimitry AndricHANDLE_DI_FLAG(0, Zero) // Use it as zero value. 280b57cec5SDimitry Andric // For example: void foo(DIFlags Flags = FlagZero). 290b57cec5SDimitry AndricHANDLE_DI_FLAG(1, Private) 300b57cec5SDimitry AndricHANDLE_DI_FLAG(2, Protected) 310b57cec5SDimitry AndricHANDLE_DI_FLAG(3, Public) 320b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 2), FwdDecl) 330b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 3), AppleBlock) 340b57cec5SDimitry Andric// Used to be BlockByRef, can be reused for anything except DICompositeType. 350b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 4), ReservedBit4) 360b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 5), Virtual) 370b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 6), Artificial) 380b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 7), Explicit) 390b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 8), Prototyped) 400b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 9), ObjcClassComplete) 410b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 10), ObjectPointer) 420b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 11), Vector) 430b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 12), StaticMember) 440b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 13), LValueReference) 450b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 14), RValueReference) 460b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 15), ExportSymbols) 470b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 16), SingleInheritance) 480b57cec5SDimitry AndricHANDLE_DI_FLAG((2 << 16), MultipleInheritance) 490b57cec5SDimitry AndricHANDLE_DI_FLAG((3 << 16), VirtualInheritance) 500b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 18), IntroducedVirtual) 510b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 19), BitField) 520b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 20), NoReturn) 530b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 22), TypePassByValue) 540b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 23), TypePassByReference) 550b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 24), EnumClass) 560b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 25), Thunk) 570b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 26), NonTrivial) 580b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 27), BigEndian) 590b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 28), LittleEndian) 600b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 29), AllCallsDescribed) 610b57cec5SDimitry Andric 620b57cec5SDimitry Andric// To avoid needing a dedicated value for IndirectVirtualBase, we use 630b57cec5SDimitry Andric// the bitwise or of Virtual and FwdDecl, which does not otherwise 640b57cec5SDimitry Andric// make sense for inheritance. 650b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 2) | (1 << 5), IndirectVirtualBase) 660b57cec5SDimitry Andric 670b57cec5SDimitry Andric#ifdef DI_FLAG_LARGEST_NEEDED 680b57cec5SDimitry Andric// intended to be used with ADT/BitmaskEnum.h 690b57cec5SDimitry Andric// NOTE: always must be equal to largest flag, check this when adding new flag 700b57cec5SDimitry AndricHANDLE_DI_FLAG((1 << 29), Largest) 710b57cec5SDimitry Andric#undef DI_FLAG_LARGEST_NEEDED 720b57cec5SDimitry Andric#endif 730b57cec5SDimitry Andric 740b57cec5SDimitry Andric// Subprogram-specific flags kept in DISubprogram. 750b57cec5SDimitry Andric 760b57cec5SDimitry Andric// Use this as a zero/initialization value. 770b57cec5SDimitry Andric// For example: void foo(DISPFlags Flags = SPFlagZero). 780b57cec5SDimitry AndricHANDLE_DISP_FLAG(0, Zero) 790b57cec5SDimitry Andric// Virtuality is a two-bit enum field in the LSB of the word. 800b57cec5SDimitry Andric// Values should match DW_VIRTUALITY_*. 810b57cec5SDimitry AndricHANDLE_DISP_FLAG(1u, Virtual) 820b57cec5SDimitry AndricHANDLE_DISP_FLAG(2u, PureVirtual) 830b57cec5SDimitry AndricHANDLE_DISP_FLAG((1u << 2), LocalToUnit) 840b57cec5SDimitry AndricHANDLE_DISP_FLAG((1u << 3), Definition) 850b57cec5SDimitry AndricHANDLE_DISP_FLAG((1u << 4), Optimized) 860b57cec5SDimitry AndricHANDLE_DISP_FLAG((1u << 5), Pure) 870b57cec5SDimitry AndricHANDLE_DISP_FLAG((1u << 6), Elemental) 880b57cec5SDimitry AndricHANDLE_DISP_FLAG((1u << 7), Recursive) 890b57cec5SDimitry AndricHANDLE_DISP_FLAG((1u << 8), MainSubprogram) 900b57cec5SDimitry Andric// May also utilize this Flag in future, when adding support 910b57cec5SDimitry Andric// for defaulted functions 920b57cec5SDimitry AndricHANDLE_DISP_FLAG((1u << 9), Deleted) 930b57cec5SDimitry AndricHANDLE_DISP_FLAG((1u << 11), ObjCDirect) 940b57cec5SDimitry Andric 950b57cec5SDimitry Andric#ifdef DISP_FLAG_LARGEST_NEEDED 960b57cec5SDimitry Andric// Intended to be used with ADT/BitmaskEnum.h. 970b57cec5SDimitry Andric// NOTE: Always must be equal to largest flag, check this when adding new flags. 980b57cec5SDimitry AndricHANDLE_DISP_FLAG((1 << 11), Largest) 990b57cec5SDimitry Andric#undef DISP_FLAG_LARGEST_NEEDED 1000b57cec5SDimitry Andric#endif 101 102#undef HANDLE_DI_FLAG 103#undef HANDLE_DISP_FLAG 104