On Thu, Oct 31, 2024 at 11:37:35AM +0100, Tobias Burnus wrote: > Tobias Burnus wrote: > > Before the patch, the included testcase fails with: > > > > declare-variant-9.C:4:29: error: could not find variant declaration > > 4 | #pragma omp declare variant(variant_fn) match(user={condition(1)}) > > | ^~~~~~~~~~ > > > > Comments, remarks, suggestions before I commit it? > > I realized that a template testcase was missing – hence, I extended > the testcase; cf. attachment. > > → Committed as r15-4799-gf011f8908182fd > > BTW: Initially, the template testcase did not work; it turned out that I made > a typo (tmpl vs templ) in the variant name, which GCC did/does not diagnose. > > I discussed with Jakub, who will take care of adding a diagnostic. Thanks! > > Tobias
> commit f011f8908182fd05ddd9a34881507b8584c44fb2 > Author: Tobias Burnus <tbur...@baylibre.com> > Date: Thu Oct 31 11:28:57 2024 +0100 > > OpenMP/C++: Fix declare variant with reference-returning functions > > gcc/cp/ChangeLog: > > * decl.cc (omp_declare_variant_finalize_one): Strip indirect ref > around variant-function call when processing a variant. > > gcc/testsuite/ChangeLog: > > * g++.dg/gomp/declare-variant-9.C: New test. > > diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc > index 0bc320a2b39..b638f3af294 100644 > --- a/gcc/cp/decl.cc > +++ b/gcc/cp/decl.cc > @@ -8375,6 +8375,9 @@ omp_declare_variant_finalize_one (tree decl, tree attr) > if (variant == error_mark_node && !processing_template_decl) > return true; > > + if (TREE_CODE (variant) == INDIRECT_REF) > + variant = TREE_OPERAND (variant, 0); > + > variant = cp_get_callee_fndecl_nofold (variant); I think this should be just variant = cp_get_callee_fndecl_nofold (STRIP_REFERENCE_REF (variant)); instead. Jakub