c++: omp reduction cleanups
authorNathan Sidwell <nathan@acm.org>
Wed, 9 Sep 2020 19:29:05 +0000 (12:29 -0700)
committerNathan Sidwell <nathan@acm.org>
Wed, 9 Sep 2020 19:37:21 +0000 (12:37 -0700)
commit749476b4be1f8ddf482910f907a5b56eb5f3e138
tree971fc51a9c76424446a0db3066a7fafcc6643c0b
parent782d3ea603c9ad26176136ffb39481a720246be1
c++: omp reduction cleanups

omp reductions are modeled as nested functions, which is a thing C++
doesn't have.  Leading to much confusion until I figured out what was
happening.  Not helped by some duplicate code and inconsistencies in
the dependent and non-dependent paths.  This patch removes the parser
duplication and fixes up some bookkeeping.  Added some asserts and
comments too.

gcc/cp/
* parser.c (cp_parser_omp_declare_reduction): Refactor to avoid
code duplication.  Update DECL_TI_TEMPLATE's context.
* pt.c (tsubst_expr): For OMP reduction function, set context to
global_namespace before pushing.
(tsubst_omp_udr): Assert current_function_decl, add comment about
decl context.
gcc/cp/parser.c
gcc/cp/pt.c