+2008-05-06 Tom Tromey <tromey@redhat.com>
+
+ 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.
+
2008-05-06 Tobias Burnus <burnus@net-b.de>
PR fortran/36117
-/* Copyright (C) 2000 Free Software Foundation, Inc. */
+/* Copyright (C) 2000, 2008 Free Software Foundation, Inc. */
/* Test the full range of preprocessor operator precedence. Each
operator is tested with one of immediately higher precedence to
#else
#endif
-/* , not higher than ?. This is not a syntax error if it is. */
-#if 1 ? 0, 1: 1 /* { dg-error "without" "? higher precedence than ," } */
-#error
-#endif
-
/* : strictly higher than ?. This would give a syntax error otherwise. */
#if 0 ? 0 : 1 ? 1 : 1
#endif
+2008-05-06 Tom Tromey <tromey@redhat.com>
+
+ 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.
+
2008-05-04 David S. Miller <davem@davemloft.net>
* configure.ac (sparc*-*-*): Always set need_64bit_hwint to yes.
/* 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
/* 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},
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;