complain
complain(p2, "Garbage after %s argument", what);
complain(&lp->current, "#elif after #else");
complain(&lp->current,
complain(&lp->current, "Unmatched #endif");
complain(p2, "Left parenthesis in macro parameters");
complain(p2, "Unclosed macro parameter list");
complain(p2, "Trash after macro parameter list");
complain(&lp->current, "Illegal #include directive");
complain(&lp->current, "Before macro expansion: #include %s", line);
complain(&lp->current, "After macro expansion: #include %s", text);
complain(&lp->current,
complain(&lp->current,
complain(&lp->current,
complain(&lp->current, "Before macro expansion: #line %s", line);
complain(&lp->current, "After macro expansion: #line %s", text);
complain(&lp->current, "#warning: %s", msg);
complain(&lp->current, "#error: %s", msg);
complain(&lp->current, "#pragma %s", line);
complain(&lp->current, "Unknown directive #%.*s", (int)skip, line);
complain(&p2, "Warning: %c%c within comment",
complain(p, "Missing #endif");
complain(&ifstate->startplace, "...opened at this point");
complain(p, "Negative bit-shift");
complain(p, "Bit-shift farther than type width");
complain(p, "Integer overflow");
complain(p, "Integer underflow");
complain(p, "Integer overflow");
complain(p, "Integer overflow");
complain(p, "Integer underflow");
complain(p, "Integer overflow");
complain(p, "Integer underflow");
complain(p, "Division by zero");
complain(p, "Modulus by zero");
complain(&t2->place, "Invalid unary operator");
complain(&t1->place, "Value expected within ()");
complain(&t1->place, "Operator expected");
complain(&t1->place, "Value expected after operator");
complain(&t1->place, "Excess right parenthesis");
complain(&t1->place, "Unclosed left parenthesis");
complain(&t1->place, "Parse error");
complain(p, "Invalid integer constant");
complain(p, "Trailing garbage after integer constant");
complain(p, "Integer constant too large");
complain(p, "Warning: value of undefined symbol %s is 0",
complain(p, "Invalid character %u in #if-expression",
complain(&places.current,
complain(NULL, "%s: %s",
complain(&ptmp, "Unclosed comment");
complain(&ptmp,
complain(NULL, "%s: %s", file, strerror(errno));
complain(place, "Include file %s not found", name);
complain(NULL, "%s: %s", name, strerror(errno));
complain(p, "Unclosed argument list for macro %s",
complain(p, "Unclosed argument list for defined()");
complain(p1, "Invalid macro name %s", macro);
complain(&m->defplace,
complain(&oldm->defplace,
complain(p, "Invalid macro parameter name %s", param);
complain(p, "Wrong number of arguments for macro %s; "
complain(p, "Too many arguments for defined()");
complain(NULL, "-D: macro name expected");
complain(NULL, "-U: macro name expected");
complain(NULL, "Empty include directory");
complain(NULL, "-iprefix needed");
complain(NULL, "-iprefix needed");
complain(NULL, "Standard %s not supported by this preprocessor", std);
complain(NULL, "Language %s not supported by this preprocessor", lang);
complain(NULL, "-iremap not supported");
complain(NULL, "Invalid tabstop");
complain(NULL, "Invalid tabstop");
complain(NULL, "Preposterously large tabstop");
complain(NULL,
complain(NULL, "%s: %s",
complain(NULL, "%s: write: %s",
complain(NULL, "%s: giving up",
complain(place, "Maximum include nesting depth exceeded");
complain(p, "Column numbering overflow");
complain(p, "Line numbering overflow");
complain(p, "%s: %s", file, strerror(errno));
complain(NULL, "Out of memory");
complain(NULL, "Out of memory");
PF(2, 3) void complain(const struct place *, const char *fmt, ...);