[OpenMP] Implement __assert_fail in the new device runtime
authorJoseph Huber <jhuber6@vols.utk.edu>
Thu, 16 Sep 2021 12:51:12 +0000 (08:51 -0400)
committerJoseph Huber <jhuber6@vols.utk.edu>
Sat, 18 Sep 2021 01:25:28 +0000 (21:25 -0400)
This patch implements the `__assert_fail` function in the new device
runtime. This allows users and developers to use the standars assert
function inside of the device.

Reviewed By: tianshilei1992

Differential Revision: https://reviews.llvm.org/D109886

openmp/libomptarget/DeviceRTL/include/Debug.h
openmp/libomptarget/DeviceRTL/src/Debug.cpp

index b304bff..4e2a699 100644 (file)
@@ -17,6 +17,8 @@
 /// {
 extern "C" {
 void __assert_assume(bool cond, const char *exp, const char *file, int line);
+void __assert_fail(const char *assertion, const char *file, unsigned line,
+                   const char *function);
 }
 
 #define ASSERT(e) __assert_assume(e, #e, __FILE__, __LINE__)
index 69d04d6..af78836 100644 (file)
@@ -26,6 +26,13 @@ void __assert_assume(bool cond, const char *exp, const char *file, int line) {
 
   __builtin_assume(cond);
 }
+
+void __assert_fail(const char *assertion, const char *file, unsigned line,
+                   const char *function) {
+  PRINTF("%s:%u: %s: Assertion `%s' failed.\n", file, line, function,
+         assertion);
+  __builtin_trap();
+}
 }
 
 #pragma omp end declare target