Home | History | Annotate | Line # | Download | only in gdb.threads
      1 /* This testcase is part of GDB, the GNU debugger.
      2 
      3    Copyright 2022-2024 Free Software Foundation, Inc.
      4 
      5    This program is free software; you can redistribute it and/or modify
      6    it under the terms of the GNU General Public License as published by
      7    the Free Software Foundation; either version 3 of the License, or
      8    (at your option) any later version.
      9 
     10    This program is distributed in the hope that it will be useful,
     11    but WITHOUT ANY WARRANTY; without even the implied warranty of
     12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13    GNU General Public License for more details.
     14 
     15    You should have received a copy of the GNU General Public License
     16    along with this program.  If not, see <http://www.gnu.org/licenses/>.
     17 
     18    Tests which verify (or not) that GDB can access shared and private
     19    clauses of OpenMP task construct.
     20 */
     21 
     22 #include <stdio.h>
     23 #include <omp.h>
     24 
     25 int foo(int n) {
     26   int share1 = 9, share2 = 11, share3 = 13, priv1, priv2, fpriv;
     27   fpriv = n + 4;
     28 
     29   if (n < 2)
     30     return n;
     31   else {
     32 #pragma omp task shared(share1, share2) private(priv1, priv2) firstprivate(fpriv) shared(share3)
     33     {
     34       priv1 = n;
     35       priv2 = n + 2;
     36       share2 += share3;
     37       printf("share1 = %d, share2 = %d, share3 = %d\n", share1, share2, share3);
     38       share1 = priv1 + priv2 + fpriv + foo(n - 1) + share2 + share3;
     39     }
     40 #pragma omp taskwait
     41     return share1 + share2 + share3;
     42   }
     43 }
     44 
     45 int main() {
     46   int n = 10;
     47   printf("foo(%d) = %d\n", n, foo(n));
     48   return 0;
     49 }
     50