re PR preprocessor/16192 (Bug in expression evaluation when operand is missing)
* doc/cpp.texi: Don't document what we do for ill-formed expressions. * doc/cppopts.texi: Clarify processing of command-line defines. libcpp: PR preprocessor/16192 PR preprocessor/15913 PR preprocessor/15572 * expr.c (_cpp_parse_expr): Handle remaining cases where an expression is missing. * init.c (post_options): Traditional cpp doesn't do // comments. testsuite: * gcc.dg/cpp/if-mop.c: Two new testcases. * gcc.dg/cpp/trad/comment-3.c: New. From-SVN: r84080
This commit is contained in:
parent
b25c17bcf0
commit
a09d474429
9 changed files with 57 additions and 20 deletions
|
@ -747,18 +747,22 @@ _cpp_parse_expr (cpp_reader *pfile)
|
|||
}
|
||||
else if (want_value)
|
||||
{
|
||||
/* Ordering here is subtle and intended to favor the
|
||||
missing parenthesis diagnostics over alternatives. */
|
||||
if (op.op == CPP_CLOSE_PAREN)
|
||||
{
|
||||
if (top->op == CPP_OPEN_PAREN)
|
||||
SYNTAX_ERROR ("void expression between '(' and ')'");
|
||||
}
|
||||
else if (top->op == CPP_EOF)
|
||||
SYNTAX_ERROR ("#if with no expression");
|
||||
if (top->op != CPP_EOF && top->op != CPP_OPEN_PAREN)
|
||||
SYNTAX_ERROR2 ("operator '%s' has no right operand",
|
||||
cpp_token_as_text (pfile, top->token));
|
||||
/* We want a number (or expression) and haven't got one.
|
||||
Try to emit a specific diagnostic. */
|
||||
if (op.op == CPP_CLOSE_PAREN && top->op == CPP_OPEN_PAREN)
|
||||
SYNTAX_ERROR ("missing expression between '(' and ')'");
|
||||
|
||||
if (op.op == CPP_EOF && top->op == CPP_EOF)
|
||||
SYNTAX_ERROR ("#if with no expression");
|
||||
|
||||
if (top->op != CPP_EOF && top->op != CPP_OPEN_PAREN)
|
||||
SYNTAX_ERROR2 ("operator '%s' has no right operand",
|
||||
cpp_token_as_text (pfile, top->token));
|
||||
else if (op.op == CPP_CLOSE_PAREN || op.op == CPP_EOF)
|
||||
/* Complain about missing paren during reduction. */;
|
||||
else
|
||||
SYNTAX_ERROR2 ("operator '%s' has no left operand",
|
||||
cpp_token_as_text (pfile, op.token));
|
||||
}
|
||||
|
||||
top = reduce (pfile, top, op.op);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue