On 2022/6/9 8:22 PM, Jakub Jelinek wrote:
+   OpenMP 5.2:
+
+   uses_allocators ( modifier : allocator-list )
Please drop the -list above.

+   uses_allocators ( modifier , modifier : allocator-list )
and here too.

Thanks for catching.

+  struct item_tok
+  {
+    location_t loc;
+    tree id;
+    item_tok (void) : loc (UNKNOWN_LOCATION), id (NULL_TREE) {}
+  };
+  struct item { item_tok name, arg; };
+  auto_vec<item> *modifiers = NULL, *allocators = NULL;
+  auto_vec<item> *cur_list = new auto_vec<item> (4);
I was hoping you'd drop all this.
Seehttps://gcc.gnu.org/r13-1002
for implementation (both C and C++ FE) of something very similar,
the only difference there is that in the case of linear clause, it is
looking for
val
ref
uval
step ( whatever )
followed by , or )
(anod ref and uval not in C FE),
while you are looking for
memspace ( whatever )
traits ( whatever )
followed by : or by , (in case of , repeat).
But in both cases you can actually use the same parser APIs
for raw token pre-parsing to just compute if it is the modifier
syntax or not, set bool has_modifiers based on that (when you
come over probably valid syntax followed by CPP_COLON).

The linear clause doesn't have the legacy 'allocator1(t1), allocator2(t2), ...' 
requirement,
and c_parser_omp_variable_list doesn't seem to support this pattern.

Also, the way c_parser_omp_clause_linear is implemented doesn't support the 
requirement
you mentioned earlier of allowing the use of "memspace", "traits" as the 
allocator name when
it's actually not a modifier.

I have merged the v4 patch with the syntax comments updated as above to 
devel/omp/gcc-11.

Thanks,
Chung-Lin

Reply via email to