Hi!

This patch
1) starts using the new GOMP_parallel* (without _start) APIs for #pragma omp 
parallel
2) makes proc_bind clauses work
3) handles #pragma omp taskgroup (though, on the library side it is just a
   dummy right now)

Tested on x86_64-linux, committed to gomp-4_0-branch.

2013-04-10  Jakub Jelinek  <ja...@redhat.com>

        * builtin-types.def (DEF_FUNCTION_TYPE_8): Document.
        (BT_FN_VOID_OMPFN_PTR_UINT, BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG,
        BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG): Remove.
        (BT_FN_VOID_OMPFN_PTR_UINT_UINT_UINT,
        BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_UINT,
        BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG_UINT): New.
        * gimplify.c (gimplify_scan_omp_clauses, gimplify_adjust_omp_clauses):
        Handle OMP_CLAUSE_PROC_BIND.
        * omp-builtins.def (BUILT_IN_GOMP_TASKGROUP_START,
        BUILT_IN_GOMP_TASKGROUP_END, BUILT_IN_GOMP_PARALLEL_LOOP_STATIC,
        BUILT_IN_GOMP_PARALLEL_LOOP_DYNAMIC,
        BUILT_IN_GOMP_PARALLEL_LOOP_GUIDED,
        BUILT_IN_GOMP_PARALLEL_LOOP_RUNTIME, BUILT_IN_GOMP_PARALLEL,
        BUILT_IN_GOMP_PARALLEL_SECTIONS): New built-ins.
        (BUILT_IN_GOMP_PARALLEL_LOOP_STATIC_START,
        BUILT_IN_GOMP_PARALLEL_LOOP_DYNAMIC_START,
        BUILT_IN_GOMP_PARALLEL_LOOP_GUIDED_START,
        BUILT_IN_GOMP_PARALLEL_LOOP_RUNTIME_START,
        BUILT_IN_GOMP_PARALLEL_START, BUILT_IN_GOMP_PARALLEL_END,
        BUILT_IN_GOMP_PARALLEL_SECTIONS_START): Remove.
        * omp-low.c (scan_sharing_clauses): Handle OMP_CLAUSE_PROC_BIND.
        (expand_parallel_call): Expand #pragma omp parallel* as
        calls to the new GOMP_parallel_* APIs without _start at the end,
        instead of GOMP_parallel_*_start followed by fn.omp_fn.N call,
        followed by GOMP_parallel_end.  Handle OMP_CLAUSE_PROC_BIND.
        * tree-ssa-alias.c (ref_maybe_used_by_call_p_1,
        call_may_clobber_ref_p_1): Handle BUILT_IN_GOMP_TASKGROUP_END
        instead of BUILT_IN_GOMP_PARALLEL_END.
c-family/
        * c-common.c (DEF_FUNCTION_TYPE_8): Define.
        * c-omp.c (c_split_parallel_clauses): Handle OMP_CLAUSE_PROC_BIND.
cp/
        * cp-tree.h (finish_omp_taskgroup): New prototype.
        * parser.c (cp_parser_omp_clause_proc_bind): Require ) instead of
        colon at the end of the clause.
        (cp_parser_omp_taskgroup): New function.
        (cp_parser_omp_construct, cp_parser_pragma): Handle
        PRAGMA_OMP_TASKGROUP.
        * semantics.c (finish_omp_taskgroup): New function.
fortran/
        * f95-lang.c (DEF_FUNCTION_TYPE_8): Define.
        * types.def (DEF_FUNCTION_TYPE_8): Document.
        (BT_FN_VOID_OMPFN_PTR_UINT, BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG,
        BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG): Remove.
        (BT_FN_VOID_OMPFN_PTR_UINT_UINT_UINT,
        BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_UINT,
        BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG_UINT): New.
ada/
        * gcc-interface/utils.c (DEF_FUNCTION_TYPE_8): Define.
lto/
        * lto-lang.c (DEF_FUNCTION_TYPE_8): Define.
testsuite/
        * gcc.dg/gomp/combined-1.c: Look for GOMP_parallel_loop_runtime
        instead of GOMP_parallel_loop_runtime_start.

--- gcc/builtin-types.def.jj    2013-03-20 10:07:24.000000000 +0100
+++ gcc/builtin-types.def       2013-04-10 16:55:26.154822356 +0200
@@ -34,6 +34,8 @@ along with GCC; see the file COPYING3.
    DEF_FUNCTION_TYPE_5 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5)
    DEF_FUNCTION_TYPE_6 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6)
    DEF_FUNCTION_TYPE_7 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7)
+   DEF_FUNCTION_TYPE_8 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7,
+                       ARG8)
 
      These macros describe function types.  ENUM is as above.  The
      RETURN type is one of the enumerals already defined.  ARG1, ARG2,
@@ -409,8 +411,6 @@ DEF_FUNCTION_TYPE_3 (BT_FN_I4_VPTR_I4_I4
 DEF_FUNCTION_TYPE_3 (BT_FN_I8_VPTR_I8_I8, BT_I8, BT_VOLATILE_PTR, BT_I8, BT_I8)
 DEF_FUNCTION_TYPE_3 (BT_FN_I16_VPTR_I16_I16, BT_I16, BT_VOLATILE_PTR,
                     BT_I16, BT_I16)
-DEF_FUNCTION_TYPE_3 (BT_FN_VOID_OMPFN_PTR_UINT, BT_VOID, BT_PTR_FN_VOID_PTR,
-                    BT_PTR, BT_UINT)
 DEF_FUNCTION_TYPE_3 (BT_FN_PTR_CONST_PTR_INT_SIZE, BT_PTR,
                     BT_CONST_PTR, BT_INT, BT_SIZE)
 DEF_FUNCTION_TYPE_3 (BT_FN_I1_VPTR_I1_INT, BT_I1, BT_VOLATILE_PTR, BT_I1, 
BT_INT)
@@ -465,6 +465,9 @@ DEF_FUNCTION_TYPE_5 (BT_FN_BOOL_VPTR_PTR
                     BT_BOOL, BT_VOLATILE_PTR, BT_PTR, BT_I8, BT_INT, BT_INT)
 DEF_FUNCTION_TYPE_5 (BT_FN_BOOL_VPTR_PTR_I16_INT_INT,
                     BT_BOOL, BT_VOLATILE_PTR, BT_PTR, BT_I16, BT_INT, BT_INT)
+DEF_FUNCTION_TYPE_5 (BT_FN_VOID_OMPFN_PTR_UINT_UINT_UINT,
+                    BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT, BT_UINT,
+                    BT_UINT)
 
 DEF_FUNCTION_TYPE_6 (BT_FN_INT_STRING_SIZE_INT_SIZE_CONST_STRING_VALIST_ARG,
                     BT_INT, BT_STRING, BT_SIZE, BT_INT, BT_SIZE,
@@ -472,9 +475,6 @@ DEF_FUNCTION_TYPE_6 (BT_FN_INT_STRING_SI
 DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
                     BT_BOOL, BT_LONG, BT_LONG, BT_LONG, BT_LONG,
                     BT_PTR_LONG, BT_PTR_LONG)
-DEF_FUNCTION_TYPE_6 (BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG,
-                    BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT,
-                    BT_LONG, BT_LONG, BT_LONG)
 DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULLPTR_ULLPTR,
                     BT_BOOL, BT_BOOL, BT_ULONGLONG, BT_ULONGLONG,
                     BT_ULONGLONG, BT_PTR_ULONGLONG, BT_PTR_ULONGLONG)
@@ -496,10 +496,9 @@ DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_VPTR_PTR
 DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_SIZE_VPTR_PTR_PTR_INT_INT, BT_BOOL, BT_SIZE,
                     BT_VOLATILE_PTR, BT_PTR, BT_PTR, BT_INT, BT_INT)
 
-
-DEF_FUNCTION_TYPE_7 (BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG,
+DEF_FUNCTION_TYPE_7 (BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_UINT,
                     BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT,
-                    BT_LONG, BT_LONG, BT_LONG, BT_LONG)
+                    BT_LONG, BT_LONG, BT_LONG, BT_UINT)
 DEF_FUNCTION_TYPE_7 (BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT,
                     BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR,
                     BT_PTR_FN_VOID_PTR_PTR, BT_LONG, BT_LONG,
@@ -509,6 +508,10 @@ DEF_FUNCTION_TYPE_7 (BT_FN_BOOL_BOOL_ULL
                     BT_ULONGLONG, BT_ULONGLONG,
                     BT_PTR_ULONGLONG, BT_PTR_ULONGLONG)
 
+DEF_FUNCTION_TYPE_8 (BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG_UINT,
+                    BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT,
+                    BT_LONG, BT_LONG, BT_LONG, BT_LONG, BT_UINT)
+
 DEF_FUNCTION_TYPE_VAR_0 (BT_FN_VOID_VAR, BT_VOID)
 DEF_FUNCTION_TYPE_VAR_0 (BT_FN_INT_VAR, BT_INT)
 DEF_FUNCTION_TYPE_VAR_0 (BT_FN_PTR_VAR, BT_PTR)
--- gcc/gimplify.c.jj   2013-03-27 13:01:09.000000000 +0100
+++ gcc/gimplify.c      2013-04-10 17:14:06.618165999 +0200
@@ -6301,6 +6301,7 @@ gimplify_scan_omp_clauses (tree *list_p,
        case OMP_CLAUSE_UNTIED:
        case OMP_CLAUSE_COLLAPSE:
        case OMP_CLAUSE_MERGEABLE:
+       case OMP_CLAUSE_PROC_BIND:
          break;
 
        case OMP_CLAUSE_DEFAULT:
@@ -6443,6 +6444,7 @@ gimplify_adjust_omp_clauses (tree *list_
        case OMP_CLAUSE_COLLAPSE:
        case OMP_CLAUSE_FINAL:
        case OMP_CLAUSE_MERGEABLE:
+       case OMP_CLAUSE_PROC_BIND:
          break;
 
        default:
--- gcc/omp-builtins.def.jj     2013-03-27 13:01:09.000000000 +0100
+++ gcc/omp-builtins.def        2013-04-10 16:27:32.543966278 +0200
@@ -39,6 +39,10 @@ DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASKWAIT
                  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
 DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASKYIELD, "GOMP_taskyield",
                  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASKGROUP_START, "GOMP_taskgroup_start",
+                 BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASKGROUP_END, "GOMP_taskgroup_end",
+                 BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
 DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CANCEL, "GOMP_cancel",
                  BT_FN_VOID_INT, ATTR_NULL)
 DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CANCELLATION_POINT, "GOMP_cancellation_point",
@@ -160,24 +164,24 @@ DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL
 DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_ORDERED_RUNTIME_NEXT,
                  "GOMP_loop_ull_ordered_runtime_next",
                  BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
-/* NOTE: Do not change the order of BUILT_IN_GOMP_PARALLEL_LOOP_*_START.
+/* NOTE: Do not change the order of BUILT_IN_GOMP_PARALLEL_LOOP_*.
    They are used in index arithmetic with enum omp_clause_schedule_kind
    in omp-low.c.  */
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_STATIC_START,
-                 "GOMP_parallel_loop_static_start",
-                 BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG,
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_STATIC,
+                 "GOMP_parallel_loop_static",
+                 BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG_UINT,
                  ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_DYNAMIC_START,
-                 "GOMP_parallel_loop_dynamic_start",
-                 BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG,
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_DYNAMIC,
+                 "GOMP_parallel_loop_dynamic",
+                 BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG_UINT,
                  ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_GUIDED_START,
-                 "GOMP_parallel_loop_guided_start",
-                 BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG,
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_GUIDED,
+                 "GOMP_parallel_loop_guided",
+                 BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG_UINT,
                  ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_RUNTIME_START,
-                 "GOMP_parallel_loop_runtime_start",
-                 BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG,
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_RUNTIME,
+                 "GOMP_parallel_loop_runtime",
+                 BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_UINT,
                  ATTR_NOTHROW_LIST)
 DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_END, "GOMP_loop_end",
                  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
@@ -187,10 +191,8 @@ DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ORDERED_
                  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
 DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ORDERED_END, "GOMP_ordered_end",
                  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_START, "GOMP_parallel_start",
-                 BT_FN_VOID_OMPFN_PTR_UINT, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_END, "GOMP_parallel_end",
-                 BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL, "GOMP_parallel",
+                 BT_FN_VOID_OMPFN_PTR_UINT_UINT, ATTR_NOTHROW_LIST)
 DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASK, "GOMP_task",
                  BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT,
                  ATTR_NOTHROW_LIST)
@@ -198,9 +200,9 @@ DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS
                  BT_FN_UINT_UINT, ATTR_NOTHROW_LEAF_LIST)
 DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_NEXT, "GOMP_sections_next",
                  BT_FN_UINT, ATTR_NOTHROW_LEAF_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_SECTIONS_START,
-                 "GOMP_parallel_sections_start",
-                 BT_FN_VOID_OMPFN_PTR_UINT_UINT, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_SECTIONS,
+                 "GOMP_parallel_sections",
+                 BT_FN_VOID_OMPFN_PTR_UINT_UINT_UINT, ATTR_NOTHROW_LIST)
 DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_END, "GOMP_sections_end",
                  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
 DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_END_NOWAIT,
--- gcc/omp-low.c.jj    2013-03-20 10:05:01.000000000 +0100
+++ gcc/omp-low.c       2013-04-10 17:15:01.358840692 +0200
@@ -1471,6 +1471,7 @@ scan_sharing_clauses (tree clauses, omp_
        case OMP_CLAUSE_COLLAPSE:
        case OMP_CLAUSE_UNTIED:
        case OMP_CLAUSE_MERGEABLE:
+       case OMP_CLAUSE_PROC_BIND:
          break;
 
        default:
@@ -1523,6 +1524,7 @@ scan_sharing_clauses (tree clauses, omp_
        case OMP_CLAUSE_UNTIED:
        case OMP_CLAUSE_FINAL:
        case OMP_CLAUSE_MERGEABLE:
+       case OMP_CLAUSE_PROC_BIND:
          break;
 
        default:
@@ -2945,7 +2947,7 @@ static void
 expand_parallel_call (struct omp_region *region, basic_block bb,
                      gimple entry_stmt, vec<tree, va_gc> *ws_args)
 {
-  tree t, t1, t2, val, cond, c, clauses;
+  tree t, t1, t2, val, cond, c, clauses, flags;
   gimple_stmt_iterator gsi;
   gimple stmt;
   enum built_in_function start_ix;
@@ -2955,23 +2957,23 @@ expand_parallel_call (struct omp_region
 
   clauses = gimple_omp_parallel_clauses (entry_stmt);
 
-  /* Determine what flavor of GOMP_parallel_start we will be
+  /* Determine what flavor of GOMP_parallel we will be
      emitting.  */
-  start_ix = BUILT_IN_GOMP_PARALLEL_START;
+  start_ix = BUILT_IN_GOMP_PARALLEL;
   if (is_combined_parallel (region))
     {
       switch (region->inner->type)
        {
        case GIMPLE_OMP_FOR:
          gcc_assert (region->inner->sched_kind != OMP_CLAUSE_SCHEDULE_AUTO);
-         start_ix2 = ((int)BUILT_IN_GOMP_PARALLEL_LOOP_STATIC_START
+         start_ix2 = ((int)BUILT_IN_GOMP_PARALLEL_LOOP_STATIC
                       + (region->inner->sched_kind
                          == OMP_CLAUSE_SCHEDULE_RUNTIME
                          ? 3 : region->inner->sched_kind));
          start_ix = (enum built_in_function)start_ix2;
          break;
        case GIMPLE_OMP_SECTIONS:
-         start_ix = BUILT_IN_GOMP_PARALLEL_SECTIONS_START;
+         start_ix = BUILT_IN_GOMP_PARALLEL_SECTIONS;
          break;
        default:
          gcc_unreachable ();
@@ -2982,6 +2984,7 @@ expand_parallel_call (struct omp_region
      and there is no conditional.  */
   cond = NULL_TREE;
   val = build_int_cst (unsigned_type_node, 0);
+  flags = build_int_cst (unsigned_type_node, 0);
 
   c = find_omp_clause (clauses, OMP_CLAUSE_IF);
   if (c)
@@ -2996,6 +2999,10 @@ expand_parallel_call (struct omp_region
   else
     clause_loc = gimple_location (entry_stmt);
 
+  c = find_omp_clause (clauses, OMP_CLAUSE_PROC_BIND);
+  if (c)
+    flags = build_int_cst (unsigned_type_node, OMP_CLAUSE_PROC_BIND_KIND (c));
+
   /* Ensure 'val' is of the correct type.  */
   val = fold_convert_loc (clause_loc, unsigned_type_node, val);
 
@@ -3082,34 +3089,19 @@ expand_parallel_call (struct omp_region
     t1 = build_fold_addr_expr (t);
   t2 = build_fold_addr_expr (gimple_omp_parallel_child_fn (entry_stmt));
 
-  vec_alloc (args, 3 + vec_safe_length (ws_args));
+  vec_alloc (args, 4 + vec_safe_length (ws_args));
   args->quick_push (t2);
   args->quick_push (t1);
   args->quick_push (val);
   if (ws_args)
     args->splice (*ws_args);
+  args->quick_push (flags);
 
   t = build_call_expr_loc_vec (UNKNOWN_LOCATION,
                               builtin_decl_explicit (start_ix), args);
 
   force_gimple_operand_gsi (&gsi, t, true, NULL_TREE,
                            false, GSI_CONTINUE_LINKING);
-
-  t = gimple_omp_parallel_data_arg (entry_stmt);
-  if (t == NULL)
-    t = null_pointer_node;
-  else
-    t = build_fold_addr_expr (t);
-  t = build_call_expr_loc (gimple_location (entry_stmt),
-                          gimple_omp_parallel_child_fn (entry_stmt), 1, t);
-  force_gimple_operand_gsi (&gsi, t, true, NULL_TREE,
-                           false, GSI_CONTINUE_LINKING);
-
-  t = build_call_expr_loc (gimple_location (entry_stmt),
-                          builtin_decl_explicit (BUILT_IN_GOMP_PARALLEL_END),
-                          0);
-  force_gimple_operand_gsi (&gsi, t, true, NULL_TREE,
-                           false, GSI_CONTINUE_LINKING);
 }
 
 
--- gcc/tree-ssa-alias.c.jj     2013-03-20 10:07:24.000000000 +0100
+++ gcc/tree-ssa-alias.c        2013-04-10 16:31:11.442456161 +0200
@@ -1393,6 +1393,7 @@ ref_maybe_used_by_call_p_1 (gimple call,
        case BUILT_IN_GOMP_ATOMIC_END:
        case BUILT_IN_GOMP_BARRIER:
        case BUILT_IN_GOMP_TASKWAIT:
+       case BUILT_IN_GOMP_TASKGROUP_END:
        case BUILT_IN_GOMP_CRITICAL_START:
        case BUILT_IN_GOMP_CRITICAL_END:
        case BUILT_IN_GOMP_CRITICAL_NAME_START:
@@ -1400,7 +1401,6 @@ ref_maybe_used_by_call_p_1 (gimple call,
        case BUILT_IN_GOMP_LOOP_END:
        case BUILT_IN_GOMP_ORDERED_START:
        case BUILT_IN_GOMP_ORDERED_END:
-       case BUILT_IN_GOMP_PARALLEL_END:
        case BUILT_IN_GOMP_SECTIONS_END:
        case BUILT_IN_GOMP_SINGLE_COPY_START:
        case BUILT_IN_GOMP_SINGLE_COPY_END:
@@ -1737,6 +1737,7 @@ call_may_clobber_ref_p_1 (gimple call, a
        case BUILT_IN_GOMP_ATOMIC_END:
        case BUILT_IN_GOMP_BARRIER:
        case BUILT_IN_GOMP_TASKWAIT:
+       case BUILT_IN_GOMP_TASKGROUP_END:
        case BUILT_IN_GOMP_CRITICAL_START:
        case BUILT_IN_GOMP_CRITICAL_END:
        case BUILT_IN_GOMP_CRITICAL_NAME_START:
@@ -1744,7 +1745,6 @@ call_may_clobber_ref_p_1 (gimple call, a
        case BUILT_IN_GOMP_LOOP_END:
        case BUILT_IN_GOMP_ORDERED_START:
        case BUILT_IN_GOMP_ORDERED_END:
-       case BUILT_IN_GOMP_PARALLEL_END:
        case BUILT_IN_GOMP_SECTIONS_END:
        case BUILT_IN_GOMP_SINGLE_COPY_START:
        case BUILT_IN_GOMP_SINGLE_COPY_END:
--- gcc/c-family/c-common.c.jj  2013-03-20 10:04:57.000000000 +0100
+++ gcc/c-family/c-common.c     2013-04-10 16:44:06.658904039 +0200
@@ -5017,6 +5017,7 @@ enum c_builtin_type
 #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
 #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) 
NAME,
 #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, 
ARG7) NAME,
+#define DEF_FUNCTION_TYPE_8(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, 
ARG7, ARG8) NAME,
 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
@@ -5035,6 +5036,7 @@ enum c_builtin_type
 #undef DEF_FUNCTION_TYPE_5
 #undef DEF_FUNCTION_TYPE_6
 #undef DEF_FUNCTION_TYPE_7
+#undef DEF_FUNCTION_TYPE_8
 #undef DEF_FUNCTION_TYPE_VAR_0
 #undef DEF_FUNCTION_TYPE_VAR_1
 #undef DEF_FUNCTION_TYPE_VAR_2
@@ -5117,6 +5119,10 @@ c_define_builtins (tree va_list_ref_type
 #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
                            ARG6, ARG7)                                 \
   def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
+#define DEF_FUNCTION_TYPE_8(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
+                           ARG6, ARG7, ARG8)                           \
+  def_fn_type (ENUM, RETURN, 0, 8, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, \
+              ARG7, ARG8);
 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
   def_fn_type (ENUM, RETURN, 1, 0);
 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
--- gcc/c-family/c-omp.c.jj     2013-03-27 13:01:09.000000000 +0100
+++ gcc/c-family/c-omp.c        2013-04-10 17:06:38.931821514 +0200
@@ -614,6 +614,7 @@ c_split_parallel_clauses (location_t loc
        case OMP_CLAUSE_IF:
        case OMP_CLAUSE_NUM_THREADS:
        case OMP_CLAUSE_DEFAULT:
+       case OMP_CLAUSE_PROC_BIND:
          OMP_CLAUSE_CHAIN (clauses) = *par_clauses;
          *par_clauses = clauses;
          break;
--- gcc/cp/cp-tree.h.jj 2013-03-27 13:01:09.000000000 +0100
+++ gcc/cp/cp-tree.h    2013-04-10 16:20:59.746188771 +0200
@@ -5718,6 +5718,7 @@ extern void finish_omp_barrier                    (void);
 extern void finish_omp_flush                   (void);
 extern void finish_omp_taskwait                        (void);
 extern void finish_omp_taskyield               (void);
+extern void finish_omp_taskgroup               (tree);
 extern void finish_omp_cancel                  (tree);
 extern void finish_omp_cancellation_point      (tree);
 extern tree begin_transaction_stmt             (location_t, tree *, int);
--- gcc/cp/parser.c.jj  2013-03-27 13:01:09.000000000 +0100
+++ gcc/cp/parser.c     2013-04-10 17:52:58.343463591 +0200
@@ -26736,7 +26736,7 @@ cp_parser_omp_clause_proc_bind (cp_parse
     goto invalid_kind;
 
   cp_lexer_consume_token (parser->lexer);
-  if (!cp_parser_require (parser, CPP_COLON, RT_COLON))
+  if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_COMMA_CLOSE_PAREN))
     goto resync_fail;
 
   c = build_omp_clause (location, OMP_CLAUSE_PROC_BIND);
@@ -28389,6 +28389,30 @@ cp_parser_omp_taskyield (cp_parser *pars
   finish_omp_taskyield ();
 }
 
+/* OpenMP 4.0:
+   # pragma omp taskgroup new-line
+     structured-block  */
+
+static void
+cp_parser_omp_taskgroup (cp_parser *parser, cp_token *pragma_tok)
+{
+  tree sb;
+  unsigned int save;
+  location_t saved_loc;
+
+  cp_parser_require_pragma_eol (parser, pragma_tok);
+  sb = begin_omp_structured_block ();
+  save = cp_parser_begin_omp_structured_block (parser);
+  cp_parser_statement (parser, NULL_TREE, false, NULL);
+  cp_parser_end_omp_structured_block (parser, save);
+  saved_loc = input_location;
+  input_location = pragma_tok->location;
+  finish_omp_taskgroup (finish_omp_structured_block (sb));
+  input_location = saved_loc;
+}
+
+
+
 /* OpenMP 2.5:
    # pragma omp threadprivate (variable-list) */
 
@@ -28499,6 +28523,9 @@ cp_parser_omp_construct (cp_parser *pars
     case PRAGMA_OMP_TASK:
       stmt = cp_parser_omp_task (parser, pragma_tok);
       break;
+    case PRAGMA_OMP_TASKGROUP:
+      cp_parser_omp_taskgroup (parser, pragma_tok);
+      return;
     default:
       gcc_unreachable ();
     }
@@ -28971,6 +28998,7 @@ cp_parser_pragma (cp_parser *parser, enu
     case PRAGMA_OMP_SIMD:
     case PRAGMA_OMP_SINGLE:
     case PRAGMA_OMP_TASK:
+    case PRAGMA_OMP_TASKGROUP:
       if (context == pragma_external)
        goto bad_stmt;
       cp_parser_omp_construct (parser, pragma_tok);
--- gcc/cp/semantics.c.jj       2013-04-05 14:35:07.000000000 +0200
+++ gcc/cp/semantics.c  2013-04-10 16:22:35.555660309 +0200
@@ -5341,6 +5341,20 @@ finish_omp_taskyield (void)
 }
 
 void
+finish_omp_taskgroup (tree block_stmt)
+{
+  tree fn = builtin_decl_explicit (BUILT_IN_GOMP_TASKGROUP_START);
+  vec<tree, va_gc> *vec = make_tree_vector ();
+  tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
+  finish_expr_stmt (stmt);
+  finish_expr_stmt (block_stmt);
+  fn = builtin_decl_explicit (BUILT_IN_GOMP_TASKGROUP_END);
+  stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
+  finish_expr_stmt (stmt);
+  release_tree_vector (vec);
+}
+
+void
 finish_omp_cancel (tree clauses)
 {
   tree fn = builtin_decl_explicit (BUILT_IN_GOMP_CANCEL);
--- gcc/fortran/f95-lang.c.jj   2013-03-27 13:01:09.000000000 +0100
+++ gcc/fortran/f95-lang.c      2013-04-10 16:51:13.971320552 +0200
@@ -619,6 +619,7 @@ gfc_init_builtin_functions (void)
 #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
 #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) 
NAME,
 #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, 
ARG7) NAME,
+#define DEF_FUNCTION_TYPE_8(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, 
ARG7, ARG8) NAME,
 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
 #include "types.def"
@@ -631,6 +632,7 @@ gfc_init_builtin_functions (void)
 #undef DEF_FUNCTION_TYPE_5
 #undef DEF_FUNCTION_TYPE_6
 #undef DEF_FUNCTION_TYPE_7
+#undef DEF_FUNCTION_TYPE_8
 #undef DEF_FUNCTION_TYPE_VAR_0
 #undef DEF_POINTER_TYPE
     BT_LAST
@@ -993,6 +995,19 @@ gfc_init_builtin_functions (void)
                                 builtin_types[(int) ARG6],              \
                                 builtin_types[(int) ARG7],              \
                                 NULL_TREE);
+#define DEF_FUNCTION_TYPE_8(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
+                           ARG6, ARG7, ARG8)                           \
+  builtin_types[(int) ENUM]                                            \
+    = build_function_type_list (builtin_types[(int) RETURN],           \
+                               builtin_types[(int) ARG1],              \
+                               builtin_types[(int) ARG2],              \
+                               builtin_types[(int) ARG3],              \
+                               builtin_types[(int) ARG4],              \
+                               builtin_types[(int) ARG5],              \
+                               builtin_types[(int) ARG6],              \
+                               builtin_types[(int) ARG7],              \
+                               builtin_types[(int) ARG8],              \
+                               NULL_TREE);
 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN)                          \
   builtin_types[(int) ENUM]                                            \
     = build_varargs_function_type_list (builtin_types[(int) RETURN],    \
--- gcc/fortran/types.def.jj    2013-03-20 10:07:56.000000000 +0100
+++ gcc/fortran/types.def       2013-04-10 16:57:17.336164237 +0200
@@ -34,6 +34,8 @@ along with GCC; see the file COPYING3.
    DEF_FUNCTION_TYPE_5 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5)
    DEF_FUNCTION_TYPE_6 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6)
    DEF_FUNCTION_TYPE_7 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7)
+   DEF_FUNCTION_TYPE_8 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7,
+                       ARG8)
 
      These macros describe function types.  ENUM is as above.  The
      RETURN type is one of the enumerals already defined.  ARG1, ARG2,
@@ -137,8 +139,6 @@ DEF_FUNCTION_TYPE_3 (BT_FN_I4_VPTR_I4_I4
 DEF_FUNCTION_TYPE_3 (BT_FN_I8_VPTR_I8_I8, BT_I8, BT_VOLATILE_PTR, BT_I8, BT_I8)
 DEF_FUNCTION_TYPE_3 (BT_FN_I16_VPTR_I16_I16, BT_I16, BT_VOLATILE_PTR,
                     BT_I16, BT_I16)
-DEF_FUNCTION_TYPE_3 (BT_FN_VOID_OMPFN_PTR_UINT, BT_VOID, BT_PTR_FN_VOID_PTR,
-                     BT_PTR, BT_UINT)
 DEF_FUNCTION_TYPE_3 (BT_FN_I1_VPTR_I1_INT, BT_I1, BT_VOLATILE_PTR, BT_I1, 
BT_INT)
 DEF_FUNCTION_TYPE_3 (BT_FN_I2_VPTR_I2_INT, BT_I2, BT_VOLATILE_PTR, BT_I2, 
BT_INT)
 DEF_FUNCTION_TYPE_3 (BT_FN_I4_VPTR_I4_INT, BT_I4, BT_VOLATILE_PTR, BT_I4, 
BT_INT)
@@ -159,6 +159,9 @@ DEF_FUNCTION_TYPE_4 (BT_FN_VOID_SIZE_VPT
 DEF_FUNCTION_TYPE_4 (BT_FN_VOID_SIZE_CONST_VPTR_PTR_INT, BT_VOID, BT_SIZE,
                     BT_CONST_VOLATILE_PTR, BT_PTR, BT_INT)
 
+DEF_FUNCTION_TYPE_5 (BT_FN_VOID_OMPFN_PTR_UINT_UINT_UINT,
+                    BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT, BT_UINT,
+                    BT_UINT)
 DEF_FUNCTION_TYPE_5 (BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
                      BT_BOOL, BT_LONG, BT_LONG, BT_LONG,
                     BT_PTR_LONG, BT_PTR_LONG)
@@ -168,9 +171,6 @@ DEF_FUNCTION_TYPE_5 (BT_FN_VOID_SIZE_VPT
 DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
                      BT_BOOL, BT_LONG, BT_LONG, BT_LONG, BT_LONG,
                     BT_PTR_LONG, BT_PTR_LONG)
-DEF_FUNCTION_TYPE_6 (BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG,
-                     BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT,
-                     BT_LONG, BT_LONG, BT_LONG)
 DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULLPTR_ULLPTR,
                     BT_BOOL, BT_BOOL, BT_ULONGLONG, BT_ULONGLONG,
                     BT_ULONGLONG, BT_PTR_ULONGLONG, BT_PTR_ULONGLONG)
@@ -192,9 +192,9 @@ DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_VPTR_PTR
 DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_SIZE_VPTR_PTR_PTR_INT_INT, BT_BOOL, BT_SIZE,
                     BT_VOLATILE_PTR, BT_PTR, BT_PTR, BT_INT, BT_INT)
 
-DEF_FUNCTION_TYPE_7 (BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG,
+DEF_FUNCTION_TYPE_7 (BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_UINT,
                      BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT,
-                     BT_LONG, BT_LONG, BT_LONG, BT_LONG)
+                    BT_LONG, BT_LONG, BT_LONG, BT_UINT)
 DEF_FUNCTION_TYPE_7 (BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT,
                     BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR,
                     BT_PTR_FN_VOID_PTR_PTR, BT_LONG, BT_LONG,
@@ -204,4 +204,8 @@ DEF_FUNCTION_TYPE_7 (BT_FN_BOOL_BOOL_ULL
                     BT_ULONGLONG, BT_ULONGLONG,
                     BT_PTR_ULONGLONG, BT_PTR_ULONGLONG)
 
+DEF_FUNCTION_TYPE_8 (BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG_UINT,
+                    BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT,
+                    BT_LONG, BT_LONG, BT_LONG, BT_LONG, BT_UINT)
+
 DEF_FUNCTION_TYPE_VAR_0 (BT_FN_VOID_VAR, BT_VOID)
--- gcc/ada/gcc-interface/utils.c.jj    2013-03-20 10:07:43.000000000 +0100
+++ gcc/ada/gcc-interface/utils.c       2013-04-10 16:45:17.642482812 +0200
@@ -5755,6 +5755,7 @@ enum c_builtin_type
 #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
 #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) 
NAME,
 #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, 
ARG7) NAME,
+#define DEF_FUNCTION_TYPE_8(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, 
ARG7, ARG8) NAME,
 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
@@ -5773,6 +5774,7 @@ enum c_builtin_type
 #undef DEF_FUNCTION_TYPE_5
 #undef DEF_FUNCTION_TYPE_6
 #undef DEF_FUNCTION_TYPE_7
+#undef DEF_FUNCTION_TYPE_8
 #undef DEF_FUNCTION_TYPE_VAR_0
 #undef DEF_FUNCTION_TYPE_VAR_1
 #undef DEF_FUNCTION_TYPE_VAR_2
@@ -5868,6 +5870,10 @@ install_builtin_function_types (void)
 #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
                            ARG6, ARG7)                                 \
   def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
+#define DEF_FUNCTION_TYPE_8(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
+                           ARG6, ARG7, ARG8)                           \
+  def_fn_type (ENUM, RETURN, 0, 8, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, \
+              ARG7, ARG8);
 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
   def_fn_type (ENUM, RETURN, 1, 0);
 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
--- gcc/lto/lto-lang.c.jj       2013-03-20 10:08:13.000000000 +0100
+++ gcc/lto/lto-lang.c  2013-04-10 16:46:17.319117855 +0200
@@ -140,6 +140,7 @@ enum lto_builtin_type
 #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
 #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) 
NAME,
 #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, 
ARG7) NAME,
+#define DEF_FUNCTION_TYPE_8(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, 
ARG7, ARG8) NAME,
 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
@@ -158,6 +159,7 @@ enum lto_builtin_type
 #undef DEF_FUNCTION_TYPE_5
 #undef DEF_FUNCTION_TYPE_6
 #undef DEF_FUNCTION_TYPE_7
+#undef DEF_FUNCTION_TYPE_8
 #undef DEF_FUNCTION_TYPE_VAR_0
 #undef DEF_FUNCTION_TYPE_VAR_1
 #undef DEF_FUNCTION_TYPE_VAR_2
@@ -631,6 +633,10 @@ lto_define_builtins (tree va_list_ref_ty
 #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
                            ARG6, ARG7)                                 \
   def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
+#define DEF_FUNCTION_TYPE_8(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
+                           ARG6, ARG7, ARG8)                           \
+  def_fn_type (ENUM, RETURN, 0, 8, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, \
+              ARG7, ARG8);
 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
   def_fn_type (ENUM, RETURN, 1, 0);
 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
--- gcc/testsuite/gcc.dg/gomp/combined-1.c.jj   2013-03-20 10:06:09.000000000 
+0100
+++ gcc/testsuite/gcc.dg/gomp/combined-1.c      2013-04-10 17:34:13.301009082 
+0200
@@ -20,5 +20,5 @@ int foo (void)
       }
 }
 
-/* { dg-final { scan-tree-dump-times "GOMP_parallel_loop_runtime_start" 3 
"optimized" } } */
+/* { dg-final { scan-tree-dump-times "GOMP_parallel_loop_runtime" 3 
"optimized" } } */
 /* { dg-final { cleanup-tree-dump "optimized" } } */

        Jakub

Reply via email to