blob: a611d0596d89eb7c111910e2d9e484ca333889c1 [file]
// 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
{
// CHECK: {{.*}}error_directive.c:[[# @LINE + 1]]:{{[0-9]+}}: Encountered user-directed warning: warning message.
#pragma omp error at(execution) severity(warning) message("warning message")
}
// No MESSAGE clause, so the runtime receives a null message pointer.
#pragma omp target
{
// CHECK: {{.*}}error_directive.c:[[# @LINE + 1]]:{{[0-9]+}}: Encountered user-directed warning.
#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.
//
// clang fills in the ident location from the AST, so it is present without -g