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

            Bug ID: 118859
           Summary: [C++] dispatch accepts non-pointer template argument
                    with adjust_args
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Keywords: accepts-invalid, diagnostic
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: burnus at gcc dot gnu.org
                CC: parras at gcc dot gnu.org
  Target Milestone: ---

Testcase: g++.dg/gomp/adjust-args-2.C of r15-5518-ged49709acda493

The following won't fly:

template <typename T>
T f0(T a, T *b);

#pragma omp declare variant (f0) match (construct={dispatch}) \
                                 adjust_args (need_device_ptr: a, b)
template <typename T>
T f1(T a, T *b);
...

  int *a, b;
...
  #pragma omp dispatch
  f1(b, a);

Namely: 'f1(int, int *)' — that's fine in the C++ sense
but not when doing a need_device_ptr of an 'int' does not make sense.


* * *

In gcc/cp/parser.cc, there is the diagnostic:

                          if (!is_ptr_or_template)
                            {
                              error_at (arg_loc, "%qD is not a C pointer",
                                        decl);

But the corresponding is-template diagnostic is missing in gcc/cp/decl.cc's
omp_declare_variant_finalize_one

Reply via email to