On 2015/12/3 6:11 PM, Jakub Jelinek wrote: > On Thu, Dec 03, 2015 at 06:05:36PM +0800, Chung-Lin Tang wrote: >>> Oh wait, it looks like the C++ front end is not actually using the >>> functions defined in the C/C++-shared gcc/c-family/c-omp.c, but has its >>> own implementations in gcc/cp/semantics.c, without "c_" prefixes? In >>> addition to finish_expr_stmt calls, I see it's also using >>> finish_call_expr instead of build_call_expr_loc/build_call_expr_loc_vec. >>> So I guess we'll want to model this the same way for OpenACC support >>> functions, and then (later) we should clean this up, to move the >>> C-specific code from gcc/c-family/c-omp.c into the C front end? (Jakub?) >> >> I see most OpenACC/OpenMP constructs are represented by special statement >> codes, >> so they should be a different case. I so far only see the OpenACC wait >> directive >> being represented as a CALL_EXPR (maybe there are others, haven't >> exhaustively searched). > > No, Thomas is right, just look at > finish_omp_{barrier,flush,taskwait,taskyield,cancel,cancellation_point}, > all those are represented as CALL_EXPRs. > > Jakub >
Okay, I guess my impression was only for some OpenACC constructs. Overall, OpenACC wait seems one of the few cases of using c_finish_* in cp/parser.c. Whether other cases should move towards/away from that kind of style is a larger question, I was only trying to fix a libgomp.oacc-c++/template-reduction.C regression (testcase currently still in gomp4 branch) Chung-Lin