//===--- DeclAttr.def - Swift Attributes Metaprogramming - ------*- C++ -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2024 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
//
// This file defines macros used for macro-metaprogramming with decl attributes.
//
//===----------------------------------------------------------------------===//

#ifndef DECL_ATTR
#define DECL_ATTR(SPELLING, CLASS, REQUIREMENTS, BEHAVIORS, CODE)
#endif

#ifndef CONTEXTUAL_DECL_ATTR
#define CONTEXTUAL_DECL_ATTR(SPELLING, CLASS, REQUIREMENTS, BEHAVIORS, CODE) \
                   DECL_ATTR(SPELLING, CLASS, REQUIREMENTS, BEHAVIORS, CODE)
#endif

#ifndef SIMPLE_DECL_ATTR
#define SIMPLE_DECL_ATTR(X, CLASS, REQUIREMENTS, BEHAVIORS, CODE) \
               DECL_ATTR(X, CLASS, REQUIREMENTS, BEHAVIORS, CODE)
#endif

#ifndef CONTEXTUAL_SIMPLE_DECL_ATTR
#define CONTEXTUAL_SIMPLE_DECL_ATTR(X, CLASS, REQUIREMENTS, BEHAVIORS, CODE) \
                   SIMPLE_DECL_ATTR(X, CLASS, REQUIREMENTS, BEHAVIORS, CODE)
#endif

#ifndef DECL_ATTR_ALIAS
#define DECL_ATTR_ALIAS(SPELLING, CLASS)
#endif

#ifndef CONTEXTUAL_DECL_ATTR_ALIAS
#define CONTEXTUAL_DECL_ATTR_ALIAS(SPELLING, CLASS) \
                   DECL_ATTR_ALIAS(SPELLING, CLASS)
#endif

// Diagnose any use of the attribute CLASS without FEATURE_NAME enabled,
// and also enable other special behavior. If you use this for an experimental
// feature, please add test cases to:
// 
// * test/attr/feature_requirement.swift
// * test/IDE/complete_decl_attribute_feature_requirement.swift
#ifndef DECL_ATTR_FEATURE_REQUIREMENT
#define DECL_ATTR_FEATURE_REQUIREMENT(CLASS, FEATURE_NAME)
#endif

#ifndef LAST_DECL_ATTR
#define LAST_DECL_ATTR(CLASS)
#endif

//
// Declaration Attributes and Modifers
//
// Please keep entries in serialization code order. If you remove an entry,
// leave an "Unused 'NNN'" comment so the unused code is obvious. 
DECL_ATTR(_silgen_name, SILGenName,
  OnAbstractFunction | OnVar,
  LongAttribute | UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  0)

DECL_ATTR(available, Available,
  OnAbstractFunction | OnAssociatedType | OnGenericType | OnVar | OnSubscript | OnEnumElement | OnMacro | OnExtension,
  AllowMultipleAttributes | LongAttribute | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  1)

CONTEXTUAL_SIMPLE_DECL_ATTR(final, Final,
  OnClass | OnFunc | OnAccessor | OnVar | OnSubscript,
  DeclModifier | ABIBreakingToAdd | ABIBreakingToRemove | APIStableToAdd | APIStableToRemove | UnconstrainedInABIAttr,
  2)

DECL_ATTR(objc, ObjC,
  OnAbstractFunction | OnClass | OnProtocol | OnExtension | OnVar | OnSubscript | OnEnum | OnEnumElement,
  ABIBreakingToAdd | ABIBreakingToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  3)

CONTEXTUAL_SIMPLE_DECL_ATTR(required, Required,
  OnConstructor,
  DeclModifier | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | EquivalentInABIAttr,
  4)

CONTEXTUAL_SIMPLE_DECL_ATTR(optional, Optional,
  OnConstructor | OnFunc | OnAccessor | OnVar | OnSubscript,
  DeclModifier | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  5)

SIMPLE_DECL_ATTR(dynamicCallable, DynamicCallable,
  OnNominalType,
  ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  6)

SIMPLE_DECL_ATTR(main, MainType,
  OnClass | OnStruct | OnEnum | OnExtension,
  ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  7)

SIMPLE_DECL_ATTR(_exported, Exported,
  OnImport,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  8)

SIMPLE_DECL_ATTR(dynamicMemberLookup, DynamicMemberLookup,
  OnNominalType,
  ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  9)

SIMPLE_DECL_ATTR(NSCopying, NSCopying,
  OnVar,
  ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  10)

SIMPLE_DECL_ATTR(IBAction, IBAction,
  OnFunc,
  ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  11)

SIMPLE_DECL_ATTR(IBDesignable, IBDesignable,
  OnClass | OnExtension,
  ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  12)

SIMPLE_DECL_ATTR(IBInspectable, IBInspectable,
  OnVar,
  ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  13)

SIMPLE_DECL_ATTR(IBOutlet, IBOutlet,
  OnVar,
  ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  14)

SIMPLE_DECL_ATTR(NSManaged, NSManaged,
  OnVar | OnFunc | OnAccessor,
  ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  15)

CONTEXTUAL_SIMPLE_DECL_ATTR(lazy, Lazy,
  OnVar,
  DeclModifier | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnconstrainedInABIAttr,
  16)

SIMPLE_DECL_ATTR(LLDBDebuggerFunction, LLDBDebuggerFunction,
  OnFunc,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  17)

SIMPLE_DECL_ATTR(UIApplicationMain, UIApplicationMain,
  OnClass,
  ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  18)

SIMPLE_DECL_ATTR(unsafe_no_objc_tagged_pointer, UnsafeNoObjCTaggedPointer,
  OnProtocol,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  19)

DECL_ATTR(inline, Inline,
  OnVar | OnSubscript | OnAbstractFunction,
  ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  20)

DECL_ATTR(_semantics, Semantics,
  OnAbstractFunction | OnSubscript | OnNominalType | OnVar,
  AllowMultipleAttributes | UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnconstrainedInABIAttr,
  21)

CONTEXTUAL_SIMPLE_DECL_ATTR(dynamic, Dynamic,
  OnFunc | OnAccessor | OnVar | OnSubscript | OnConstructor,
  DeclModifier | ABIBreakingToAdd | ABIBreakingToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  22)

CONTEXTUAL_SIMPLE_DECL_ATTR(infix, Infix,
  OnFunc | OnOperator,
  DeclModifier | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  23)

CONTEXTUAL_SIMPLE_DECL_ATTR(prefix, Prefix,
  OnFunc | OnOperator,
  DeclModifier | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnconstrainedInABIAttr,
  24)

CONTEXTUAL_SIMPLE_DECL_ATTR(postfix, Postfix,
  OnFunc | OnOperator,
  DeclModifier | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnconstrainedInABIAttr,
  25)

SIMPLE_DECL_ATTR(_transparent, Transparent,
  OnFunc | OnAccessor | OnConstructor | OnVar | OnDestructor,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  26)

SIMPLE_DECL_ATTR(requires_stored_property_inits, RequiresStoredPropertyInits,
  OnClass,
  ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  27)

SIMPLE_DECL_ATTR(_neverEmitIntoClient, NeverEmitIntoClient,
  OnVar | OnSubscript | OnAbstractFunction,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  28)

// Unused '29'

SIMPLE_DECL_ATTR(nonobjc, NonObjC,
  OnExtension | OnFunc | OnAccessor | OnVar | OnSubscript | OnConstructor,
  ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  30)

SIMPLE_DECL_ATTR(_fixed_layout, FixedLayout,
  OnVar | OnClass | OnStruct | OnProtocol,
  UserInaccessible | ABIBreakingToAdd | ABIBreakingToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  31)

SIMPLE_DECL_ATTR(inlinable, Inlinable,
  OnVar | OnSubscript | OnAbstractFunction,
  ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  32)

DECL_ATTR(_specialize, Specialize,
  OnConstructor | OnFunc | OnAccessor,
  AllowMultipleAttributes | LongAttribute | UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  33)

SIMPLE_DECL_ATTR(objcMembers, ObjCMembers,
  OnClass,
  ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  34)

CONTEXTUAL_SIMPLE_DECL_ATTR(_compilerInitialized, CompilerInitialized,
  OnVar,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  35)

SIMPLE_DECL_ATTR(_lexicalLifetimes, LexicalLifetimes,
  OnFunc,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  36)

// Unused '37'
// Unused '38'
// Unused '39'

CONTEXTUAL_SIMPLE_DECL_ATTR(__consuming, LegacyConsuming,
  OnFunc | OnAccessor,
  DeclModifier | UserInaccessible | NotSerialized | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnconstrainedInABIAttr,
  40)

CONTEXTUAL_SIMPLE_DECL_ATTR(mutating, Mutating,
  OnFunc | OnAccessor,
  DeclModifier | NotSerialized | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnconstrainedInABIAttr,
  41)

CONTEXTUAL_SIMPLE_DECL_ATTR(nonmutating, NonMutating,
  OnFunc | OnAccessor,
  DeclModifier | NotSerialized | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnconstrainedInABIAttr,
  42)

CONTEXTUAL_SIMPLE_DECL_ATTR(convenience, Convenience,
  OnConstructor,
  DeclModifier | NotSerialized | ABIBreakingToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | EquivalentInABIAttr,
  43)

CONTEXTUAL_SIMPLE_DECL_ATTR(override, Override,
  OnFunc | OnAccessor | OnVar | OnSubscript | OnConstructor | OnAssociatedType,
  DeclModifier | NotSerialized | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  44)

SIMPLE_DECL_ATTR(_hasStorage, HasStorage,
  OnVar,
  UserInaccessible | NotSerialized | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  45)

DECL_ATTR(private, AccessControl,
  OnFunc | OnAccessor | OnExtension | OnGenericType | OnVar | OnSubscript | OnConstructor | OnMacro | OnImport,
  DeclModifier | NotSerialized | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  46)
DECL_ATTR_ALIAS(fileprivate, AccessControl)
DECL_ATTR_ALIAS(internal, AccessControl)
DECL_ATTR_ALIAS(public, AccessControl)
CONTEXTUAL_DECL_ATTR_ALIAS(package, AccessControl)
CONTEXTUAL_DECL_ATTR_ALIAS(open, AccessControl)

DECL_ATTR(__setter_access, SetterAccess,
  OnVar | OnSubscript,
  DeclModifier | RejectByParser | NotSerialized | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  47)

DECL_ATTR(__raw_doc_comment, RawDocComment,
  OnAnyDecl,
  UserInaccessible | RejectByParser | NotSerialized | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnconstrainedInABIAttr,
  48)

CONTEXTUAL_DECL_ATTR(weak, ReferenceOwnership,
  OnVar,
  DeclModifier | NotSerialized | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  49)
CONTEXTUAL_DECL_ATTR_ALIAS(unowned, ReferenceOwnership)

DECL_ATTR(_effects, Effects,
  OnAbstractFunction,
  AllowMultipleAttributes | UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  50)

DECL_ATTR(__objc_bridged, ObjCBridged,
  OnClass,
  UserInaccessible | RejectByParser | NotSerialized | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  51)

SIMPLE_DECL_ATTR(NSApplicationMain, NSApplicationMain,
  OnClass,
  ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  52)

SIMPLE_DECL_ATTR(_objc_non_lazy_realization, ObjCNonLazyRealization,
  OnClass,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  53)

DECL_ATTR(__synthesized_protocol, SynthesizedProtocol,
  OnConcreteNominalType,
  UserInaccessible | RejectByParser | NotSerialized | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnconstrainedInABIAttr,
  54)

SIMPLE_DECL_ATTR(testable, Testable,
  OnImport,
  UserInaccessible | NotSerialized | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  55)

DECL_ATTR(_alignment, Alignment,
  OnStruct | OnEnum,
  UserInaccessible | ABIBreakingToAdd | ABIBreakingToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  56)

SIMPLE_DECL_ATTR(rethrows, Rethrows,
  OnFunc | OnConstructor,
  DeclModifier | RejectByParser | ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | UnconstrainedInABIAttr,
  57)

SIMPLE_DECL_ATTR(rethrows, AtRethrows,
  OnProtocol,
  ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | UnreachableInABIAttr,
  58)

DECL_ATTR(_swift_native_objc_runtime_base, SwiftNativeObjCRuntimeBase,
  OnClass,
  UserInaccessible | ABIBreakingToAdd | ABIBreakingToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  59)

CONTEXTUAL_SIMPLE_DECL_ATTR(indirect, Indirect,
  OnEnum | OnEnumElement,
  DeclModifier | ABIBreakingToAdd | ABIBreakingToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  60)

SIMPLE_DECL_ATTR(warn_unqualified_access, WarnUnqualifiedAccess,
  OnFunc | OnAccessor,
  LongAttribute | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  61)

SIMPLE_DECL_ATTR(_show_in_interface, ShowInInterface,
  OnProtocol,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  62)

DECL_ATTR(c, CDecl,
  OnFunc | OnAccessor | OnEnum,
  LongAttribute | UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  63)
DECL_ATTR_ALIAS(_cdecl, CDecl)

SIMPLE_DECL_ATTR(usableFromInline, UsableFromInline,
  OnAbstractFunction | OnVar | OnSubscript | OnNominalType | OnTypeAlias,
  LongAttribute | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  64)

SIMPLE_DECL_ATTR(discardableResult, DiscardableResult,
  OnFunc | OnAccessor | OnConstructor | OnMacro,
  LongAttribute | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  65)

SIMPLE_DECL_ATTR(GKInspectable, GKInspectable,
  OnVar,
  ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  66)

DECL_ATTR(_implements, Implements,
  OnFunc | OnAccessor | OnVar | OnSubscript | OnTypeAlias,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  67)

DECL_ATTR(_objcRuntimeName, ObjCRuntimeName,
  OnClass,
  UserInaccessible | NotSerialized | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  68)

SIMPLE_DECL_ATTR(_staticInitializeObjCMetadata, StaticInitializeObjCMetadata,
  OnClass,
  UserInaccessible | LongAttribute | RejectByParser | NotSerialized | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  69)

DECL_ATTR(_restatedObjCConformance, RestatedObjCConformance,
  OnProtocol,
  UserInaccessible | LongAttribute | RejectByParser | NotSerialized | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnconstrainedInABIAttr,
  70)

// Unused '71'

DECL_ATTR(implementation, ObjCImplementation,
  OnExtension | OnAbstractFunction,
  UserInaccessible | ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | ForbiddenInABIAttr,
  72)
DECL_ATTR_ALIAS(_objcImplementation, ObjCImplementation)

DECL_ATTR(_optimize, Optimize,
  OnAbstractFunction | OnSubscript | OnVar,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  73)

DECL_ATTR(_clangImporterSynthesizedType, ClangImporterSynthesizedType,
  OnGenericType,
  LongAttribute | RejectByParser | UserInaccessible | NotSerialized | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnconstrainedInABIAttr,
  74)

SIMPLE_DECL_ATTR(_weakLinked, WeakLinked,
  OnNominalType | OnAssociatedType | OnFunc | OnAccessor | OnVar | OnSubscript | OnConstructor | OnEnumElement | OnExtension | OnImport,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  75)

SIMPLE_DECL_ATTR(frozen, Frozen,
  OnEnum | OnStruct,
  ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToRemove | APIStableToAdd | UnreachableInABIAttr,
  76)
DECL_ATTR_ALIAS(_frozen, Frozen)

SIMPLE_DECL_ATTR(_forbidSerializingReference, ForbidSerializingReference,
  OnAnyDecl,
  LongAttribute | RejectByParser | UserInaccessible | NotSerialized | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnconstrainedInABIAttr,
  77)

SIMPLE_DECL_ATTR(_hasInitialValue, HasInitialValue,
  OnVar,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnconstrainedInABIAttr,
  78)

SIMPLE_DECL_ATTR(_nonoverride, NonOverride,
  OnFunc | OnAccessor | OnVar | OnSubscript | OnConstructor | OnAssociatedType,
  UserInaccessible | NotSerialized | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  79)

DECL_ATTR(_dynamicReplacement, DynamicReplacement,
  OnAbstractFunction | OnVar | OnSubscript,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  80)

SIMPLE_DECL_ATTR(_borrowed, Borrowed,
  OnVar | OnSubscript,
  UserInaccessible | NotSerialized | ABIBreakingToAdd | ABIBreakingToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  81)

DECL_ATTR(_private, PrivateImport,
  OnImport,
  UserInaccessible | NotSerialized | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  82)

SIMPLE_DECL_ATTR(_alwaysEmitIntoClient, AlwaysEmitIntoClient,
  OnVar | OnSubscript | OnAbstractFunction,
  UserInaccessible | ABIBreakingToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  83)

SIMPLE_DECL_ATTR(_implementationOnly, ImplementationOnly,
  OnImport | OnFunc | OnConstructor | OnVar | OnSubscript,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  84)

DECL_ATTR(_custom, Custom,
  OnAnyDecl,
  RejectByParser | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnconstrainedInABIAttr,
  85)

SIMPLE_DECL_ATTR(propertyWrapper, PropertyWrapper,
  OnStruct | OnClass | OnEnum,
  ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  86)

SIMPLE_DECL_ATTR(_disfavoredOverload, DisfavoredOverload,
  OnAbstractFunction | OnVar | OnSubscript,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  87)

SIMPLE_DECL_ATTR(resultBuilder, ResultBuilder,
  OnNominalType,
  ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  88)

DECL_ATTR(_projectedValueProperty, ProjectedValueProperty,
  OnVar,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnconstrainedInABIAttr,
  89)

SIMPLE_DECL_ATTR(_nonEphemeral, NonEphemeral,
  OnParam,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIBreakingToAdd | APIStableToRemove | ForbiddenInABIAttr,
  90)

DECL_ATTR(differentiable, Differentiable,
  OnAccessor | OnConstructor | OnFunc | OnVar | OnSubscript,
  LongAttribute | AllowMultipleAttributes | ABIStableToAdd | ABIBreakingToRemove | APIStableToAdd | APIBreakingToRemove | ForbiddenInABIAttr,
  91)

SIMPLE_DECL_ATTR(_hasMissingDesignatedInitializers, HasMissingDesignatedInitializers,
  OnClass,
  UserInaccessible | NotSerialized | APIBreakingToAdd | ABIBreakingToAdd | APIStableToRemove | ABIStableToRemove | UnreachableInABIAttr,
  92)

SIMPLE_DECL_ATTR(_inheritsConvenienceInitializers, InheritsConvenienceInitializers,
  OnClass,
  UserInaccessible | NotSerialized | APIStableToAdd | ABIStableToAdd | APIBreakingToRemove | ABIBreakingToRemove | UnreachableInABIAttr,
  93)

DECL_ATTR(_typeEraser, TypeEraser,
  OnProtocol,
  UserInaccessible | ABIStableToAdd | ABIBreakingToRemove | APIStableToAdd | APIBreakingToRemove | AllowMultipleAttributes | UnreachableInABIAttr,
  94)

SIMPLE_DECL_ATTR(IBSegueAction, IBSegueAction,
  OnFunc,
  ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  95)

DECL_ATTR(_originallyDefinedIn, OriginallyDefinedIn,
  OnNominalType | OnFunc | OnVar | OnExtension,
  UserInaccessible | AllowMultipleAttributes | LongAttribute | ABIBreakingToAdd | ABIBreakingToRemove | APIStableToAdd | APIStableToRemove | UnconstrainedInABIAttr,
  96)

DECL_ATTR(derivative, Derivative,
  OnFunc,
  LongAttribute | AllowMultipleAttributes | ABIStableToAdd | ABIBreakingToRemove | APIStableToAdd | APIBreakingToRemove | ForbiddenInABIAttr,
  97)

DECL_ATTR(_spi, SPIAccessControl,
  OnAbstractFunction | OnExtension | OnGenericType | OnVar | OnSubscript | OnImport | OnAccessor | OnEnumElement | OnMacro,
  AllowMultipleAttributes | UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIBreakingToAdd | APIStableToRemove | ForbiddenInABIAttr,
  98)

DECL_ATTR(transpose, Transpose,
  OnFunc,
  LongAttribute | AllowMultipleAttributes | ABIStableToAdd | ABIBreakingToRemove | APIStableToAdd | APIBreakingToRemove | ForbiddenInABIAttr,
  99)

SIMPLE_DECL_ATTR(noDerivative, NoDerivative,
  OnAbstractFunction | OnVar | OnSubscript,
  ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | ForbiddenInABIAttr,
  100)

// Unused '101'

CONTEXTUAL_SIMPLE_DECL_ATTR(actor, Actor,
  OnClass,
  DeclModifier | ConcurrencyOnly | ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | UnreachableInABIAttr,
  102)

CONTEXTUAL_SIMPLE_DECL_ATTR(isolated, Isolated,
  OnDestructor,
  DeclModifier | ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | UnreachableInABIAttr,
  103)

SIMPLE_DECL_ATTR(globalActor, GlobalActor,
  OnClass | OnStruct | OnEnum,
  ABIStableToAdd | ABIBreakingToRemove | APIStableToAdd | APIBreakingToRemove | UnreachableInABIAttr,
  104)

SIMPLE_DECL_ATTR(_specializeExtension, SpecializeExtension,
  OnExtension,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  105)

CONTEXTUAL_SIMPLE_DECL_ATTR(async, Async,
  OnVar | OnFunc,
  DeclModifier | ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | UnconstrainedInABIAttr,
  106)

SIMPLE_DECL_ATTR(Sendable, Sendable,
  OnFunc | OnConstructor | OnAccessor | OnAnyClangDecl,
  ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | UnconstrainedInABIAttr,
  107)

SIMPLE_DECL_ATTR(_marker, Marker,
  OnProtocol,
  UserInaccessible | ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | UnreachableInABIAttr,
  108)

SIMPLE_DECL_ATTR(reasync, Reasync,
  OnFunc | OnConstructor,
  RejectByParser | ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | UnconstrainedInABIAttr,
  109)

SIMPLE_DECL_ATTR(reasync, AtReasync,
  OnProtocol,
  ConcurrencyOnly | ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | UnreachableInABIAttr,
  110)

// Unused '111'

CONTEXTUAL_DECL_ATTR(nonisolated, Nonisolated,
  OnFunc | OnConstructor | OnDestructor | OnVar | OnSubscript | OnProtocol | OnExtension | OnClass | OnStruct | OnEnum,
  DeclModifier | ABIStableToAdd | ABIStableToRemove | APIBreakingToAdd | APIStableToRemove | UnconstrainedInABIAttr,
  112)

// Unused '113'

SIMPLE_DECL_ATTR(_unsafeInheritExecutor, UnsafeInheritExecutor,
  OnFunc,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIBreakingToRemove | UnconstrainedInABIAttr,
  114)

SIMPLE_DECL_ATTR(_implicitSelfCapture, ImplicitSelfCapture,
  OnParam,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIBreakingToRemove | ForbiddenInABIAttr,
  115)

DECL_ATTR(_inheritActorContext, InheritActorContext,
  OnParam,
  // since the _inheritActorContext(always) forces an actor capture, it changes ABI of the closure this applies to
  UserInaccessible | ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | UnconstrainedInABIAttr,
  116)

SIMPLE_DECL_ATTR(_eagerMove, EagerMove,
  OnFunc | OnParam | OnVar | OnNominalType,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  117)

CONTEXTUAL_SIMPLE_DECL_ATTR(distributed, DistributedActor,
  OnClass | OnFunc | OnAccessor | OnVar,
  DeclModifier | ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | EquivalentInABIAttr,
  118)

SIMPLE_DECL_ATTR(_noEagerMove, NoEagerMove,
  OnFunc | OnParam | OnVar | OnNominalType,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  119)

SIMPLE_DECL_ATTR(_assemblyVision, EmitAssemblyVisionRemarks,
  OnFunc | OnNominalType,
  UserInaccessible | NotSerialized | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  120)

DECL_ATTR(_nonSendable, NonSendable,
  OnNominalType,
  UserInaccessible | AllowMultipleAttributes | ABIStableToAdd | ABIBreakingToRemove | APIStableToAdd | APIBreakingToRemove | UnconstrainedInABIAttr,
  121)

SIMPLE_DECL_ATTR(_noImplicitCopy, NoImplicitCopy,
  OnFunc | OnParam | OnVar,
  UserInaccessible | ABIStableToAdd | ABIBreakingToRemove | APIStableToAdd | APIBreakingToRemove | ForbiddenInABIAttr,
  122)

SIMPLE_DECL_ATTR(_noLocks, NoLocks,
  OnAbstractFunction | OnSubscript,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  123)

SIMPLE_DECL_ATTR(_noAllocation, NoAllocation,
  OnAbstractFunction | OnSubscript,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  124)

SIMPLE_DECL_ATTR(preconcurrency, Preconcurrency,
  OnFunc | OnConstructor | OnProtocol | OnGenericType | OnVar | OnSubscript | OnEnumElement | OnImport,
  ABIStableToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | UnconstrainedInABIAttr,
  125)

CONTEXTUAL_SIMPLE_DECL_ATTR(_const, CompileTimeLiteral,
  OnParam | OnVar,
  DeclModifier | UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIBreakingToAdd | APIStableToRemove | UnconstrainedInABIAttr,
  126)

DECL_ATTR(_unavailableFromAsync, UnavailableFromAsync,
  OnFunc | OnConstructor | OnMacro,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIBreakingToAdd | APIStableToRemove | ForbiddenInABIAttr,
  127)

DECL_ATTR(exclusivity, Exclusivity,
  OnVar,
  ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  128)

DECL_ATTR(backDeployed, BackDeployed,
  OnAbstractFunction | OnAccessor | OnSubscript | OnVar,
  AllowMultipleAttributes | LongAttribute | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIBreakingToRemove | ForbiddenInABIAttr,
  129)
DECL_ATTR_ALIAS(_backDeploy, BackDeployed)

CONTEXTUAL_SIMPLE_DECL_ATTR(_local, KnownToBeLocal,
  OnFunc | OnParam | OnVar,
  DeclModifier | UserInaccessible | ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | UnconstrainedInABIAttr,
  130)

SIMPLE_DECL_ATTR(_moveOnly, MoveOnly,
  OnNominalType,
  UserInaccessible | ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | UnreachableInABIAttr,
  131)

SIMPLE_DECL_ATTR(_alwaysEmitConformanceMetadata, AlwaysEmitConformanceMetadata,
  OnProtocol,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  132)

DECL_ATTR(_expose, Expose,
  OnFunc | OnNominalType | OnVar | OnConstructor,
  AllowMultipleAttributes | LongAttribute | UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  133)

// Unused '134'

SIMPLE_DECL_ATTR(_spiOnly, SPIOnly,
  OnImport,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  135)

DECL_ATTR(_documentation, Documentation,
  OnAnyDecl,
  UserInaccessible | APIBreakingToAdd | APIStableToRemove | ABIStableToAdd | ABIStableToRemove | ForbiddenInABIAttr,
  136)

// Unused '137'

SIMPLE_DECL_ATTR(_noMetadata, NoMetadata,
  OnGenericTypeParam,
  UserInaccessible | NotSerialized | ABIStableToAdd | ABIBreakingToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  138)

// Unused '139'

CONTEXTUAL_SIMPLE_DECL_ATTR(consuming, Consuming,
  OnFunc | OnAccessor,
  DeclModifier | NotSerialized | ABIBreakingToAdd | ABIBreakingToRemove | APIStableToAdd | APIStableToRemove | UnconstrainedInABIAttr,
  140)

CONTEXTUAL_SIMPLE_DECL_ATTR(borrowing, Borrowing,
  OnFunc | OnAccessor,
  DeclModifier | NotSerialized | ABIBreakingToAdd | ABIBreakingToRemove | APIStableToAdd | APIStableToRemove | UnconstrainedInABIAttr,
  141)

DECL_ATTR(attached, MacroRole,
  OnMacro,
  AllowMultipleAttributes | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIBreakingToRemove | UnreachableInABIAttr,
  142)
DECL_ATTR_ALIAS(freestanding, MacroRole)

SIMPLE_DECL_ATTR(_used, Used,
  OnAbstractFunction | OnVar,
  UserInaccessible | ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | ForbiddenInABIAttr,
  143)

DECL_ATTR(_section, Section,
  OnAbstractFunction | OnVar,
  UserInaccessible | ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | ForbiddenInABIAttr,
  144)

DECL_ATTR(storageRestrictions, StorageRestrictions,
  OnAccessor,
  ABIStableToAdd | ABIStableToRemove | APIBreakingToAdd | APIBreakingToRemove | UnreachableInABIAttr,
  145)

DECL_ATTR(_rawLayout, RawLayout,
  OnStruct,
  UserInaccessible | ABIBreakingToAdd | ABIBreakingToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  146)

DECL_ATTR(_extern, Extern,
  OnFunc,
  AllowMultipleAttributes | ABIBreakingToAdd | ABIBreakingToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  147)

SIMPLE_DECL_ATTR(_nonescapable, NonEscapable,
  OnNominalType,
  UserInaccessible | ABIBreakingToAdd | ABIStableToRemove | APIBreakingToAdd | APIStableToRemove | UnreachableInABIAttr,
  148)

SIMPLE_DECL_ATTR(_unsafeNonescapableResult, UnsafeNonEscapableResult,
  OnAbstractFunction | OnSubscript | OnAccessor,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIBreakingToAdd | APIBreakingToRemove | EquivalentInABIAttr,
  149)

// Unused '150'

SIMPLE_DECL_ATTR(_staticExclusiveOnly, StaticExclusiveOnly,
  OnStruct,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIBreakingToAdd | APIStableToRemove | UnreachableInABIAttr,
  151)

SIMPLE_DECL_ATTR(extractConstantsFromMembers, ExtractConstantsFromMembers,
  OnClass | OnEnum | OnProtocol | OnStruct,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | UnreachableInABIAttr,
  152)

SIMPLE_DECL_ATTR(_noRuntime, NoRuntime,
  OnAbstractFunction | OnSubscript,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  153)

SIMPLE_DECL_ATTR(_noExistentials, NoExistentials,
  OnAbstractFunction | OnSubscript,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  154)

SIMPLE_DECL_ATTR(_noObjCBridging, NoObjCBridging,
  OnAbstractFunction | OnSubscript,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  155)

SIMPLE_DECL_ATTR(_manualOwnership, ManualOwnership,
  OnAbstractFunction | OnSubscript,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  156)

DECL_ATTR(_allowFeatureSuppression, AllowFeatureSuppression,
  OnAnyDecl,
  UserInaccessible | NotSerialized | ABIStableToAdd | APIStableToAdd | ABIStableToRemove | APIStableToRemove | ForbiddenInABIAttr,
  157)
DECL_ATTR_ALIAS(_disallowFeatureSuppression, AllowFeatureSuppression)

SIMPLE_DECL_ATTR(_preInverseGenerics, PreInverseGenerics,
  OnAbstractFunction | OnSubscript | OnVar | OnExtension,
  UserInaccessible | ABIBreakingToAdd | ABIBreakingToRemove | APIStableToAdd | APIStableToRemove | UnconstrainedInABIAttr,
  158)

// Declares that a struct contains "sensitive" data. It enforces that the contents of such a struct value
// is zeroed out at the end of its lifetime. In other words: the content of such a value is not observable
// in memory after the value's lifetime.
// TODO: enable @sensitive also for other nominal types than structs, e.g. for enums
SIMPLE_DECL_ATTR(sensitive, Sensitive,
  OnStruct,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIBreakingToAdd | APIStableToRemove | UnreachableInABIAttr,
  159)

SIMPLE_DECL_ATTR(unsafe, Unsafe,
  OnAbstractFunction | OnSubscript | OnVar | OnMacro | OnNominalType | OnExtension | OnTypeAlias | OnEnumElement | OnImport,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  160)

DECL_ATTR(lifetime, Lifetime,
  OnAccessor | OnConstructor | OnFunc | OnSubscript,
  LongAttribute | ABIBreakingToAdd | ABIStableToRemove | APIBreakingToAdd | APIStableToRemove | AllowMultipleAttributes | EquivalentInABIAttr,
  161)
DECL_ATTR_ALIAS(_lifetime, Lifetime)

SIMPLE_DECL_ATTR(_addressableSelf, AddressableSelf,
  OnAccessor | OnConstructor | OnFunc | OnSubscript,
  ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | UserInaccessible | UnconstrainedInABIAttr,
  162)

SIMPLE_DECL_ATTR(_addressableForDependencies, AddressableForDependencies,
  OnNominalType,
  ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | UserInaccessible | UnreachableInABIAttr,
  163)

SIMPLE_DECL_ATTR(safe, Safe,
  OnAbstractFunction | OnSubscript | OnVar | OnMacro | OnNominalType | OnExtension | OnEnumElement,
  UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  164)

DECL_ATTR(abi, ABI,
  OnConstructor | OnFunc | OnSubscript | OnVar,
  LongAttribute | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  165)

// Unused '166': Used to be `@execution(caller | concurrent)` replaced with `@concurrent` and `nonisolated(nonsending)`

SIMPLE_DECL_ATTR(const, ConstVal,
  OnParam | OnVar | OnFunc,
  ABIStableToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | EquivalentInABIAttr,
  167)
DECL_ATTR_FEATURE_REQUIREMENT(ConstVal, CompileTimeValues)
SIMPLE_DECL_ATTR(constInitialized, ConstInitialized,
  OnVar,
  ABIStableToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | EquivalentInABIAttr,
  168)
DECL_ATTR_FEATURE_REQUIREMENT(ConstInitialized, CompileTimeValues)

DECL_ATTR(nonexhaustive, Nonexhaustive,
  OnEnum,
  ABIStableToAdd | ABIStableToRemove | APIBreakingToAdd | APIStableToRemove | ForbiddenInABIAttr,
  169)
DECL_ATTR_FEATURE_REQUIREMENT(Nonexhaustive, NonexhaustiveAttribute)

SIMPLE_DECL_ATTR(concurrent, Concurrent,
  OnFunc | OnConstructor | OnSubscript | OnVar,
  ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | UnconstrainedInABIAttr,
  170)

// Unused '171': Used to be `@preEnumExtensibility`

DECL_ATTR(specialized, Specialized,
  OnConstructor | OnFunc | OnAccessor,
  AllowMultipleAttributes | LongAttribute | UserInaccessible | ABIStableToAdd | ABIStableToRemove | APIStableToAdd | APIStableToRemove | ForbiddenInABIAttr,
  172)

LAST_DECL_ATTR(Specialized)

#undef DECL_ATTR_ALIAS
#undef CONTEXTUAL_DECL_ATTR_ALIAS
#undef SIMPLE_DECL_ATTR
#undef CONTEXTUAL_SIMPLE_DECL_ATTR
#undef DECL_ATTR
#undef CONTEXTUAL_DECL_ATTR
#undef DECL_ATTR_FEATURE_REQUIREMENT
#undef LAST_DECL_ATTR
