mirror of git://gcc.gnu.org/git/gcc.git
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
|
|
@ -1,3 +1,11 @@
|
||||||
|
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>
|
2008-05-06 Tobias Burnus <burnus@net-b.de>
|
||||||
|
|
||||||
PR fortran/36117
|
PR fortran/36117
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 2000 Free Software Foundation, Inc. */
|
/* Copyright (C) 2000, 2008 Free Software Foundation, Inc. */
|
||||||
|
|
||||||
/* Test the full range of preprocessor operator precedence. Each
|
/* Test the full range of preprocessor operator precedence. Each
|
||||||
operator is tested with one of immediately higher precedence to
|
operator is tested with one of immediately higher precedence to
|
||||||
|
|
@ -19,11 +19,6 @@
|
||||||
#else
|
#else
|
||||||
#endif
|
#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. */
|
/* : strictly higher than ?. This would give a syntax error otherwise. */
|
||||||
#if 0 ? 0 : 1 ? 1 : 1
|
#if 0 ? 0 : 1 ? 1 : 1
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
/* Copyright (C) 2008 Free Software Foundation, Inc. */
|
||||||
|
|
||||||
|
/* Another test of operator precedence. */
|
||||||
|
|
||||||
|
/* { dg-do preprocess } */
|
||||||
|
/* { dg-options "" } */
|
||||||
|
|
||||||
|
#if 1 ? 2 : 3 , 0
|
||||||
|
#error
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
/* Test two failing cases for libcpp parser. From PRs 35313, 36088*/
|
||||||
|
/* { dg-do preprocess } */
|
||||||
|
/* { dg-options "-std=c99 -pedantic-errors" } */
|
||||||
|
|
||||||
|
extern int x;
|
||||||
|
|
||||||
|
#if 0 ? 3,4 : 2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 1 ? 0 : 1 ? 1/0 : 1/0
|
||||||
|
#endif
|
||||||
|
|
@ -1,3 +1,9 @@
|
||||||
|
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>
|
2008-05-04 David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
* configure.ac (sparc*-*-*): Always set need_64bit_hwint to yes.
|
* configure.ac (sparc*-*-*): Always set need_64bit_hwint to yes.
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/* Parse C expressions for cpplib.
|
/* Parse C expressions for cpplib.
|
||||||
Copyright (C) 1987, 1992, 1994, 1995, 1997, 1998, 1999, 2000, 2001,
|
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.
|
Contributed by Per Bothner, 1994.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
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},
|
/* COMPL */ {16, NO_L_OPERAND},
|
||||||
/* AND_AND */ {6, LEFT_ASSOC},
|
/* AND_AND */ {6, LEFT_ASSOC},
|
||||||
/* OR_OR */ {5, 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},
|
/* COLON */ {4, LEFT_ASSOC | CHECK_PROMOTION},
|
||||||
/* COMMA */ {2, LEFT_ASSOC},
|
/* COMMA */ {4, LEFT_ASSOC},
|
||||||
/* OPEN_PAREN */ {1, NO_L_OPERAND},
|
/* OPEN_PAREN */ {1, NO_L_OPERAND},
|
||||||
/* CLOSE_PAREN */ {0, 0},
|
/* CLOSE_PAREN */ {0, 0},
|
||||||
/* EOF */ {0, 0},
|
/* EOF */ {0, 0},
|
||||||
|
|
@ -1101,6 +1103,9 @@ reduce (cpp_reader *pfile, struct op *top, enum cpp_ttype op)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case CPP_QUERY:
|
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 ':'");
|
cpp_error (pfile, CPP_DL_ERROR, "'?' without following ':'");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue