//===--- StackExhaustionHandler.cpp - - A utility for warning once when close // to out of 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 a utilitiy for warning once when close to out of stack space. /// //===----------------------------------------------------------------------===// #include "clang/Basic/StackExhaustionHandler.h" #include "clang/Basic/Stack.h" void clang::StackExhaustionHandler::runWithSufficientStackSpace( SourceLocation Loc, llvm::function_ref Fn) { clang::runWithSufficientStackSpace([&] { warnStackExhausted(Loc); }, Fn); } void clang::StackExhaustionHandler::warnOnStackNearlyExhausted( SourceLocation Loc) { if (isStackNearlyExhausted()) warnStackExhausted(Loc); } void clang::StackExhaustionHandler::warnStackExhausted(SourceLocation Loc) { // Only warn about this once. if (!WarnedStackExhausted) { DiagsRef.Report(Loc, diag::warn_stack_exhausted); WarnedStackExhausted = true; } }