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

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

void AcquiredAfterAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((acquired_after(";
  bool isFirst = true;
  for (AcquiredAfterAttr::args_iterator i = args_begin(), e = args_end(); i != e; ++i) {
    if (isFirst) isFirst = false;
    else OS << ", ";
    OS << *i;
  }
  OS << ")))";
}

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

void AcquiredBeforeAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((acquired_before(";
  bool isFirst = true;
  for (AcquiredBeforeAttr::args_iterator i = args_begin(), e = args_end(); i != e; ++i) {
    if (isFirst) isFirst = false;
    else OS << ", ";
    OS << *i;
  }
  OS << ")))";
}

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

void AliasAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((alias(\"" << getAliasee() << "\")))";
}

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

void AlignMac68kAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
}

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->EvaluateKnownConstInt(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);
}

void AlignedAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((aligned(" << getAlignment(Ctx) << ")))";
}

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

void AlwaysInlineAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((always_inline))";
}

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

void AnalyzerNoReturnAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((analyzer_noreturn))";
}

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

void AnnotateAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((annotate(\"" << getAnnotation() << "\")))";
}

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

void ArcWeakrefUnavailableAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((objc_arc_weak_reference_unavailable))";
}

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

void AsmLabelAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
}

AvailabilityAttr *AvailabilityAttr::clone(ASTContext &C) const {
  return new (C) AvailabilityAttr(getLocation(), C, platform, getIntroduced(), getDeprecated(), getObsoleted(), unavailable, getMessage());
}

void AvailabilityAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((availability(" << getPlatform()->getName();
  if (!getIntroduced().empty()) OS << ", introduced=" << getIntroduced();
  if (!getDeprecated().empty()) OS << ", deprecated=" << getDeprecated();
  if (!getObsoleted().empty()) OS << ", obsoleted=" << getObsoleted();
  if (getUnavailable()) OS << ", unavailable";
  OS << ")))";
}

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

void BlocksAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((blocks(" << getType() << ")))";
}

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

void CDeclAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((cdecl))";
}

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

void CFAuditedTransferAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((cf_audited_transfer))";
}

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

void CFConsumedAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((cf_consumed))";
}

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

void CFReturnsNotRetainedAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((cf_returns_not_retained))";
}

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

void CFReturnsRetainedAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((cf_returns_retained))";
}

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

void CFUnknownTransferAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((cf_unknown_transfer))";
}

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

void CUDAConstantAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((constant))";
}

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

void CUDADeviceAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((device))";
}

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

void CUDAGlobalAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((global))";
}

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

void CUDAHostAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((host))";
}

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

void CUDALaunchBoundsAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((launch_bounds(" << getMaxThreads() << ", " << getMinBlocks() << ")))";
}

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

void CUDASharedAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((shared))";
}

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

void CarriesDependencyAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((carries_dependency))";
}

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

void CleanupAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((cleanup(" << getFunctionDecl()->getNameInfo().getAsString() << ")))";
}

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

void CommonAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((common))";
}

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

void ConstAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((const))";
}

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

void ConstructorAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((constructor(" << getPriority() << ")))";
}

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

void DLLExportAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((dllexport))";
}

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

void DLLImportAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((dllimport))";
}

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

void DeprecatedAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((deprecated(\"" << getMessage() << "\")))";
}

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

void DestructorAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((destructor(" << getPriority() << ")))";
}

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

void ExclusiveLockFunctionAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((exclusive_lock_function(";
  bool isFirst = true;
  for (ExclusiveLockFunctionAttr::args_iterator i = args_begin(), e = args_end(); i != e; ++i) {
    if (isFirst) isFirst = false;
    else OS << ", ";
    OS << *i;
  }
  OS << ")))";
}

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

void ExclusiveLocksRequiredAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((exclusive_locks_required(";
  bool isFirst = true;
  for (ExclusiveLocksRequiredAttr::args_iterator i = args_begin(), e = args_end(); i != e; ++i) {
    if (isFirst) isFirst = false;
    else OS << ", ";
    OS << *i;
  }
  OS << ")))";
}

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

void ExclusiveTrylockFunctionAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((exclusive_trylock_function(" << getSuccessValue() << ", ";
  bool isFirst = true;
  for (ExclusiveTrylockFunctionAttr::args_iterator i = args_begin(), e = args_end(); i != e; ++i) {
    if (isFirst) isFirst = false;
    else OS << ", ";
    OS << *i;
  }
  OS << ")))";
}

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

void FastCallAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((fastcall))";
}

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

void FinalAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
}

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

void FormatAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((format(\"" << getType() << "\", " << getFormatIdx() << ", " << getFirstArg() << ")))";
}

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

void FormatArgAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((format_arg(" << getFormatIdx() << ")))";
}

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

void GNUInlineAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((gnu_inline))";
}

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

void GuardedByAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((guarded_by(" << getArg() << ")))";
}

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

void GuardedVarAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((guarded_var))";
}

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

void IBActionAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((ibaction))";
}

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

void IBOutletAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((iboutlet))";
}

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

void IBOutletCollectionAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((iboutletcollection(" << getInterface().getAsString() << ", " << getInterfaceLoc().getRawEncoding() << ")))";
}

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

void InitPriorityAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((init_priority(" << getPriority() << ")))";
}

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

void LockReturnedAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((lock_returned(" << getArg() << ")))";
}

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

void LockableAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((lockable))";
}

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

void LocksExcludedAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((locks_excluded(";
  bool isFirst = true;
  for (LocksExcludedAttr::args_iterator i = args_begin(), e = args_end(); i != e; ++i) {
    if (isFirst) isFirst = false;
    else OS << ", ";
    OS << *i;
  }
  OS << ")))";
}

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

void MBlazeInterruptHandlerAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
}

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

void MBlazeSaveVolatilesAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
}

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

void MSP430InterruptAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
}

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

void MallocAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((malloc))";
}

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

void MaxFieldAlignmentAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
}

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

void MayAliasAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((may_alias))";
}

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

void MsStructAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((__ms_struct__))";
}

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

void NSBridgedAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((ns_bridged(" << getBridgedType()->getName() << ")))";
}

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

void NSConsumedAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((ns_consumed))";
}

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

void NSConsumesSelfAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((ns_consumes_self))";
}

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

void NSReturnsAutoreleasedAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((ns_returns_autoreleased))";
}

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

void NSReturnsNotRetainedAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((ns_returns_not_retained))";
}

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

void NSReturnsRetainedAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((ns_returns_retained))";
}

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

void NakedAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((naked))";
}

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

void NoAddressSafetyAnalysisAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((no_address_safety_analysis))";
}

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

void NoCommonAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((nocommon))";
}

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

void NoDebugAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((nodebug))";
}

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

void NoInlineAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((noinline))";
}

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

void NoInstrumentFunctionAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((no_instrument_function))";
}

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

void NoReturnAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((noreturn))";
}

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

void NoThreadSafetyAnalysisAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((no_thread_safety_analysis))";
}

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

void NoThrowAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((nothrow))";
}

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

void NonNullAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((nonnull(";
  bool isFirst = true;
  for (NonNullAttr::args_iterator i = args_begin(), e = args_end(); i != e; ++i) {
    if (isFirst) isFirst = false;
    else OS << ", ";
    OS << *i;
  }
  OS << ")))";
}

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

void ObjCExceptionAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((objc_exception))";
}

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

void ObjCMethodFamilyAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((objc_method_family(" << getFamily() << ")))";
}

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

void ObjCNSObjectAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((NSObject))";
}

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

void ObjCPreciseLifetimeAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((objc_precise_lifetime))";
}

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

void ObjCRequiresPropertyDefsAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((objc_requires_property_definitions))";
}

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

void ObjCReturnsInnerPointerAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((objc_returns_inner_pointer))";
}

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

void ObjCRootClassAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((objc_root_class))";
}

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

void OpenCLKernelAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((opencl_kernel_function))";
}

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

void OverloadableAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((overloadable))";
}

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

void OverrideAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
}

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

void OwnershipAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((ownership_holds(" << getOwnKind() << ", \"" << getModule() << "\", ";
  bool isFirst = true;
  for (OwnershipAttr::args_iterator i = args_begin(), e = args_end(); i != e; ++i) {
    if (isFirst) isFirst = false;
    else OS << ", ";
    OS << *i;
  }
  OS << ")))";
}

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

void PackedAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((packed))";
}

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

void PascalAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((pascal))";
}

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

void PcsAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((pcs(" << getPCS() << ")))";
}

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

void PtGuardedByAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((pt_guarded_by(" << getArg() << ")))";
}

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

void PtGuardedVarAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((pt_guarded_var))";
}

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

void PureAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((pure))";
}

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

void RegparmAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((regparm(" << getNumParams() << ")))";
}

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

void ReqdWorkGroupSizeAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((reqd_work_group_size(" << getXDim() << ", " << getYDim() << ", " << getZDim() << ")))";
}

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

void ReturnsTwiceAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((returns_twice))";
}

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

void ScopedLockableAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((scoped_lockable))";
}

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

void SectionAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((section(\"" << getName() << "\")))";
}

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

void SentinelAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((sentinel(" << getSentinel() << ", " << getNullPos() << ")))";
}

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

void SharedLockFunctionAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((shared_lock_function(";
  bool isFirst = true;
  for (SharedLockFunctionAttr::args_iterator i = args_begin(), e = args_end(); i != e; ++i) {
    if (isFirst) isFirst = false;
    else OS << ", ";
    OS << *i;
  }
  OS << ")))";
}

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

void SharedLocksRequiredAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((shared_locks_required(";
  bool isFirst = true;
  for (SharedLocksRequiredAttr::args_iterator i = args_begin(), e = args_end(); i != e; ++i) {
    if (isFirst) isFirst = false;
    else OS << ", ";
    OS << *i;
  }
  OS << ")))";
}

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

void SharedTrylockFunctionAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((shared_trylock_function(" << getSuccessValue() << ", ";
  bool isFirst = true;
  for (SharedTrylockFunctionAttr::args_iterator i = args_begin(), e = args_end(); i != e; ++i) {
    if (isFirst) isFirst = false;
    else OS << ", ";
    OS << *i;
  }
  OS << ")))";
}

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

void StdCallAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((stdcall))";
}

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

void ThisCallAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((thiscall))";
}

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

void TransparentUnionAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((transparent_union))";
}

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

void UnavailableAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((unavailable(\"" << getMessage() << "\")))";
}

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

void UnlockFunctionAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((unlock_function(";
  bool isFirst = true;
  for (UnlockFunctionAttr::args_iterator i = args_begin(), e = args_end(); i != e; ++i) {
    if (isFirst) isFirst = false;
    else OS << ", ";
    OS << *i;
  }
  OS << ")))";
}

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

void UnusedAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((unused))";
}

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

void UsedAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((used))";
}

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

void UuidAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((uuid(\"" << getGuid() << "\")))";
}

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

void VecReturnAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((vecreturn))";
}

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

void VisibilityAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((visibility(" << getVisibility() << ")))";
}

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

void WarnUnusedResultAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((warn_unused_result))";
}

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

void WeakAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((weak))";
}

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

void WeakImportAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((weak_import))";
}

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

void WeakRefAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
  OS << " __attribute__((weakref))";
}

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

void X86ForceAlignArgPointerAttr::printPretty(llvm::raw_ostream &OS, ASTContext &Ctx) const {
}

