Blame | Last modification | View Log | Download | RSS feed
//===- llvm/IR/DebugInfoFlags.def - Debug info flag definitions -*- 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////===----------------------------------------------------------------------===////// Macros for running through debug info flags.////===----------------------------------------------------------------------===//#if !(defined HANDLE_DI_FLAG || defined HANDLE_DISP_FLAG)#error "Missing macro definition of HANDLE_DI*"#endif#ifndef HANDLE_DI_FLAG#define HANDLE_DI_FLAG(ID, NAME)#endif#ifndef HANDLE_DISP_FLAG#define HANDLE_DISP_FLAG(ID, NAME)#endif// General flags kept in DINode.HANDLE_DI_FLAG(0, Zero) // Use it as zero value.// For example: void foo(DIFlags Flags = FlagZero).HANDLE_DI_FLAG(1, Private)HANDLE_DI_FLAG(2, Protected)HANDLE_DI_FLAG(3, Public)HANDLE_DI_FLAG((1 << 2), FwdDecl)HANDLE_DI_FLAG((1 << 3), AppleBlock)// Used to be BlockByRef, can be reused for anything except DICompositeType.HANDLE_DI_FLAG((1 << 4), ReservedBit4)HANDLE_DI_FLAG((1 << 5), Virtual)HANDLE_DI_FLAG((1 << 6), Artificial)HANDLE_DI_FLAG((1 << 7), Explicit)HANDLE_DI_FLAG((1 << 8), Prototyped)HANDLE_DI_FLAG((1 << 9), ObjcClassComplete)HANDLE_DI_FLAG((1 << 10), ObjectPointer)HANDLE_DI_FLAG((1 << 11), Vector)HANDLE_DI_FLAG((1 << 12), StaticMember)HANDLE_DI_FLAG((1 << 13), LValueReference)HANDLE_DI_FLAG((1 << 14), RValueReference)HANDLE_DI_FLAG((1 << 15), ExportSymbols)HANDLE_DI_FLAG((1 << 16), SingleInheritance)HANDLE_DI_FLAG((2 << 16), MultipleInheritance)HANDLE_DI_FLAG((3 << 16), VirtualInheritance)HANDLE_DI_FLAG((1 << 18), IntroducedVirtual)HANDLE_DI_FLAG((1 << 19), BitField)HANDLE_DI_FLAG((1 << 20), NoReturn)HANDLE_DI_FLAG((1 << 22), TypePassByValue)HANDLE_DI_FLAG((1 << 23), TypePassByReference)HANDLE_DI_FLAG((1 << 24), EnumClass)HANDLE_DI_FLAG((1 << 25), Thunk)HANDLE_DI_FLAG((1 << 26), NonTrivial)HANDLE_DI_FLAG((1 << 27), BigEndian)HANDLE_DI_FLAG((1 << 28), LittleEndian)HANDLE_DI_FLAG((1 << 29), AllCallsDescribed)// To avoid needing a dedicated value for IndirectVirtualBase, we use// the bitwise or of Virtual and FwdDecl, which does not otherwise// make sense for inheritance.HANDLE_DI_FLAG((1 << 2) | (1 << 5), IndirectVirtualBase)#ifdef DI_FLAG_LARGEST_NEEDED// intended to be used with ADT/BitmaskEnum.h// NOTE: always must be equal to largest flag, check this when adding new flagHANDLE_DI_FLAG((1 << 29), Largest)#undef DI_FLAG_LARGEST_NEEDED#endif// Subprogram-specific flags kept in DISubprogram.// Use this as a zero/initialization value.// For example: void foo(DISPFlags Flags = SPFlagZero).HANDLE_DISP_FLAG(0, Zero)// Virtuality is a two-bit enum field in the LSB of the word.// Values should match DW_VIRTUALITY_*.HANDLE_DISP_FLAG(1u, Virtual)HANDLE_DISP_FLAG(2u, PureVirtual)HANDLE_DISP_FLAG((1u << 2), LocalToUnit)HANDLE_DISP_FLAG((1u << 3), Definition)HANDLE_DISP_FLAG((1u << 4), Optimized)HANDLE_DISP_FLAG((1u << 5), Pure)HANDLE_DISP_FLAG((1u << 6), Elemental)HANDLE_DISP_FLAG((1u << 7), Recursive)HANDLE_DISP_FLAG((1u << 8), MainSubprogram)// May also utilize this Flag in future, when adding support// for defaulted functionsHANDLE_DISP_FLAG((1u << 9), Deleted)HANDLE_DISP_FLAG((1u << 11), ObjCDirect)#ifdef DISP_FLAG_LARGEST_NEEDED// Intended to be used with ADT/BitmaskEnum.h.// NOTE: Always must be equal to largest flag, check this when adding new flags.HANDLE_DISP_FLAG((1 << 11), Largest)#undef DISP_FLAG_LARGEST_NEEDED#endif#undef HANDLE_DI_FLAG#undef HANDLE_DISP_FLAG