36 lines · cpp
1//===--- StackExhaustionHandler.cpp - - A utility for warning once when close2// to out of stack space -------*- C++ -*-===//3//4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.5// See https://llvm.org/LICENSE.txt for license information.6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7//8//===----------------------------------------------------------------------===//9///10/// \file11/// Defines a utilitiy for warning once when close to out of stack space.12///13//===----------------------------------------------------------------------===//14 15#include "clang/Basic/StackExhaustionHandler.h"16#include "clang/Basic/Stack.h"17 18void clang::StackExhaustionHandler::runWithSufficientStackSpace(19 SourceLocation Loc, llvm::function_ref<void()> Fn) {20 clang::runWithSufficientStackSpace([&] { warnStackExhausted(Loc); }, Fn);21}22 23void clang::StackExhaustionHandler::warnOnStackNearlyExhausted(24 SourceLocation Loc) {25 if (isStackNearlyExhausted())26 warnStackExhausted(Loc);27}28 29void clang::StackExhaustionHandler::warnStackExhausted(SourceLocation Loc) {30 // Only warn about this once.31 if (!WarnedStackExhausted) {32 DiagsRef.Report(Loc, diag::warn_stack_exhausted);33 WarnedStackExhausted = true;34 }35}36