1//===--- StackExhaustionHandler.cpp - - A utility for warning once when close
2// 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-exception
7//
8//===----------------------------------------------------------------------===//
9///
10/// \file
11/// 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(Diag: [&] { 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::DiagID: warn_stack_exhausted);
33 WarnedStackExhausted = true;
34 }
35}
36

Provided by KDAB

Privacy Policy
Improve your Profiling and Debugging skills
Find out more

source code of clang/lib/Basic/StackExhaustionHandler.cpp