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