https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117260

--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
/* DIM_SIZE and DIM_POS return the size of a particular compute
   dimension and the executing thread's position within that
   dimension.  DIM_POS is pure (and not const) so that it isn't
   thought to clobber memory and can be gcse'd within a single
   parallel region, but not across FORK/JOIN boundaries.  They take a
   single INTEGER_CST argument.  This might be overly conservative.  */
DEF_INTERNAL_FN (GOACC_DIM_SIZE, ECF_CONST | ECF_NOTHROW | ECF_LEAF, NULL)
DEF_INTERNAL_FN (GOACC_DIM_POS, ECF_PURE | ECF_NOTHROW | ECF_LEAF, NULL)



The bug is in maybe_push_res_to_seq.


which handles builtins just fine but not internal functions:
```
      if (internal_fn_p (fn))
        {
          /* Generate the given function if we can.  */
          internal_fn ifn = as_internal_fn (fn);
          new_stmt = build_call_internal (ifn, res_op);
          if (!new_stmt)
            return NULL_TREE;
        }
      else
        {
          /* Find the function we want to call.  */
          tree decl = builtin_decl_implicit (as_builtin_fn (fn));
          if (!decl)
            return NULL;

          /* We can't and should not emit calls to non-const functions.  */
          if (!(flags_from_decl_or_type (decl) & ECF_CONST))
            return NULL;

```

Let me figure out how to get flags for an internal function.

Reply via email to