//===--- Debug.cpp -------- Debug 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 contains debug utilities
//
//===----------------------------------------------------------------------===//

#include "Shared/Environment.h"

#include "Configuration.h"
#include "Debug.h"
#include "DeviceTypes.h"
#include "Interface.h"
#include "Mapping.h"
#include "State.h"

using namespace ompx;

extern "C" {
void __assert_assume(bool condition) { __builtin_assume(condition); }

#ifndef OMPTARGET_HAS_LIBC
[[gnu::weak]] void __assert_fail(const char *expr, const char *file,
                                 unsigned line, const char *function) {
  __assert_fail_internal(expr, nullptr, file, line, function);
}
#endif

void __assert_fail_internal(const char *expr, const char *msg, const char *file,
                            unsigned line, const char *function) {
  if (msg) {
    printf("%s:%u: %s: Assertion %s (`%s`) failed.\n", file, line, function,
           msg, expr);
  } else {
    printf("%s:%u: %s: Assertion `%s` failed.\n", file, line, function, expr);
  }
  __builtin_trap();
}
}
