Re: [PATCH 1/1] Unify registered_pp_pragmas and registered_pragmas
On 11/3/24 12:26 PM, Paul Iannetta wrote: On Fri, Nov 01, 2024 at 11:45:07AM -0400, Jason Merrill wrote: On 10/31/24 6:43 AM, Paul Iannetta wrote: gcc/c-family/ChangeLog: * c-pragma.cc (struct pragma_pp_data): Use (struct internal_pragma_handler); (c_register_pragma_1): Always register name and space for all pragmas. If we're using the _pp data structure for all pragmas now, I'd think we should rename it to remove _pp? Thank you for the feedback. Do you think we should also keep the "registered_pragma" variable rather than the "registered_pp_pragma" variable then? I think the single remaining variable should be called "registered_pragmas", yes. Jason
Re: [PATCH 1/1] Unify registered_pp_pragmas and registered_pragmas
On Fri, Nov 01, 2024 at 11:45:07AM -0400, Jason Merrill wrote: > On 10/31/24 6:43 AM, Paul Iannetta wrote: > > gcc/c-family/ChangeLog: > > > > * c-pragma.cc (struct pragma_pp_data): Use (struct > > internal_pragma_handler); > > (c_register_pragma_1): Always register name and space for all pragmas. > > If we're using the _pp data structure for all pragmas now, I'd think we > should rename it to remove _pp? Thank you for the feedback. Do you think we should also keep the "registered_pragma" variable rather than the "registered_pp_pragma" variable then? Thanks, Paul > > (c_invoke_pragma_handler): Adapt. > > (c_invoke_early_pragma_handler): Likewise. > > (c_pp_invoke_early_pragma_handler): Likewise. > > --- > > gcc/c-family/c-pragma.cc | 54 +--- > > 1 file changed, 23 insertions(+), 31 deletions(-) > > > > diff --git a/gcc/c-family/c-pragma.cc b/gcc/c-family/c-pragma.cc > > index de7c378965d..81c785ce6ed 100644 > > --- a/gcc/c-family/c-pragma.cc > > +++ b/gcc/c-family/c-pragma.cc > > @@ -1488,16 +1488,14 @@ handle_pragma_float_const_decimal64 (cpp_reader *) > > /* A vector of registered pragma callbacks, which is never freed. */ > > -static vec registered_pragmas; > > struct pragma_pp_data > > { > > const char *space; > > const char *name; > > - pragma_handler_1arg early_handler; > > + struct internal_pragma_handler ihandler; > > }; > > - > > static vec registered_pp_pragmas; > > struct omp_pragma_def { const char *name; unsigned int id; }; > > @@ -1613,31 +1611,24 @@ c_register_pragma_1 (const char *space, const char > > *name, > > { > > unsigned id; > > - if (flag_preprocess_only) > > -{ > > - if (cpp_get_options (parse_in)->directives_only > > - || !(allow_expansion || ihandler.early_handler.handler_1arg)) > > - return; > > + pragma_pp_data pp_data; > > + pp_data.space = space; > > + pp_data.name = name; > > - pragma_pp_data pp_data; > > - pp_data.space = space; > > - pp_data.name = name; > > - pp_data.early_handler = ihandler.early_handler.handler_1arg; > > - registered_pp_pragmas.safe_push (pp_data); > > - id = registered_pp_pragmas.length (); > > - id += PRAGMA_FIRST_EXTERNAL - 1; > > -} > > - else > > -{ > > - registered_pragmas.safe_push (ihandler); > > - id = registered_pragmas.length (); > > - id += PRAGMA_FIRST_EXTERNAL - 1; > > - > > - /* The C front end allocates 8 bits in c_token. The C++ front end > > -keeps the pragma kind in the form of INTEGER_CST, so no small > > -limit applies. At present this is sufficient. */ > > - gcc_assert (id < 256); > > -} > > + if (flag_preprocess_only > > + && (cpp_get_options (parse_in)->directives_only > > + || !(allow_expansion || ihandler.early_handler.handler_1arg))) > > +return; > > + > > + pp_data.ihandler = ihandler; > > + registered_pp_pragmas.safe_push (pp_data); > > + id = registered_pp_pragmas.length (); > > + id += PRAGMA_FIRST_EXTERNAL - 1; > > + > > + /* The C front end allocates 8 bits in c_token. The C++ front end > > + keeps the pragma kind in the form of INTEGER_CST, so no small > > + limit applies. At present this is sufficient. */ > > + gcc_assert (id < 256); > > cpp_register_deferred_pragma (parse_in, space, name, id, > > allow_expansion, false); > > @@ -1731,7 +1722,7 @@ c_invoke_pragma_handler (unsigned int id) > > pragma_handler_2arg handler_2arg; > > id -= PRAGMA_FIRST_EXTERNAL; > > - ihandler = ®istered_pragmas[id]; > > + ihandler = ®istered_pp_pragmas[id].ihandler; > > if (ihandler->extra_data) > > { > > handler_2arg = ihandler->handler.handler_2arg; > > @@ -1753,7 +1744,7 @@ c_invoke_early_pragma_handler (unsigned int id) > > pragma_handler_2arg handler_2arg; > > id -= PRAGMA_FIRST_EXTERNAL; > > - ihandler = ®istered_pragmas[id]; > > + ihandler = ®istered_pp_pragmas[id].ihandler; > > if (ihandler->extra_data) > > { > > handler_2arg = ihandler->early_handler.handler_2arg; > > @@ -1772,9 +1763,10 @@ void > > c_pp_invoke_early_pragma_handler (unsigned int id) > > { > > const auto data = ®istered_pp_pragmas[id - PRAGMA_FIRST_EXTERNAL]; > > - if (data->early_handler) > > + pragma_handler_1arg handler = data->ihandler.early_handler.handler_1arg; > > + if (handler) > > { > > - data->early_handler (parse_in); > > + handler (parse_in); > > pragma_lex_discard_to_eol (); > > } > > } > > > > >
Re: [PATCH 1/1] Unify registered_pp_pragmas and registered_pragmas
On 10/31/24 6:43 AM, Paul Iannetta wrote: gcc/c-family/ChangeLog: * c-pragma.cc (struct pragma_pp_data): Use (struct internal_pragma_handler); (c_register_pragma_1): Always register name and space for all pragmas. If we're using the _pp data structure for all pragmas now, I'd think we should rename it to remove _pp? (c_invoke_pragma_handler): Adapt. (c_invoke_early_pragma_handler): Likewise. (c_pp_invoke_early_pragma_handler): Likewise. --- gcc/c-family/c-pragma.cc | 54 +--- 1 file changed, 23 insertions(+), 31 deletions(-) diff --git a/gcc/c-family/c-pragma.cc b/gcc/c-family/c-pragma.cc index de7c378965d..81c785ce6ed 100644 --- a/gcc/c-family/c-pragma.cc +++ b/gcc/c-family/c-pragma.cc @@ -1488,16 +1488,14 @@ handle_pragma_float_const_decimal64 (cpp_reader *) /* A vector of registered pragma callbacks, which is never freed. */ -static vec registered_pragmas; struct pragma_pp_data { const char *space; const char *name; - pragma_handler_1arg early_handler; + struct internal_pragma_handler ihandler; }; - static vec registered_pp_pragmas; struct omp_pragma_def { const char *name; unsigned int id; }; @@ -1613,31 +1611,24 @@ c_register_pragma_1 (const char *space, const char *name, { unsigned id; - if (flag_preprocess_only) -{ - if (cpp_get_options (parse_in)->directives_only - || !(allow_expansion || ihandler.early_handler.handler_1arg)) - return; + pragma_pp_data pp_data; + pp_data.space = space; + pp_data.name = name; - pragma_pp_data pp_data; - pp_data.space = space; - pp_data.name = name; - pp_data.early_handler = ihandler.early_handler.handler_1arg; - registered_pp_pragmas.safe_push (pp_data); - id = registered_pp_pragmas.length (); - id += PRAGMA_FIRST_EXTERNAL - 1; -} - else -{ - registered_pragmas.safe_push (ihandler); - id = registered_pragmas.length (); - id += PRAGMA_FIRST_EXTERNAL - 1; - - /* The C front end allocates 8 bits in c_token. The C++ front end -keeps the pragma kind in the form of INTEGER_CST, so no small -limit applies. At present this is sufficient. */ - gcc_assert (id < 256); -} + if (flag_preprocess_only + && (cpp_get_options (parse_in)->directives_only + || !(allow_expansion || ihandler.early_handler.handler_1arg))) +return; + + pp_data.ihandler = ihandler; + registered_pp_pragmas.safe_push (pp_data); + id = registered_pp_pragmas.length (); + id += PRAGMA_FIRST_EXTERNAL - 1; + + /* The C front end allocates 8 bits in c_token. The C++ front end + keeps the pragma kind in the form of INTEGER_CST, so no small + limit applies. At present this is sufficient. */ + gcc_assert (id < 256); cpp_register_deferred_pragma (parse_in, space, name, id, allow_expansion, false); @@ -1731,7 +1722,7 @@ c_invoke_pragma_handler (unsigned int id) pragma_handler_2arg handler_2arg; id -= PRAGMA_FIRST_EXTERNAL; - ihandler = ®istered_pragmas[id]; + ihandler = ®istered_pp_pragmas[id].ihandler; if (ihandler->extra_data) { handler_2arg = ihandler->handler.handler_2arg; @@ -1753,7 +1744,7 @@ c_invoke_early_pragma_handler (unsigned int id) pragma_handler_2arg handler_2arg; id -= PRAGMA_FIRST_EXTERNAL; - ihandler = ®istered_pragmas[id]; + ihandler = ®istered_pp_pragmas[id].ihandler; if (ihandler->extra_data) { handler_2arg = ihandler->early_handler.handler_2arg; @@ -1772,9 +1763,10 @@ void c_pp_invoke_early_pragma_handler (unsigned int id) { const auto data = ®istered_pp_pragmas[id - PRAGMA_FIRST_EXTERNAL]; - if (data->early_handler) + pragma_handler_1arg handler = data->ihandler.early_handler.handler_1arg; + if (handler) { - data->early_handler (parse_in); + handler (parse_in); pragma_lex_discard_to_eol (); } }
[PATCH 1/1] Unify registered_pp_pragmas and registered_pragmas
gcc/c-family/ChangeLog: * c-pragma.cc (struct pragma_pp_data): Use (struct internal_pragma_handler); (c_register_pragma_1): Always register name and space for all pragmas. (c_invoke_pragma_handler): Adapt. (c_invoke_early_pragma_handler): Likewise. (c_pp_invoke_early_pragma_handler): Likewise. --- gcc/c-family/c-pragma.cc | 54 +--- 1 file changed, 23 insertions(+), 31 deletions(-) diff --git a/gcc/c-family/c-pragma.cc b/gcc/c-family/c-pragma.cc index de7c378965d..81c785ce6ed 100644 --- a/gcc/c-family/c-pragma.cc +++ b/gcc/c-family/c-pragma.cc @@ -1488,16 +1488,14 @@ handle_pragma_float_const_decimal64 (cpp_reader *) /* A vector of registered pragma callbacks, which is never freed. */ -static vec registered_pragmas; struct pragma_pp_data { const char *space; const char *name; - pragma_handler_1arg early_handler; + struct internal_pragma_handler ihandler; }; - static vec registered_pp_pragmas; struct omp_pragma_def { const char *name; unsigned int id; }; @@ -1613,31 +1611,24 @@ c_register_pragma_1 (const char *space, const char *name, { unsigned id; - if (flag_preprocess_only) -{ - if (cpp_get_options (parse_in)->directives_only - || !(allow_expansion || ihandler.early_handler.handler_1arg)) - return; + pragma_pp_data pp_data; + pp_data.space = space; + pp_data.name = name; - pragma_pp_data pp_data; - pp_data.space = space; - pp_data.name = name; - pp_data.early_handler = ihandler.early_handler.handler_1arg; - registered_pp_pragmas.safe_push (pp_data); - id = registered_pp_pragmas.length (); - id += PRAGMA_FIRST_EXTERNAL - 1; -} - else -{ - registered_pragmas.safe_push (ihandler); - id = registered_pragmas.length (); - id += PRAGMA_FIRST_EXTERNAL - 1; - - /* The C front end allocates 8 bits in c_token. The C++ front end -keeps the pragma kind in the form of INTEGER_CST, so no small -limit applies. At present this is sufficient. */ - gcc_assert (id < 256); -} + if (flag_preprocess_only + && (cpp_get_options (parse_in)->directives_only + || !(allow_expansion || ihandler.early_handler.handler_1arg))) +return; + + pp_data.ihandler = ihandler; + registered_pp_pragmas.safe_push (pp_data); + id = registered_pp_pragmas.length (); + id += PRAGMA_FIRST_EXTERNAL - 1; + + /* The C front end allocates 8 bits in c_token. The C++ front end + keeps the pragma kind in the form of INTEGER_CST, so no small + limit applies. At present this is sufficient. */ + gcc_assert (id < 256); cpp_register_deferred_pragma (parse_in, space, name, id, allow_expansion, false); @@ -1731,7 +1722,7 @@ c_invoke_pragma_handler (unsigned int id) pragma_handler_2arg handler_2arg; id -= PRAGMA_FIRST_EXTERNAL; - ihandler = ®istered_pragmas[id]; + ihandler = ®istered_pp_pragmas[id].ihandler; if (ihandler->extra_data) { handler_2arg = ihandler->handler.handler_2arg; @@ -1753,7 +1744,7 @@ c_invoke_early_pragma_handler (unsigned int id) pragma_handler_2arg handler_2arg; id -= PRAGMA_FIRST_EXTERNAL; - ihandler = ®istered_pragmas[id]; + ihandler = ®istered_pp_pragmas[id].ihandler; if (ihandler->extra_data) { handler_2arg = ihandler->early_handler.handler_2arg; @@ -1772,9 +1763,10 @@ void c_pp_invoke_early_pragma_handler (unsigned int id) { const auto data = ®istered_pp_pragmas[id - PRAGMA_FIRST_EXTERNAL]; - if (data->early_handler) + pragma_handler_1arg handler = data->ihandler.early_handler.handler_1arg; + if (handler) { - data->early_handler (parse_in); + handler (parse_in); pragma_lex_discard_to_eol (); } } -- 2.35.1.500.gb896f729e2