- curr_pos = pos;
- if (warning.s_are_errors) {
- errorvf(pos, fmt, ap);
- } else {
- warningvf(pos, fmt, ap);
+ warning_switch_t const *const s = get_warn_switch(warn);
+ switch ((unsigned) s->state) {
+ char const* kind;
+ case WARN_STATE_ON:
+ if (is_warn_on(WARN_ERROR)) {
+ case WARN_STATE_ON | WARN_STATE_ERROR:
+ ++error_count;
+ kind = "error";
+ } else {
+ case WARN_STATE_ON | WARN_STATE_NO_ERROR:
+ ++warning_count;
+ kind = "warning";
+ }
+ diagnosticposvf(pos, kind, fmt, ap);
+ if (diagnostics_show_option)
+ fprintf(stderr, " [-W%s]\n", s->name);
+ break;
+
+ default:
+ break;