blob: bf8c8a7bf98bef1d72cf81118626bb7593040cd3 [file] [edit]
// Test the `error` directive with `at(execution)` inside a target region.
//
// REQUIRES: libc
// RUN: %libomptarget-compile-generic -fopenmp-version=51 && \
// RUN: %libomptarget-run-generic 2>&1 | %fcheck-generic
// RUN: %libomptarget-compile-generic -fopenmp-version=51 -DFATAL && \
// RUN: %libomptarget-run-fail-generic
#include <stdio.h>
int main(void) {
#ifdef FATAL
#pragma omp target
{
#pragma omp error at(execution) severity(fatal) message("fatal message")
}
printf("unreachable\n");
#else
#pragma omp target
{
#pragma omp error at(execution) severity(warning) message("warning message")
}
// No MESSAGE clause, so the runtime receives a null message pointer.
#pragma omp target
{
#pragma omp error at(execution) severity(warning)
}
#endif
return 0;
}
// Device output is flushed after host output, so host prints are not checked.
// The fatal case checks only the exit status: its message is lost when the trap
// aborts before the buffered stdout is flushed.
// CHECK: user-directed warning: warning message.
// CHECK: user-directed warning.