1/* { dg-do compile } */
2
3#include <stdio.h>
4#include <stdlib.h>
5float
6read_next ()
7{
8  float *tmp;
9  float return_val;
10#pragma omp single copyprivate(tmp)
11  {
12    tmp = (float *) malloc (sizeof (float));
13  }				/* copies the pointer only */
14#pragma omp master
15  {
16    scanf ("%f", tmp);
17  }
18#pragma omp barrier
19  return_val = *tmp;
20#pragma omp barrier
21#pragma omp single nowait
22  {
23    free (tmp);
24  }
25  return return_val;
26}
27