PR preprocessor/35313, PR preprocessor/36088:
gcc/testsuite PR preprocessor/35313, PR preprocessor/36088: * gcc.dg/cpp/pr35313.c: New file. * gcc.dg/cpp/if-oppr.c: Remove test for ',' in a conditional expression. * gcc.dg/cpp/if-oppr2.c: New file. libcpp PR preprocessor/35313, PR preprocessor/36088: * expr.c (optab) <QUERY, COMMA>: Set precedence to 4. (reduce) <case CPP_QUERY>: Special case CPP_COMMA and CPP_COLON. From-SVN: r134989
This commit is contained in:
parent
3c3f426502
commit
71c10038d1
6 changed files with 44 additions and 9 deletions
|
@ -1,6 +1,6 @@
|
|||
/* Parse C expressions for cpplib.
|
||||
Copyright (C) 1987, 1992, 1994, 1995, 1997, 1998, 1999, 2000, 2001,
|
||||
2002, 2004 Free Software Foundation.
|
||||
2002, 2004, 2008 Free Software Foundation.
|
||||
Contributed by Per Bothner, 1994.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
|
@ -809,9 +809,11 @@ static const struct cpp_operator
|
|||
/* COMPL */ {16, NO_L_OPERAND},
|
||||
/* AND_AND */ {6, LEFT_ASSOC},
|
||||
/* OR_OR */ {5, LEFT_ASSOC},
|
||||
/* QUERY */ {3, 0},
|
||||
/* Note that QUERY, COLON, and COMMA must have the same precedence.
|
||||
However, there are some special cases for these in reduce(). */
|
||||
/* QUERY */ {4, 0},
|
||||
/* COLON */ {4, LEFT_ASSOC | CHECK_PROMOTION},
|
||||
/* COMMA */ {2, LEFT_ASSOC},
|
||||
/* COMMA */ {4, LEFT_ASSOC},
|
||||
/* OPEN_PAREN */ {1, NO_L_OPERAND},
|
||||
/* CLOSE_PAREN */ {0, 0},
|
||||
/* EOF */ {0, 0},
|
||||
|
@ -1101,6 +1103,9 @@ reduce (cpp_reader *pfile, struct op *top, enum cpp_ttype op)
|
|||
continue;
|
||||
|
||||
case CPP_QUERY:
|
||||
/* COMMA and COLON should not reduce a QUERY operator. */
|
||||
if (op == CPP_COMMA || op == CPP_COLON)
|
||||
return top;
|
||||
cpp_error (pfile, CPP_DL_ERROR, "'?' without following ':'");
|
||||
return 0;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue