// RUN: %libomp-compile-and-run | FileCheck %s
// REQUIRES: ompt
#include "callback.h"
#include <omp.h>
int main() {
int x = 0;
int ret = 0;
#pragma omp parallel
#pragma omp single
x++;
// Expected to fail; omp_pause_stop_tool must not be specified
ret = omp_pause_resource(omp_pause_stop_tool, omp_get_initial_device());
printf("omp_pause_resource %s\n", ret ? "failed" : "succeeded");
#pragma omp parallel
#pragma omp single
x++;
// Expected to succeed
ret = omp_pause_resource_all(omp_pause_stop_tool);
printf("omp_pause_resource_all %s\n", ret ? "failed" : "succeeded");
#pragma omp parallel
#pragma omp single
x++;
printf("x = %d\n", x);
return 0;
// Check if
// -- omp_pause_resource/resource_all returns expected code
// -- OMPT interface is shut down as expected
// CHECK-NOT: {{^}}0: Could not register callback
// CHECK: 0: NULL_POINTER=[[NULL:.*$]]
// CHECK: ompt_event_parallel_begin
// CHECK: ompt_event_parallel_end
// CHECK: omp_pause_resource failed
// CHECK: ompt_event_parallel_begin
// CHECK: ompt_event_parallel_end
// CHECK: omp_pause_resource_all succeeded
// CHECK-NOT: ompt_event
}