+ /* The length of the possible 'no-' prefix: 3, or 0. */
+ size_t no = STRPREFIX_LIT ("no-", args) ? 3 : 0;
+ /* The length of the possible 'error=' (possibly after
+ 'no-') prefix: 6, or 0. */
+ size_t err = STRPREFIX_LIT ("error=", args + no) ? 6 : 0;
+
+ warning_argmatch (args, no, err);
+ }
+ else
+ warning_argmatch ("all", 0, 0);
+}
+
+
+/*-----------.
+| complain. |
+`-----------*/
+
+void
+complain_init (void)
+{
+ warnings warnings_default =
+ Wconflicts_sr | Wconflicts_rr | Wdeprecated | Wother;
+
+ size_t b;
+ for (b = 0; b < warnings_size; ++b)
+ {
+ warnings_flag[b] = (1 << b & warnings_default
+ ? severity_warning
+ : severity_unset);
+ errority_flag[b] = errority_unset;
+ }
+}
+
+
+/* A diagnostic with FLAGS is about to be issued. With what severity?
+ (severity_fatal, severity_error, severity_disabled, or
+ severity_warning.) */
+
+static severity
+warning_severity (warnings flags)
+{
+ if (flags & fatal)
+ /* Diagnostics about fatal errors. */
+ return severity_fatal;
+ else if (flags & complaint)
+ /* Diagnostics about errors. */
+ return severity_error;
+ else
+ {
+ /* Diagnostics about warnings. */
+ severity res = severity_disabled;
+ size_t b;
+ for (b = 0; b < warnings_size; ++b)
+ if (flags & 1 << b)