llvm/clang/lib/AST/StmtProfile.cpp

//===---- StmtProfile.cpp - Profile implementation for Stmt ASTs ----------===//
//
// 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
//
//===----------------------------------------------------------------------===//
//
// This file implements the Stmt::Profile method, which builds a unique bit
// representation that identifies a statement/expression.
//
//===----------------------------------------------------------------------===//
#include "clang/AST/ASTContext.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/ExprObjC.h"
#include "clang/AST/ExprOpenMP.h"
#include "clang/AST/ODRHash.h"
#include "clang/AST/OpenMPClause.h"
#include "clang/AST/StmtVisitor.h"
#include "llvm/ADT/FoldingSet.h"
usingnamespaceclang;

namespace {
  class StmtProfiler : public ConstStmtVisitor<StmtProfiler> {};

  class StmtProfilerWithPointers : public StmtProfiler {};

  class StmtProfilerWithoutPointers : public StmtProfiler {};
}

void StmtProfiler::VisitStmt(const Stmt *S) {}

void StmtProfiler::VisitDeclStmt(const DeclStmt *S) {}

void StmtProfiler::VisitNullStmt(const NullStmt *S) {}

void StmtProfiler::VisitCompoundStmt(const CompoundStmt *S) {}

void StmtProfiler::VisitCaseStmt(const CaseStmt *S) {}

void StmtProfiler::VisitDefaultStmt(const DefaultStmt *S) {}

void StmtProfiler::VisitLabelStmt(const LabelStmt *S) {}

void StmtProfiler::VisitAttributedStmt(const AttributedStmt *S) {}

void StmtProfiler::VisitIfStmt(const IfStmt *S) {}

void StmtProfiler::VisitSwitchStmt(const SwitchStmt *S) {}

void StmtProfiler::VisitWhileStmt(const WhileStmt *S) {}

void StmtProfiler::VisitDoStmt(const DoStmt *S) {}

void StmtProfiler::VisitForStmt(const ForStmt *S) {}

void StmtProfiler::VisitGotoStmt(const GotoStmt *S) {}

void StmtProfiler::VisitIndirectGotoStmt(const IndirectGotoStmt *S) {}

void StmtProfiler::VisitContinueStmt(const ContinueStmt *S) {}

void StmtProfiler::VisitBreakStmt(const BreakStmt *S) {}

void StmtProfiler::VisitReturnStmt(const ReturnStmt *S) {}

void StmtProfiler::VisitGCCAsmStmt(const GCCAsmStmt *S) {}

void StmtProfiler::VisitMSAsmStmt(const MSAsmStmt *S) {}

void StmtProfiler::VisitCXXCatchStmt(const CXXCatchStmt *S) {}

void StmtProfiler::VisitCXXTryStmt(const CXXTryStmt *S) {}

void StmtProfiler::VisitCXXForRangeStmt(const CXXForRangeStmt *S) {}

void StmtProfiler::VisitMSDependentExistsStmt(const MSDependentExistsStmt *S) {}

void StmtProfiler::VisitSEHTryStmt(const SEHTryStmt *S) {}

void StmtProfiler::VisitSEHFinallyStmt(const SEHFinallyStmt *S) {}

void StmtProfiler::VisitSEHExceptStmt(const SEHExceptStmt *S) {}

void StmtProfiler::VisitSEHLeaveStmt(const SEHLeaveStmt *S) {}

void StmtProfiler::VisitCapturedStmt(const CapturedStmt *S) {}

void StmtProfiler::VisitObjCForCollectionStmt(const ObjCForCollectionStmt *S) {}

void StmtProfiler::VisitObjCAtCatchStmt(const ObjCAtCatchStmt *S) {}

void StmtProfiler::VisitObjCAtFinallyStmt(const ObjCAtFinallyStmt *S) {}

void StmtProfiler::VisitObjCAtTryStmt(const ObjCAtTryStmt *S) {}

void
StmtProfiler::VisitObjCAtSynchronizedStmt(const ObjCAtSynchronizedStmt *S) {}

void StmtProfiler::VisitObjCAtThrowStmt(const ObjCAtThrowStmt *S) {}

void
StmtProfiler::VisitObjCAutoreleasePoolStmt(const ObjCAutoreleasePoolStmt *S) {}

namespace {
class OMPClauseProfiler : public ConstOMPClauseVisitor<OMPClauseProfiler> {};

void OMPClauseProfiler::VistOMPClauseWithPreInit(
    const OMPClauseWithPreInit *C) {}

void OMPClauseProfiler::VistOMPClauseWithPostUpdate(
    const OMPClauseWithPostUpdate *C) {}

void OMPClauseProfiler::VisitOMPIfClause(const OMPIfClause *C) {}

void OMPClauseProfiler::VisitOMPFinalClause(const OMPFinalClause *C) {}

void OMPClauseProfiler::VisitOMPNumThreadsClause(const OMPNumThreadsClause *C) {}

void OMPClauseProfiler::VisitOMPAlignClause(const OMPAlignClause *C) {}

void OMPClauseProfiler::VisitOMPSafelenClause(const OMPSafelenClause *C) {}

void OMPClauseProfiler::VisitOMPSimdlenClause(const OMPSimdlenClause *C) {}

void OMPClauseProfiler::VisitOMPSizesClause(const OMPSizesClause *C) {}

void OMPClauseProfiler::VisitOMPFullClause(const OMPFullClause *C) {}

void OMPClauseProfiler::VisitOMPPartialClause(const OMPPartialClause *C) {}

void OMPClauseProfiler::VisitOMPAllocatorClause(const OMPAllocatorClause *C) {}

void OMPClauseProfiler::VisitOMPCollapseClause(const OMPCollapseClause *C) {}

void OMPClauseProfiler::VisitOMPDetachClause(const OMPDetachClause *C) {}

void OMPClauseProfiler::VisitOMPNovariantsClause(const OMPNovariantsClause *C) {}

void OMPClauseProfiler::VisitOMPNocontextClause(const OMPNocontextClause *C) {}

void OMPClauseProfiler::VisitOMPDefaultClause(const OMPDefaultClause *C) {}

void OMPClauseProfiler::VisitOMPProcBindClause(const OMPProcBindClause *C) {}

void OMPClauseProfiler::VisitOMPUnifiedAddressClause(
    const OMPUnifiedAddressClause *C) {}

void OMPClauseProfiler::VisitOMPUnifiedSharedMemoryClause(
    const OMPUnifiedSharedMemoryClause *C) {}

void OMPClauseProfiler::VisitOMPReverseOffloadClause(
    const OMPReverseOffloadClause *C) {}

void OMPClauseProfiler::VisitOMPDynamicAllocatorsClause(
    const OMPDynamicAllocatorsClause *C) {}

void OMPClauseProfiler::VisitOMPAtomicDefaultMemOrderClause(
    const OMPAtomicDefaultMemOrderClause *C) {}

void OMPClauseProfiler::VisitOMPAtClause(const OMPAtClause *C) {}

void OMPClauseProfiler::VisitOMPSeverityClause(const OMPSeverityClause *C) {}

void OMPClauseProfiler::VisitOMPMessageClause(const OMPMessageClause *C) {}

void OMPClauseProfiler::VisitOMPScheduleClause(const OMPScheduleClause *C) {}

void OMPClauseProfiler::VisitOMPOrderedClause(const OMPOrderedClause *C) {}

void OMPClauseProfiler::VisitOMPNowaitClause(const OMPNowaitClause *) {}

void OMPClauseProfiler::VisitOMPUntiedClause(const OMPUntiedClause *) {}

void OMPClauseProfiler::VisitOMPMergeableClause(const OMPMergeableClause *) {}

void OMPClauseProfiler::VisitOMPReadClause(const OMPReadClause *) {}

void OMPClauseProfiler::VisitOMPWriteClause(const OMPWriteClause *) {}

void OMPClauseProfiler::VisitOMPUpdateClause(const OMPUpdateClause *) {}

void OMPClauseProfiler::VisitOMPCaptureClause(const OMPCaptureClause *) {}

void OMPClauseProfiler::VisitOMPCompareClause(const OMPCompareClause *) {}

void OMPClauseProfiler::VisitOMPFailClause(const OMPFailClause *) {}

void OMPClauseProfiler::VisitOMPAbsentClause(const OMPAbsentClause *) {}

void OMPClauseProfiler::VisitOMPHoldsClause(const OMPHoldsClause *) {}

void OMPClauseProfiler::VisitOMPContainsClause(const OMPContainsClause *) {}

void OMPClauseProfiler::VisitOMPNoOpenMPClause(const OMPNoOpenMPClause *) {}

void OMPClauseProfiler::VisitOMPNoOpenMPRoutinesClause(
    const OMPNoOpenMPRoutinesClause *) {}

void OMPClauseProfiler::VisitOMPNoParallelismClause(
    const OMPNoParallelismClause *) {}

void OMPClauseProfiler::VisitOMPSeqCstClause(const OMPSeqCstClause *) {}

void OMPClauseProfiler::VisitOMPAcqRelClause(const OMPAcqRelClause *) {}

void OMPClauseProfiler::VisitOMPAcquireClause(const OMPAcquireClause *) {}

void OMPClauseProfiler::VisitOMPReleaseClause(const OMPReleaseClause *) {}

void OMPClauseProfiler::VisitOMPRelaxedClause(const OMPRelaxedClause *) {}

void OMPClauseProfiler::VisitOMPWeakClause(const OMPWeakClause *) {}

void OMPClauseProfiler::VisitOMPThreadsClause(const OMPThreadsClause *) {}

void OMPClauseProfiler::VisitOMPSIMDClause(const OMPSIMDClause *) {}

void OMPClauseProfiler::VisitOMPNogroupClause(const OMPNogroupClause *) {}

void OMPClauseProfiler::VisitOMPInitClause(const OMPInitClause *C) {}

void OMPClauseProfiler::VisitOMPUseClause(const OMPUseClause *C) {}

void OMPClauseProfiler::VisitOMPDestroyClause(const OMPDestroyClause *C) {}

void OMPClauseProfiler::VisitOMPFilterClause(const OMPFilterClause *C) {}

template<typename T>
void OMPClauseProfiler::VisitOMPClauseList(T *Node) {}

void OMPClauseProfiler::VisitOMPPrivateClause(const OMPPrivateClause *C) {}
void
OMPClauseProfiler::VisitOMPFirstprivateClause(const OMPFirstprivateClause *C) {}
void
OMPClauseProfiler::VisitOMPLastprivateClause(const OMPLastprivateClause *C) {}
void OMPClauseProfiler::VisitOMPSharedClause(const OMPSharedClause *C) {}
void OMPClauseProfiler::VisitOMPReductionClause(
                                         const OMPReductionClause *C) {}
void OMPClauseProfiler::VisitOMPTaskReductionClause(
    const OMPTaskReductionClause *C) {}
void OMPClauseProfiler::VisitOMPInReductionClause(
    const OMPInReductionClause *C) {}
void OMPClauseProfiler::VisitOMPLinearClause(const OMPLinearClause *C) {}
void OMPClauseProfiler::VisitOMPAlignedClause(const OMPAlignedClause *C) {}
void OMPClauseProfiler::VisitOMPCopyinClause(const OMPCopyinClause *C) {}
void
OMPClauseProfiler::VisitOMPCopyprivateClause(const OMPCopyprivateClause *C) {}
void OMPClauseProfiler::VisitOMPFlushClause(const OMPFlushClause *C) {}
void OMPClauseProfiler::VisitOMPDepobjClause(const OMPDepobjClause *C) {}
void OMPClauseProfiler::VisitOMPDependClause(const OMPDependClause *C) {}
void OMPClauseProfiler::VisitOMPDeviceClause(const OMPDeviceClause *C) {}
void OMPClauseProfiler::VisitOMPMapClause(const OMPMapClause *C) {}
void OMPClauseProfiler::VisitOMPAllocateClause(const OMPAllocateClause *C) {}
void OMPClauseProfiler::VisitOMPNumTeamsClause(const OMPNumTeamsClause *C) {}
void OMPClauseProfiler::VisitOMPThreadLimitClause(
    const OMPThreadLimitClause *C) {}
void OMPClauseProfiler::VisitOMPPriorityClause(const OMPPriorityClause *C) {}
void OMPClauseProfiler::VisitOMPGrainsizeClause(const OMPGrainsizeClause *C) {}
void OMPClauseProfiler::VisitOMPNumTasksClause(const OMPNumTasksClause *C) {}
void OMPClauseProfiler::VisitOMPHintClause(const OMPHintClause *C) {}
void OMPClauseProfiler::VisitOMPToClause(const OMPToClause *C) {}
void OMPClauseProfiler::VisitOMPFromClause(const OMPFromClause *C) {}
void OMPClauseProfiler::VisitOMPUseDevicePtrClause(
    const OMPUseDevicePtrClause *C) {}
void OMPClauseProfiler::VisitOMPUseDeviceAddrClause(
    const OMPUseDeviceAddrClause *C) {}
void OMPClauseProfiler::VisitOMPIsDevicePtrClause(
    const OMPIsDevicePtrClause *C) {}
void OMPClauseProfiler::VisitOMPHasDeviceAddrClause(
    const OMPHasDeviceAddrClause *C) {}
void OMPClauseProfiler::VisitOMPNontemporalClause(
    const OMPNontemporalClause *C) {}
void OMPClauseProfiler::VisitOMPInclusiveClause(const OMPInclusiveClause *C) {}
void OMPClauseProfiler::VisitOMPExclusiveClause(const OMPExclusiveClause *C) {}
void OMPClauseProfiler::VisitOMPUsesAllocatorsClause(
    const OMPUsesAllocatorsClause *C) {}
void OMPClauseProfiler::VisitOMPAffinityClause(const OMPAffinityClause *C) {}
void OMPClauseProfiler::VisitOMPOrderClause(const OMPOrderClause *C) {}
void OMPClauseProfiler::VisitOMPBindClause(const OMPBindClause *C) {}
void OMPClauseProfiler::VisitOMPXDynCGroupMemClause(
    const OMPXDynCGroupMemClause *C) {}
void OMPClauseProfiler::VisitOMPDoacrossClause(const OMPDoacrossClause *C) {}
void OMPClauseProfiler::VisitOMPXAttributeClause(const OMPXAttributeClause *C) {}
void OMPClauseProfiler::VisitOMPXBareClause(const OMPXBareClause *C) {}
} // namespace

void
StmtProfiler::VisitOMPExecutableDirective(const OMPExecutableDirective *S) {}

void StmtProfiler::VisitOMPCanonicalLoop(const OMPCanonicalLoop *L) {}

void StmtProfiler::VisitOMPLoopBasedDirective(const OMPLoopBasedDirective *S) {}

void StmtProfiler::VisitOMPLoopDirective(const OMPLoopDirective *S) {}

void StmtProfiler::VisitOMPMetaDirective(const OMPMetaDirective *S) {}

void StmtProfiler::VisitOMPParallelDirective(const OMPParallelDirective *S) {}

void StmtProfiler::VisitOMPSimdDirective(const OMPSimdDirective *S) {}

void StmtProfiler::VisitOMPLoopTransformationDirective(
    const OMPLoopTransformationDirective *S) {}

void StmtProfiler::VisitOMPTileDirective(const OMPTileDirective *S) {}

void StmtProfiler::VisitOMPUnrollDirective(const OMPUnrollDirective *S) {}

void StmtProfiler::VisitOMPReverseDirective(const OMPReverseDirective *S) {}

void StmtProfiler::VisitOMPInterchangeDirective(
    const OMPInterchangeDirective *S) {}

void StmtProfiler::VisitOMPForDirective(const OMPForDirective *S) {}

void StmtProfiler::VisitOMPForSimdDirective(const OMPForSimdDirective *S) {}

void StmtProfiler::VisitOMPSectionsDirective(const OMPSectionsDirective *S) {}

void StmtProfiler::VisitOMPSectionDirective(const OMPSectionDirective *S) {}

void StmtProfiler::VisitOMPScopeDirective(const OMPScopeDirective *S) {}

void StmtProfiler::VisitOMPSingleDirective(const OMPSingleDirective *S) {}

void StmtProfiler::VisitOMPMasterDirective(const OMPMasterDirective *S) {}

void StmtProfiler::VisitOMPCriticalDirective(const OMPCriticalDirective *S) {}

void
StmtProfiler::VisitOMPParallelForDirective(const OMPParallelForDirective *S) {}

void StmtProfiler::VisitOMPParallelForSimdDirective(
    const OMPParallelForSimdDirective *S) {}

void StmtProfiler::VisitOMPParallelMasterDirective(
    const OMPParallelMasterDirective *S) {}

void StmtProfiler::VisitOMPParallelMaskedDirective(
    const OMPParallelMaskedDirective *S) {}

void StmtProfiler::VisitOMPParallelSectionsDirective(
    const OMPParallelSectionsDirective *S) {}

void StmtProfiler::VisitOMPTaskDirective(const OMPTaskDirective *S) {}

void StmtProfiler::VisitOMPTaskyieldDirective(const OMPTaskyieldDirective *S) {}

void StmtProfiler::VisitOMPBarrierDirective(const OMPBarrierDirective *S) {}

void StmtProfiler::VisitOMPTaskwaitDirective(const OMPTaskwaitDirective *S) {}

void StmtProfiler::VisitOMPAssumeDirective(const OMPAssumeDirective *S) {}

void StmtProfiler::VisitOMPErrorDirective(const OMPErrorDirective *S) {}
void StmtProfiler::VisitOMPTaskgroupDirective(const OMPTaskgroupDirective *S) {}

void StmtProfiler::VisitOMPFlushDirective(const OMPFlushDirective *S) {}

void StmtProfiler::VisitOMPDepobjDirective(const OMPDepobjDirective *S) {}

void StmtProfiler::VisitOMPScanDirective(const OMPScanDirective *S) {}

void StmtProfiler::VisitOMPOrderedDirective(const OMPOrderedDirective *S) {}

void StmtProfiler::VisitOMPAtomicDirective(const OMPAtomicDirective *S) {}

void StmtProfiler::VisitOMPTargetDirective(const OMPTargetDirective *S) {}

void StmtProfiler::VisitOMPTargetDataDirective(const OMPTargetDataDirective *S) {}

void StmtProfiler::VisitOMPTargetEnterDataDirective(
    const OMPTargetEnterDataDirective *S) {}

void StmtProfiler::VisitOMPTargetExitDataDirective(
    const OMPTargetExitDataDirective *S) {}

void StmtProfiler::VisitOMPTargetParallelDirective(
    const OMPTargetParallelDirective *S) {}

void StmtProfiler::VisitOMPTargetParallelForDirective(
    const OMPTargetParallelForDirective *S) {}

void StmtProfiler::VisitOMPTeamsDirective(const OMPTeamsDirective *S) {}

void StmtProfiler::VisitOMPCancellationPointDirective(
    const OMPCancellationPointDirective *S) {}

void StmtProfiler::VisitOMPCancelDirective(const OMPCancelDirective *S) {}

void StmtProfiler::VisitOMPTaskLoopDirective(const OMPTaskLoopDirective *S) {}

void StmtProfiler::VisitOMPTaskLoopSimdDirective(
    const OMPTaskLoopSimdDirective *S) {}

void StmtProfiler::VisitOMPMasterTaskLoopDirective(
    const OMPMasterTaskLoopDirective *S) {}

void StmtProfiler::VisitOMPMaskedTaskLoopDirective(
    const OMPMaskedTaskLoopDirective *S) {}

void StmtProfiler::VisitOMPMasterTaskLoopSimdDirective(
    const OMPMasterTaskLoopSimdDirective *S) {}

void StmtProfiler::VisitOMPMaskedTaskLoopSimdDirective(
    const OMPMaskedTaskLoopSimdDirective *S) {}

void StmtProfiler::VisitOMPParallelMasterTaskLoopDirective(
    const OMPParallelMasterTaskLoopDirective *S) {}

void StmtProfiler::VisitOMPParallelMaskedTaskLoopDirective(
    const OMPParallelMaskedTaskLoopDirective *S) {}

void StmtProfiler::VisitOMPParallelMasterTaskLoopSimdDirective(
    const OMPParallelMasterTaskLoopSimdDirective *S) {}

void StmtProfiler::VisitOMPParallelMaskedTaskLoopSimdDirective(
    const OMPParallelMaskedTaskLoopSimdDirective *S) {}

void StmtProfiler::VisitOMPDistributeDirective(
    const OMPDistributeDirective *S) {}

void OMPClauseProfiler::VisitOMPDistScheduleClause(
    const OMPDistScheduleClause *C) {}

void OMPClauseProfiler::VisitOMPDefaultmapClause(const OMPDefaultmapClause *) {}

void StmtProfiler::VisitOMPTargetUpdateDirective(
    const OMPTargetUpdateDirective *S) {}

void StmtProfiler::VisitOMPDistributeParallelForDirective(
    const OMPDistributeParallelForDirective *S) {}

void StmtProfiler::VisitOMPDistributeParallelForSimdDirective(
    const OMPDistributeParallelForSimdDirective *S) {}

void StmtProfiler::VisitOMPDistributeSimdDirective(
    const OMPDistributeSimdDirective *S) {}

void StmtProfiler::VisitOMPTargetParallelForSimdDirective(
    const OMPTargetParallelForSimdDirective *S) {}

void StmtProfiler::VisitOMPTargetSimdDirective(
    const OMPTargetSimdDirective *S) {}

void StmtProfiler::VisitOMPTeamsDistributeDirective(
    const OMPTeamsDistributeDirective *S) {}

void StmtProfiler::VisitOMPTeamsDistributeSimdDirective(
    const OMPTeamsDistributeSimdDirective *S) {}

void StmtProfiler::VisitOMPTeamsDistributeParallelForSimdDirective(
    const OMPTeamsDistributeParallelForSimdDirective *S) {}

void StmtProfiler::VisitOMPTeamsDistributeParallelForDirective(
    const OMPTeamsDistributeParallelForDirective *S) {}

void StmtProfiler::VisitOMPTargetTeamsDirective(
    const OMPTargetTeamsDirective *S) {}

void StmtProfiler::VisitOMPTargetTeamsDistributeDirective(
    const OMPTargetTeamsDistributeDirective *S) {}

void StmtProfiler::VisitOMPTargetTeamsDistributeParallelForDirective(
    const OMPTargetTeamsDistributeParallelForDirective *S) {}

void StmtProfiler::VisitOMPTargetTeamsDistributeParallelForSimdDirective(
    const OMPTargetTeamsDistributeParallelForSimdDirective *S) {}

void StmtProfiler::VisitOMPTargetTeamsDistributeSimdDirective(
    const OMPTargetTeamsDistributeSimdDirective *S) {}

void StmtProfiler::VisitOMPInteropDirective(const OMPInteropDirective *S) {}

void StmtProfiler::VisitOMPDispatchDirective(const OMPDispatchDirective *S) {}

void StmtProfiler::VisitOMPMaskedDirective(const OMPMaskedDirective *S) {}

void StmtProfiler::VisitOMPGenericLoopDirective(
    const OMPGenericLoopDirective *S) {}

void StmtProfiler::VisitOMPTeamsGenericLoopDirective(
    const OMPTeamsGenericLoopDirective *S) {}

void StmtProfiler::VisitOMPTargetTeamsGenericLoopDirective(
    const OMPTargetTeamsGenericLoopDirective *S) {}

void StmtProfiler::VisitOMPParallelGenericLoopDirective(
    const OMPParallelGenericLoopDirective *S) {}

void StmtProfiler::VisitOMPTargetParallelGenericLoopDirective(
    const OMPTargetParallelGenericLoopDirective *S) {}

void StmtProfiler::VisitExpr(const Expr *S) {}

void StmtProfiler::VisitConstantExpr(const ConstantExpr *S) {}

void StmtProfiler::VisitDeclRefExpr(const DeclRefExpr *S) {}

void StmtProfiler::VisitSYCLUniqueStableNameExpr(
    const SYCLUniqueStableNameExpr *S) {}

void StmtProfiler::VisitPredefinedExpr(const PredefinedExpr *S) {}

void StmtProfiler::VisitIntegerLiteral(const IntegerLiteral *S) {}

void StmtProfiler::VisitFixedPointLiteral(const FixedPointLiteral *S) {}

void StmtProfiler::VisitCharacterLiteral(const CharacterLiteral *S) {}

void StmtProfiler::VisitFloatingLiteral(const FloatingLiteral *S) {}

void StmtProfiler::VisitImaginaryLiteral(const ImaginaryLiteral *S) {}

void StmtProfiler::VisitStringLiteral(const StringLiteral *S) {}

void StmtProfiler::VisitParenExpr(const ParenExpr *S) {}

void StmtProfiler::VisitParenListExpr(const ParenListExpr *S) {}

void StmtProfiler::VisitUnaryOperator(const UnaryOperator *S) {}

void StmtProfiler::VisitOffsetOfExpr(const OffsetOfExpr *S) {}

void
StmtProfiler::VisitUnaryExprOrTypeTraitExpr(const UnaryExprOrTypeTraitExpr *S) {}

void StmtProfiler::VisitArraySubscriptExpr(const ArraySubscriptExpr *S) {}

void StmtProfiler::VisitMatrixSubscriptExpr(const MatrixSubscriptExpr *S) {}

void StmtProfiler::VisitArraySectionExpr(const ArraySectionExpr *S) {}

void StmtProfiler::VisitOMPArrayShapingExpr(const OMPArrayShapingExpr *S) {}

void StmtProfiler::VisitOMPIteratorExpr(const OMPIteratorExpr *S) {}

void StmtProfiler::VisitCallExpr(const CallExpr *S) {}

void StmtProfiler::VisitMemberExpr(const MemberExpr *S) {}

void StmtProfiler::VisitCompoundLiteralExpr(const CompoundLiteralExpr *S) {}

void StmtProfiler::VisitCastExpr(const CastExpr *S) {}

void StmtProfiler::VisitImplicitCastExpr(const ImplicitCastExpr *S) {}

void StmtProfiler::VisitExplicitCastExpr(const ExplicitCastExpr *S) {}

void StmtProfiler::VisitCStyleCastExpr(const CStyleCastExpr *S) {}

void StmtProfiler::VisitBinaryOperator(const BinaryOperator *S) {}

void
StmtProfiler::VisitCompoundAssignOperator(const CompoundAssignOperator *S) {}

void StmtProfiler::VisitConditionalOperator(const ConditionalOperator *S) {}

void StmtProfiler::VisitBinaryConditionalOperator(
    const BinaryConditionalOperator *S) {}

void StmtProfiler::VisitAddrLabelExpr(const AddrLabelExpr *S) {}

void StmtProfiler::VisitStmtExpr(const StmtExpr *S) {}

void StmtProfiler::VisitShuffleVectorExpr(const ShuffleVectorExpr *S) {}

void StmtProfiler::VisitConvertVectorExpr(const ConvertVectorExpr *S) {}

void StmtProfiler::VisitChooseExpr(const ChooseExpr *S) {}

void StmtProfiler::VisitGNUNullExpr(const GNUNullExpr *S) {}

void StmtProfiler::VisitVAArgExpr(const VAArgExpr *S) {}

void StmtProfiler::VisitInitListExpr(const InitListExpr *S) {}

void StmtProfiler::VisitDesignatedInitExpr(const DesignatedInitExpr *S) {}

// Seems that if VisitInitListExpr() only works on the syntactic form of an
// InitListExpr, then a DesignatedInitUpdateExpr is not encountered.
void StmtProfiler::VisitDesignatedInitUpdateExpr(
    const DesignatedInitUpdateExpr *S) {}

void StmtProfiler::VisitArrayInitLoopExpr(const ArrayInitLoopExpr *S) {}

void StmtProfiler::VisitArrayInitIndexExpr(const ArrayInitIndexExpr *S) {}

void StmtProfiler::VisitNoInitExpr(const NoInitExpr *S) {}

void StmtProfiler::VisitImplicitValueInitExpr(const ImplicitValueInitExpr *S) {}

void StmtProfiler::VisitExtVectorElementExpr(const ExtVectorElementExpr *S) {}

void StmtProfiler::VisitBlockExpr(const BlockExpr *S) {}

void StmtProfiler::VisitGenericSelectionExpr(const GenericSelectionExpr *S) {}

void StmtProfiler::VisitPseudoObjectExpr(const PseudoObjectExpr *S) {}

void StmtProfiler::VisitAtomicExpr(const AtomicExpr *S) {}

void StmtProfiler::VisitConceptSpecializationExpr(
                                           const ConceptSpecializationExpr *S) {}

void StmtProfiler::VisitRequiresExpr(const RequiresExpr *S) {}

static Stmt::StmtClass DecodeOperatorCall(const CXXOperatorCallExpr *S,
                                          UnaryOperatorKind &UnaryOp,
                                          BinaryOperatorKind &BinaryOp,
                                          unsigned &NumArgs) {}

#if defined(_MSC_VER) && !defined(__clang__)
#if _MSC_VER == 1911
// Work around https://developercommunity.visualstudio.com/content/problem/84002/clang-cl-when-built-with-vc-2017-crashes-cause-vc.html
// MSVC 2017 update 3 miscompiles this function, and a clang built with it
// will crash in stage 2 of a bootstrap build.
#pragma optimize("", off)
#endif
#endif

void StmtProfiler::VisitCXXOperatorCallExpr(const CXXOperatorCallExpr *S) {}

void StmtProfiler::VisitCXXRewrittenBinaryOperator(
    const CXXRewrittenBinaryOperator *S) {}

#if defined(_MSC_VER) && !defined(__clang__)
#if _MSC_VER == 1911
#pragma optimize("", on)
#endif
#endif

void StmtProfiler::VisitCXXMemberCallExpr(const CXXMemberCallExpr *S) {}

void StmtProfiler::VisitCUDAKernelCallExpr(const CUDAKernelCallExpr *S) {}

void StmtProfiler::VisitAsTypeExpr(const AsTypeExpr *S) {}

void StmtProfiler::VisitCXXNamedCastExpr(const CXXNamedCastExpr *S) {}

void StmtProfiler::VisitCXXStaticCastExpr(const CXXStaticCastExpr *S) {}

void StmtProfiler::VisitCXXDynamicCastExpr(const CXXDynamicCastExpr *S) {}

void
StmtProfiler::VisitCXXReinterpretCastExpr(const CXXReinterpretCastExpr *S) {}

void StmtProfiler::VisitCXXConstCastExpr(const CXXConstCastExpr *S) {}

void StmtProfiler::VisitBuiltinBitCastExpr(const BuiltinBitCastExpr *S) {}

void StmtProfiler::VisitCXXAddrspaceCastExpr(const CXXAddrspaceCastExpr *S) {}

void StmtProfiler::VisitUserDefinedLiteral(const UserDefinedLiteral *S) {}

void StmtProfiler::VisitCXXBoolLiteralExpr(const CXXBoolLiteralExpr *S) {}

void StmtProfiler::VisitCXXNullPtrLiteralExpr(const CXXNullPtrLiteralExpr *S) {}

void StmtProfiler::VisitCXXStdInitializerListExpr(
    const CXXStdInitializerListExpr *S) {}

void StmtProfiler::VisitCXXTypeidExpr(const CXXTypeidExpr *S) {}

void StmtProfiler::VisitCXXUuidofExpr(const CXXUuidofExpr *S) {}

void StmtProfiler::VisitMSPropertyRefExpr(const MSPropertyRefExpr *S) {}

void StmtProfiler::VisitMSPropertySubscriptExpr(
    const MSPropertySubscriptExpr *S) {}

void StmtProfiler::VisitCXXThisExpr(const CXXThisExpr *S) {}

void StmtProfiler::VisitCXXThrowExpr(const CXXThrowExpr *S) {}

void StmtProfiler::VisitCXXDefaultArgExpr(const CXXDefaultArgExpr *S) {}

void StmtProfiler::VisitCXXDefaultInitExpr(const CXXDefaultInitExpr *S) {}

void StmtProfiler::VisitCXXBindTemporaryExpr(const CXXBindTemporaryExpr *S) {}

void StmtProfiler::VisitCXXConstructExpr(const CXXConstructExpr *S) {}

void StmtProfiler::VisitCXXInheritedCtorInitExpr(
    const CXXInheritedCtorInitExpr *S) {}

void StmtProfiler::VisitCXXFunctionalCastExpr(const CXXFunctionalCastExpr *S) {}

void
StmtProfiler::VisitCXXTemporaryObjectExpr(const CXXTemporaryObjectExpr *S) {}

void
StmtProfiler::VisitLambdaExpr(const LambdaExpr *S) {}

void
StmtProfiler::VisitCXXScalarValueInitExpr(const CXXScalarValueInitExpr *S) {}

void StmtProfiler::VisitCXXDeleteExpr(const CXXDeleteExpr *S) {}

void StmtProfiler::VisitCXXNewExpr(const CXXNewExpr *S) {}

void
StmtProfiler::VisitCXXPseudoDestructorExpr(const CXXPseudoDestructorExpr *S) {}

void StmtProfiler::VisitOverloadExpr(const OverloadExpr *S) {}

void
StmtProfiler::VisitUnresolvedLookupExpr(const UnresolvedLookupExpr *S) {}

void StmtProfiler::VisitTypeTraitExpr(const TypeTraitExpr *S) {}

void StmtProfiler::VisitArrayTypeTraitExpr(const ArrayTypeTraitExpr *S) {}

void StmtProfiler::VisitExpressionTraitExpr(const ExpressionTraitExpr *S) {}

void StmtProfiler::VisitDependentScopeDeclRefExpr(
    const DependentScopeDeclRefExpr *S) {}

void StmtProfiler::VisitExprWithCleanups(const ExprWithCleanups *S) {}

void StmtProfiler::VisitCXXUnresolvedConstructExpr(
    const CXXUnresolvedConstructExpr *S) {}

void StmtProfiler::VisitCXXDependentScopeMemberExpr(
    const CXXDependentScopeMemberExpr *S) {}

void StmtProfiler::VisitUnresolvedMemberExpr(const UnresolvedMemberExpr *S) {}

void StmtProfiler::VisitCXXNoexceptExpr(const CXXNoexceptExpr *S) {}

void StmtProfiler::VisitPackExpansionExpr(const PackExpansionExpr *S) {}

void StmtProfiler::VisitSizeOfPackExpr(const SizeOfPackExpr *S) {}

void StmtProfiler::VisitPackIndexingExpr(const PackIndexingExpr *E) {}

void StmtProfiler::VisitSubstNonTypeTemplateParmPackExpr(
    const SubstNonTypeTemplateParmPackExpr *S) {}

void StmtProfiler::VisitSubstNonTypeTemplateParmExpr(
    const SubstNonTypeTemplateParmExpr *E) {}

void StmtProfiler::VisitFunctionParmPackExpr(const FunctionParmPackExpr *S) {}

void StmtProfiler::VisitMaterializeTemporaryExpr(
                                           const MaterializeTemporaryExpr *S) {}

void StmtProfiler::VisitCXXFoldExpr(const CXXFoldExpr *S) {}

void StmtProfiler::VisitCXXParenListInitExpr(const CXXParenListInitExpr *S) {}

void StmtProfiler::VisitCoroutineBodyStmt(const CoroutineBodyStmt *S) {}

void StmtProfiler::VisitCoreturnStmt(const CoreturnStmt *S) {}

void StmtProfiler::VisitCoawaitExpr(const CoawaitExpr *S) {}

void StmtProfiler::VisitDependentCoawaitExpr(const DependentCoawaitExpr *S) {}

void StmtProfiler::VisitCoyieldExpr(const CoyieldExpr *S) {}

void StmtProfiler::VisitOpaqueValueExpr(const OpaqueValueExpr *E) {}

void StmtProfiler::VisitTypoExpr(const TypoExpr *E) {}

void StmtProfiler::VisitSourceLocExpr(const SourceLocExpr *E) {}

void StmtProfiler::VisitEmbedExpr(const EmbedExpr *E) {}

void StmtProfiler::VisitRecoveryExpr(const RecoveryExpr *E) {}

void StmtProfiler::VisitObjCStringLiteral(const ObjCStringLiteral *S) {}

void StmtProfiler::VisitObjCBoxedExpr(const ObjCBoxedExpr *E) {}

void StmtProfiler::VisitObjCArrayLiteral(const ObjCArrayLiteral *E) {}

void StmtProfiler::VisitObjCDictionaryLiteral(const ObjCDictionaryLiteral *E) {}

void StmtProfiler::VisitObjCEncodeExpr(const ObjCEncodeExpr *S) {}

void StmtProfiler::VisitObjCSelectorExpr(const ObjCSelectorExpr *S) {}

void StmtProfiler::VisitObjCProtocolExpr(const ObjCProtocolExpr *S) {}

void StmtProfiler::VisitObjCIvarRefExpr(const ObjCIvarRefExpr *S) {}

void StmtProfiler::VisitObjCPropertyRefExpr(const ObjCPropertyRefExpr *S) {}

void StmtProfiler::VisitObjCSubscriptRefExpr(const ObjCSubscriptRefExpr *S) {}

void StmtProfiler::VisitObjCMessageExpr(const ObjCMessageExpr *S) {}

void StmtProfiler::VisitObjCIsaExpr(const ObjCIsaExpr *S) {}

void StmtProfiler::VisitObjCBoolLiteralExpr(const ObjCBoolLiteralExpr *S) {}

void StmtProfiler::VisitObjCIndirectCopyRestoreExpr(
    const ObjCIndirectCopyRestoreExpr *S) {}

void StmtProfiler::VisitObjCBridgedCastExpr(const ObjCBridgedCastExpr *S) {}

void StmtProfiler::VisitObjCAvailabilityCheckExpr(
    const ObjCAvailabilityCheckExpr *S) {}

void StmtProfiler::VisitTemplateArguments(const TemplateArgumentLoc *Args,
                                          unsigned NumArgs) {}

void StmtProfiler::VisitTemplateArgument(const TemplateArgument &Arg) {}

namespace {
class OpenACCClauseProfiler
    : public OpenACCClauseVisitor<OpenACCClauseProfiler> {};

/// Nothing to do here, there are no sub-statements.
void OpenACCClauseProfiler::VisitDefaultClause(
    const OpenACCDefaultClause &Clause) {}

void OpenACCClauseProfiler::VisitIfClause(const OpenACCIfClause &Clause) {}

void OpenACCClauseProfiler::VisitCopyClause(const OpenACCCopyClause &Clause) {}
void OpenACCClauseProfiler::VisitCopyInClause(
    const OpenACCCopyInClause &Clause) {}

void OpenACCClauseProfiler::VisitCopyOutClause(
    const OpenACCCopyOutClause &Clause) {}

void OpenACCClauseProfiler::VisitCreateClause(
    const OpenACCCreateClause &Clause) {}

void OpenACCClauseProfiler::VisitSelfClause(const OpenACCSelfClause &Clause) {}

void OpenACCClauseProfiler::VisitNumGangsClause(
    const OpenACCNumGangsClause &Clause) {}

void OpenACCClauseProfiler::VisitNumWorkersClause(
    const OpenACCNumWorkersClause &Clause) {}

void OpenACCClauseProfiler::VisitPrivateClause(
    const OpenACCPrivateClause &Clause) {}

void OpenACCClauseProfiler::VisitFirstPrivateClause(
    const OpenACCFirstPrivateClause &Clause) {}

void OpenACCClauseProfiler::VisitAttachClause(
    const OpenACCAttachClause &Clause) {}

void OpenACCClauseProfiler::VisitDevicePtrClause(
    const OpenACCDevicePtrClause &Clause) {}

void OpenACCClauseProfiler::VisitNoCreateClause(
    const OpenACCNoCreateClause &Clause) {}

void OpenACCClauseProfiler::VisitPresentClause(
    const OpenACCPresentClause &Clause) {}

void OpenACCClauseProfiler::VisitVectorLengthClause(
    const OpenACCVectorLengthClause &Clause) {}

void OpenACCClauseProfiler::VisitAsyncClause(const OpenACCAsyncClause &Clause) {}

void OpenACCClauseProfiler::VisitWaitClause(const OpenACCWaitClause &Clause) {}
/// Nothing to do here, there are no sub-statements.
void OpenACCClauseProfiler::VisitDeviceTypeClause(
    const OpenACCDeviceTypeClause &Clause) {}

void OpenACCClauseProfiler::VisitAutoClause(const OpenACCAutoClause &Clause) {}

void OpenACCClauseProfiler::VisitIndependentClause(
    const OpenACCIndependentClause &Clause) {}

void OpenACCClauseProfiler::VisitSeqClause(const OpenACCSeqClause &Clause) {}

void OpenACCClauseProfiler::VisitReductionClause(
    const OpenACCReductionClause &Clause) {}
} // namespace

void StmtProfiler::VisitOpenACCComputeConstruct(
    const OpenACCComputeConstruct *S) {}

void StmtProfiler::VisitOpenACCLoopConstruct(const OpenACCLoopConstruct *S) {}

void StmtProfiler::VisitHLSLOutArgExpr(const HLSLOutArgExpr *S) {}

void Stmt::Profile(llvm::FoldingSetNodeID &ID, const ASTContext &Context,
                   bool Canonical, bool ProfileLambdaExpr) const {}

void Stmt::ProcessODRHash(llvm::FoldingSetNodeID &ID,
                          class ODRHash &Hash) const {}