57 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
//===- debug.h - Debugging output utilities ---------------------*- 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
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
//
 | 
						|
// This file is a part of the ORC runtime support library.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#ifndef ORC_RT_DEBUG_H
 | 
						|
#define ORC_RT_DEBUG_H
 | 
						|
 | 
						|
#include <atomic>
 | 
						|
 | 
						|
#ifndef NDEBUG
 | 
						|
 | 
						|
namespace __orc_rt {
 | 
						|
 | 
						|
extern std::atomic<const char *> DebugTypes;
 | 
						|
extern char DebugTypesAll;
 | 
						|
extern char DebugTypesNone;
 | 
						|
 | 
						|
const char *initializeDebug();
 | 
						|
bool debugTypeEnabled(const char *Type, const char *Types);
 | 
						|
void printdbg(const char *format, ...);
 | 
						|
 | 
						|
} // namespace __orc_rt
 | 
						|
 | 
						|
#define ORC_RT_DEBUG_WITH_TYPE(TYPE, X)                                        \
 | 
						|
  do {                                                                         \
 | 
						|
    const char *Types =                                                        \
 | 
						|
        ::__orc_rt::DebugTypes.load(std::memory_order_relaxed);                \
 | 
						|
    if (!Types)                                                                \
 | 
						|
      Types = initializeDebug();                                               \
 | 
						|
    if (Types == &DebugTypesNone)                                              \
 | 
						|
      break;                                                                   \
 | 
						|
    if (Types == &DebugTypesAll ||                                             \
 | 
						|
        ::__orc_rt::debugTypeEnabled(TYPE, Types)) {                           \
 | 
						|
      X;                                                                       \
 | 
						|
    }                                                                          \
 | 
						|
  } while (false)
 | 
						|
 | 
						|
#else
 | 
						|
 | 
						|
#define ORC_RT_DEBUG_WITH_TYPE(TYPE, X)                                        \
 | 
						|
  do {                                                                         \
 | 
						|
  } while (false)
 | 
						|
 | 
						|
#endif // !NDEBUG
 | 
						|
 | 
						|
#define ORC_RT_DEBUG(X) ORC_RT_DEBUG_WITH_TYPE(DEBUG_TYPE, X)
 | 
						|
 | 
						|
#endif // ORC_RT_COMMON_H
 |