Halide 22.0.0
Halide compiler and libraries
Loading...
Searching...
No Matches
Error.h File Reference
#include <memory>
#include <sstream>
#include <stdexcept>
#include "Debug.h"
#include "runtime/HalideRuntime.h"

Go to the source code of this file.

Classes

struct  Halide::Error
 A base class for Halide errors. More...
 
struct  Halide::RuntimeError
 An error that occurs while running a JIT-compiled Halide pipeline. More...
 
struct  Halide::CompileError
 An error that occurs while compiling a Halide pipeline that Halide attributes to a user error. More...
 
struct  Halide::InternalError
 An error that occurs while compiling a Halide pipeline that Halide attributes to an internal compiler bug, or to an invalid use of Halide's internals. More...
 
class  Halide::CompileTimeErrorReporter
 CompileTimeErrorReporter is used at compile time (not runtime) when an error or warning is generated by Halide. More...
 
class  Halide::Internal::ReportBase< T >
 
struct  Halide::Internal::ErrorReport< Exception >
 
struct  Halide::Internal::WarningReport
 

Namespaces

namespace  Halide
 This file defines the class FunctionDAG, which is our representation of a Halide pipeline, and contains methods to using Halide's bounds tools to query properties of it.
 
namespace  Halide::Internal
 

Macros

#define user_warning   _halide_user_warning
 
#define user_error   _halide_error_impl(Halide::CompileError)
 
#define internal_error   _halide_error_impl(Halide::InternalError)
 
#define halide_runtime_error   _halide_error_impl(Halide::RuntimeError)
 
#define internal_assert(c)   _halide_assert_impl(c, Halide::InternalError)
 
#define user_assert(c)   _halide_assert_impl(c, Halide::CompileError)
 
#define _halide_user_error   _halide_error_impl(Halide::CompileError)
 
#define _halide_internal_error   _halide_error_impl(Halide::InternalError)
 
#define _halide_runtime_error   _halide_error_impl(Halide::RuntimeError)
 
#define _halide_internal_assert(c)   _halide_assert_impl(c, Halide::InternalError)
 
#define _halide_user_assert(c)   _halide_assert_impl(c, Halide::CompileError)
 

Functions

bool Halide::exceptions_enabled ()
 Query whether Halide was compiled with exceptions.
 
void Halide::set_custom_compile_time_error_reporter (CompileTimeErrorReporter *error_reporter)
 The default error reporter logs to stderr, then throws an exception (if HALIDE_WITH_EXCEPTIONS) or calls abort (if not).
 
void Halide::Internal::issue_warning (const char *warning)
 If a custom error reporter is configured, notifies the reporter by calling its warning() function.
 
HALIDE_EXPORT_SYMBOL void Halide::Internal::unhandled_exception_handler ()
 

Macro Definition Documentation

◆ _halide_error_impl

#define _halide_error_impl (   type)
Value:
_err.init(__FILE__, __FUNCTION__, __LINE__, nullptr)
void issue() noexcept(false)
Definition Error.h:180

The following three diagnostic macros are implemented such that the message is evaluated only if the assertion's value is false.

This (regrettably) requires a macro to work, but has the highly desirable effect that all assertion parameters are totally skipped (not ever evaluated) when the assertion is true.

The macros work by deferring the call to issue() until after the stream has been evaluated. This previously used a trick where ErrorReport would throw in the destructor, but throwing in a destructor is UB in a lot of scenarios, and it was easy to break things by mistake.

Definition at line 212 of file Error.h.

◆ _halide_assert_impl

#define _halide_assert_impl (   condition,
  type 
)
Value:
if (!(condition)) \
/*****/ _err.init(__FILE__, __FUNCTION__, __LINE__, #condition)

The following three diagnostic macros are implemented such that the message is evaluated only if the assertion's value is false.

This (regrettably) requires a macro to work, but has the highly desirable effect that all assertion parameters are totally skipped (not ever evaluated) when the assertion is true.

The macros work by deferring the call to issue() until after the stream has been evaluated. This previously used a trick where ErrorReport would throw in the destructor, but throwing in a destructor is UB in a lot of scenarios, and it was easy to break things by mistake.

Definition at line 216 of file Error.h.

◆ _halide_user_warning

#define _halide_user_warning
Value:
for (Halide::Internal::WarningReport _err; _err; _err.issue()) \
_err.init(__FILE__, __FUNCTION__, __LINE__, nullptr)

The following three diagnostic macros are implemented such that the message is evaluated only if the assertion's value is false.

This (regrettably) requires a macro to work, but has the highly desirable effect that all assertion parameters are totally skipped (not ever evaluated) when the assertion is true.

The macros work by deferring the call to issue() until after the stream has been evaluated. This previously used a trick where ErrorReport would throw in the destructor, but throwing in a destructor is UB in a lot of scenarios, and it was easy to break things by mistake.

Definition at line 221 of file Error.h.

◆ user_warning

#define user_warning   _halide_user_warning

Definition at line 226 of file Error.h.

◆ user_error

#define user_error   _halide_error_impl(Halide::CompileError)

Definition at line 228 of file Error.h.

◆ internal_error

#define internal_error   _halide_error_impl(Halide::InternalError)

Definition at line 229 of file Error.h.

◆ halide_runtime_error

#define halide_runtime_error   _halide_error_impl(Halide::RuntimeError)

Definition at line 230 of file Error.h.

◆ internal_assert

#define internal_assert (   c)    _halide_assert_impl(c, Halide::InternalError)

Definition at line 232 of file Error.h.

◆ user_assert

#define user_assert (   c)    _halide_assert_impl(c, Halide::CompileError)

Definition at line 233 of file Error.h.

◆ _halide_user_error

#define _halide_user_error   _halide_error_impl(Halide::CompileError)

Definition at line 239 of file Error.h.

◆ _halide_internal_error

#define _halide_internal_error   _halide_error_impl(Halide::InternalError)

Definition at line 240 of file Error.h.

◆ _halide_runtime_error

#define _halide_runtime_error   _halide_error_impl(Halide::RuntimeError)

Definition at line 241 of file Error.h.

◆ _halide_internal_assert

#define _halide_internal_assert (   c)    _halide_assert_impl(c, Halide::InternalError)

Definition at line 242 of file Error.h.

◆ _halide_user_assert

#define _halide_user_assert (   c)    _halide_assert_impl(c, Halide::CompileError)

Definition at line 243 of file Error.h.