On 6/29/22 12:59, Jason Merrill wrote:
On 6/23/22 13:03, Lewis Hyatt via Gcc-patches wrote:
Hello-

https://gcc.gnu.org/pipermail/gcc-patches/2022-May/595556.html
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53431#c49

Would a C++ maintainer have some time to take a look at this patch
please? I feel like the PR is still worth resolving. If this doesn't
seem like a good way, I am happy to try another -- would really
appreciate any feedback. Thanks!

Thanks for your persistence, I'll take a look now.

Incidentally, when pinging it's often useful to ping someone from MAINTAINERS directly, as well as the list.  I think your last ping got eaten by some trouble Red Hat email was having at the time.

The cp_token_is_module_directive cleanup is OK.

+  bool skip_this_pragma;

This member seems to be equivalent to
  in_pragma && !should_output_pragmas ()
Maybe it could be a member function instead of a data member?

More soon.

Looks good, just a few minor comments:

+      PD_KIND_INVALID,
+      PD_KIND_PUSH,
+      PD_KIND_POP,
+      PD_KIND_IGNORED_ATTRIBUTES,
+      PD_KIND_DIAGNOSTIC,

The PD_KIND_ prefix seems unnecessary for a scoped enum.

+/* When preprocessing only, pragma_lex() is not available, so obtain the tokens
+   directly from libcpp.  */
+static void
+pragma_diagnostic_lex_pp (pragma_diagnostic_data *result)

Hmm, we could make a temporary lexer, but I guess this is short enough that the duplication is OK.

+/* Similar, for the portion of a diagnostic pragma that was parsed
+   internally and so not seen by our token streamer.  */

Can we rewind after parsing so that the token streamer sees it?

+  if (early && arg)
+    {
+      /* This warning is needed because of PR71603 - popping the diagnostic
+        state does not currently reset changes to option arguments, only
+        changes to the option dispositions.  */
+      warning_at (data.loc_option, OPT_Wpragmas,
+                 "a diagnostic pragma attempting to modify a preprocessor"
+                 " option argument may not work as expected");
+    }

Maybe only warn if we subsequently see a pop?

+/* Handle #pragma gcc diagnostic, which needs to be done during preprocessing
+   for the case of preprocessing-related diagnostics.  */
+static void
+cp_lexer_handle_early_pragma (cp_lexer *lexer)

Let's mention in the comment that this is called before appending the CPP_PRAGMA_EOL to the lexer buffer.

Jason

Reply via email to