//===--- Stack.h - Utilities for dealing with stack space -------*- C++ -*-===//
//
// 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
//
//===----------------------------------------------------------------------===//
///
/// \file
/// Defines utilities for dealing with stack allocation and stack space.
///
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_BASIC_STACK_H
#define LLVM_CLANG_BASIC_STACK_H

#include <cstddef>

#include "llvm/ADT/STLExtras.h"
#include "llvm/Support/Compiler.h"

namespace clang {
  /// The amount of stack space that Clang would like to be provided with.
  /// If less than this much is available, we may be unable to reach our
  /// template instantiation depth limit and other similar limits.
  constexpr size_t DesiredStackSize = 8 << 20;

  /// Call this once on each thread, as soon after starting the thread as
  /// feasible, to note the approximate address of the bottom of the stack.
  void noteBottomOfStack();

  /// Determine whether the stack is nearly exhausted.
  bool isStackNearlyExhausted();

  void runWithSufficientStackSpaceSlow(llvm::function_ref<void()> Diag,
                                       llvm::function_ref<void()> Fn);

  /// Run a given function on a stack with "sufficient" space. If stack space
  /// is insufficient, calls Diag to emit a diagnostic before calling Fn.
  inline void runWithSufficientStackSpace(llvm::function_ref<void()> Diag,
                                          llvm::function_ref<void()> Fn) {
#ifdef LLVM_ENABLE_THREADS
    if (LLVM_UNLIKELY(isStackNearlyExhausted()))
      runWithSufficientStackSpaceSlow(Diag, Fn);
    else
      Fn();
#else
    if (LLVM_UNLIKELY(isStackNearlyExhausted()))
      Diag();
    Fn();
#endif
  }
} // end namespace clang

#endif // LLVM_CLANG_BASIC_STACK_H
