// This file is generated by TableGen. Do not edit.

AliasAttr *AliasAttr::clone(ASTContext &C) const {
  return new (C) AliasAttr(getLocation(), C, getAliasee());
}

AlignMac68kAttr *AlignMac68kAttr::clone(ASTContext &C) const {
  return new (C) AlignMac68kAttr(getLocation(), C);
}

bool AlignedAttr::isAlignmentDependent() const {
  if (isalignmentExpr)
    return alignmentExpr && (alignmentExpr->isValueDependent() || alignmentExpr->isTypeDependent());
  else
    return alignmentType->getType()->isDependentType();
}
unsigned AlignedAttr::getAlignment(ASTContext &Ctx) const {
  assert(!isAlignmentDependent());
  if (isalignmentExpr)
    return (alignmentExpr ? alignmentExpr->EvaluateAsInt(Ctx).getZExtValue() : 16)* Ctx.getCharWidth();
  else
    return 0; // FIXME
}
AlignedAttr *AlignedAttr::clone(ASTContext &C) const {
  return new (C) AlignedAttr(getLocation(), C, isalignmentExpr, isalignmentExpr ? static_cast<void*>(alignmentExpr) : alignmentType);
}

AlwaysInlineAttr *AlwaysInlineAttr::clone(ASTContext &C) const {
  return new (C) AlwaysInlineAttr(getLocation(), C);
}

AnalyzerNoReturnAttr *AnalyzerNoReturnAttr::clone(ASTContext &C) const {
  return new (C) AnalyzerNoReturnAttr(getLocation(), C);
}

AnnotateAttr *AnnotateAttr::clone(ASTContext &C) const {
  return new (C) AnnotateAttr(getLocation(), C, getAnnotation());
}

AsmLabelAttr *AsmLabelAttr::clone(ASTContext &C) const {
  return new (C) AsmLabelAttr(getLocation(), C, getLabel());
}

BaseCheckAttr *BaseCheckAttr::clone(ASTContext &C) const {
  return new (C) BaseCheckAttr(getLocation(), C);
}

BlocksAttr *BlocksAttr::clone(ASTContext &C) const {
  return new (C) BlocksAttr(getLocation(), C, type);
}

CDeclAttr *CDeclAttr::clone(ASTContext &C) const {
  return new (C) CDeclAttr(getLocation(), C);
}

CFReturnsNotRetainedAttr *CFReturnsNotRetainedAttr::clone(ASTContext &C) const {
  return new (C) CFReturnsNotRetainedAttr(getLocation(), C);
}

CFReturnsRetainedAttr *CFReturnsRetainedAttr::clone(ASTContext &C) const {
  return new (C) CFReturnsRetainedAttr(getLocation(), C);
}

CarriesDependencyAttr *CarriesDependencyAttr::clone(ASTContext &C) const {
  return new (C) CarriesDependencyAttr(getLocation(), C);
}

CleanupAttr *CleanupAttr::clone(ASTContext &C) const {
  return new (C) CleanupAttr(getLocation(), C, functionDecl);
}

ConstAttr *ConstAttr::clone(ASTContext &C) const {
  return new (C) ConstAttr(getLocation(), C);
}

ConstructorAttr *ConstructorAttr::clone(ASTContext &C) const {
  return new (C) ConstructorAttr(getLocation(), C, priority);
}

DLLExportAttr *DLLExportAttr::clone(ASTContext &C) const {
  return new (C) DLLExportAttr(getLocation(), C);
}

DLLImportAttr *DLLImportAttr::clone(ASTContext &C) const {
  return new (C) DLLImportAttr(getLocation(), C);
}

DeprecatedAttr *DeprecatedAttr::clone(ASTContext &C) const {
  return new (C) DeprecatedAttr(getLocation(), C);
}

DestructorAttr *DestructorAttr::clone(ASTContext &C) const {
  return new (C) DestructorAttr(getLocation(), C, priority);
}

FastCallAttr *FastCallAttr::clone(ASTContext &C) const {
  return new (C) FastCallAttr(getLocation(), C);
}

FinalAttr *FinalAttr::clone(ASTContext &C) const {
  return new (C) FinalAttr(getLocation(), C);
}

FormatAttr *FormatAttr::clone(ASTContext &C) const {
  return new (C) FormatAttr(getLocation(), C, getType(), formatIdx, firstArg);
}

FormatArgAttr *FormatArgAttr::clone(ASTContext &C) const {
  return new (C) FormatArgAttr(getLocation(), C, formatIdx);
}

GNUInlineAttr *GNUInlineAttr::clone(ASTContext &C) const {
  return new (C) GNUInlineAttr(getLocation(), C);
}

HidingAttr *HidingAttr::clone(ASTContext &C) const {
  return new (C) HidingAttr(getLocation(), C);
}

IBActionAttr *IBActionAttr::clone(ASTContext &C) const {
  return new (C) IBActionAttr(getLocation(), C);
}

IBOutletAttr *IBOutletAttr::clone(ASTContext &C) const {
  return new (C) IBOutletAttr(getLocation(), C);
}

IBOutletCollectionAttr *IBOutletCollectionAttr::clone(ASTContext &C) const {
  return new (C) IBOutletCollectionAttr(getLocation(), C, interface);
}

InitPriorityAttr *InitPriorityAttr::clone(ASTContext &C) const {
  return new (C) InitPriorityAttr(getLocation(), C, priority);
}

MSP430InterruptAttr *MSP430InterruptAttr::clone(ASTContext &C) const {
  return new (C) MSP430InterruptAttr(getLocation(), C, number);
}

MallocAttr *MallocAttr::clone(ASTContext &C) const {
  return new (C) MallocAttr(getLocation(), C);
}

MaxFieldAlignmentAttr *MaxFieldAlignmentAttr::clone(ASTContext &C) const {
  return new (C) MaxFieldAlignmentAttr(getLocation(), C, alignment);
}

NSReturnsNotRetainedAttr *NSReturnsNotRetainedAttr::clone(ASTContext &C) const {
  return new (C) NSReturnsNotRetainedAttr(getLocation(), C);
}

NSReturnsRetainedAttr *NSReturnsRetainedAttr::clone(ASTContext &C) const {
  return new (C) NSReturnsRetainedAttr(getLocation(), C);
}

NoDebugAttr *NoDebugAttr::clone(ASTContext &C) const {
  return new (C) NoDebugAttr(getLocation(), C);
}

NoInlineAttr *NoInlineAttr::clone(ASTContext &C) const {
  return new (C) NoInlineAttr(getLocation(), C);
}

NoInstrumentFunctionAttr *NoInstrumentFunctionAttr::clone(ASTContext &C) const {
  return new (C) NoInstrumentFunctionAttr(getLocation(), C);
}

NoReturnAttr *NoReturnAttr::clone(ASTContext &C) const {
  return new (C) NoReturnAttr(getLocation(), C);
}

NoThrowAttr *NoThrowAttr::clone(ASTContext &C) const {
  return new (C) NoThrowAttr(getLocation(), C);
}

NonNullAttr *NonNullAttr::clone(ASTContext &C) const {
  return new (C) NonNullAttr(getLocation(), C, args, argsSize);
}

ObjCExceptionAttr *ObjCExceptionAttr::clone(ASTContext &C) const {
  return new (C) ObjCExceptionAttr(getLocation(), C);
}

ObjCNSObjectAttr *ObjCNSObjectAttr::clone(ASTContext &C) const {
  return new (C) ObjCNSObjectAttr(getLocation(), C);
}

OverloadableAttr *OverloadableAttr::clone(ASTContext &C) const {
  return new (C) OverloadableAttr(getLocation(), C);
}

OverrideAttr *OverrideAttr::clone(ASTContext &C) const {
  return new (C) OverrideAttr(getLocation(), C);
}

OwnershipAttr *OwnershipAttr::clone(ASTContext &C) const {
  return new (C) OwnershipAttr(getLocation(), C, ownKind, getModule(), args, argsSize);
}

PackedAttr *PackedAttr::clone(ASTContext &C) const {
  return new (C) PackedAttr(getLocation(), C);
}

PascalAttr *PascalAttr::clone(ASTContext &C) const {
  return new (C) PascalAttr(getLocation(), C);
}

PureAttr *PureAttr::clone(ASTContext &C) const {
  return new (C) PureAttr(getLocation(), C);
}

RegparmAttr *RegparmAttr::clone(ASTContext &C) const {
  return new (C) RegparmAttr(getLocation(), C, numParams);
}

ReqdWorkGroupSizeAttr *ReqdWorkGroupSizeAttr::clone(ASTContext &C) const {
  return new (C) ReqdWorkGroupSizeAttr(getLocation(), C, xDim, yDim, zDim);
}

SectionAttr *SectionAttr::clone(ASTContext &C) const {
  return new (C) SectionAttr(getLocation(), C, getName());
}

SentinelAttr *SentinelAttr::clone(ASTContext &C) const {
  return new (C) SentinelAttr(getLocation(), C, sentinel, nullPos);
}

StdCallAttr *StdCallAttr::clone(ASTContext &C) const {
  return new (C) StdCallAttr(getLocation(), C);
}

ThisCallAttr *ThisCallAttr::clone(ASTContext &C) const {
  return new (C) ThisCallAttr(getLocation(), C);
}

TransparentUnionAttr *TransparentUnionAttr::clone(ASTContext &C) const {
  return new (C) TransparentUnionAttr(getLocation(), C);
}

UnavailableAttr *UnavailableAttr::clone(ASTContext &C) const {
  return new (C) UnavailableAttr(getLocation(), C);
}

UnusedAttr *UnusedAttr::clone(ASTContext &C) const {
  return new (C) UnusedAttr(getLocation(), C);
}

UsedAttr *UsedAttr::clone(ASTContext &C) const {
  return new (C) UsedAttr(getLocation(), C);
}

VecReturnAttr *VecReturnAttr::clone(ASTContext &C) const {
  return new (C) VecReturnAttr(getLocation(), C);
}

VisibilityAttr *VisibilityAttr::clone(ASTContext &C) const {
  return new (C) VisibilityAttr(getLocation(), C, visibility);
}

WarnUnusedResultAttr *WarnUnusedResultAttr::clone(ASTContext &C) const {
  return new (C) WarnUnusedResultAttr(getLocation(), C);
}

WeakAttr *WeakAttr::clone(ASTContext &C) const {
  return new (C) WeakAttr(getLocation(), C);
}

WeakImportAttr *WeakImportAttr::clone(ASTContext &C) const {
  return new (C) WeakImportAttr(getLocation(), C);
}

WeakRefAttr *WeakRefAttr::clone(ASTContext &C) const {
  return new (C) WeakRefAttr(getLocation(), C);
}

X86ForceAlignArgPointerAttr *X86ForceAlignArgPointerAttr::clone(ASTContext &C) const {
  return new (C) X86ForceAlignArgPointerAttr(getLocation(), C);
}

