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 18 void clang::StackExhaustionHandler::runWithSufficientStackSpace( 19 SourceLocation Loc, llvm::function_ref<void()> Fn) { 20 clang::runWithSufficientStackSpace([&] { warnStackExhausted(Loc); }, Fn); 21 } 22 23 void clang::StackExhaustionHandler::warnOnStackNearlyExhausted( 24 SourceLocation Loc) { 25 if (isStackNearlyExhausted()) 26 warnStackExhausted(Loc); 27 } 28 29 void 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