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>
|
||||
|
||||
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
|
||||
operator is tested with one of immediately higher precedence to
|
||||
@ -19,11 +19,6 @@
|
||||
#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
|
||||
|
10
gcc/testsuite/gcc.dg/cpp/if-oppr2.c
Normal file
10
gcc/testsuite/gcc.dg/cpp/if-oppr2.c
Normal file
@ -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
|
11
gcc/testsuite/gcc.dg/cpp/pr35313.c
Normal file
11
gcc/testsuite/gcc.dg/cpp/pr35313.c
Normal file
@ -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>
|
||||
|
||||
* configure.ac (sparc*-*-*): Always set need_64bit_hwint to yes.
|
||||
|
@ -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…
Reference in New Issue
Block a user