On Wed, Sep 16, 2020 at 08:00:01AM -0400, Nathan Sidwell wrote:
> is libgomp/testsuite/libgomp.c++/udr-3.C well formed?
>
> Specifically V<T,D>::baz?
>
> If you remove the templatedness and plug in typedefs for T & D on its only
> instantiation (as the attached does), you get the following errors:
>
> devvm293:414>g++ -std=c++11 -c -fopenmp udr-3.C
> udr-3.C: In member function 'void V::baz()':
> udr-3.C:112:27: error: no matching function for call to 'W::W(int)'
> 112 | initializer (omp_priv (12))
> | ^
I guess you're right that W::W(int) should be defined.
And the question is why it isn't diagnosed during instantiation, sure.
The initialized (omp_priv (12))
etc. clause means that for the type(s) for which the declare reduction
is defined, when omp-low.c privatizes the variable, it should be done
as if the source contained W var (12);
This is done by attaching code to call the right ctors/dtors to the clauses
and omp-low.c emitting those sequences.
Jakub