* cpplex.c (parse_args): Don't set VOID_REST flag. (Fix diagnostic merge problem). (CONTEXT_VARARGS): New flag. (maybe_paste_with_next): Set context earlier in loop. Use it. Do varargs test with CONTEXT_VARARGS flag. (push_arg_context): Set CONTEXT_VARARGS flag if we're pushing an argument context for a varargs argument. * cpplib.h (VOID_REST): Delete. * gcc.dg/cpp/vararg1.c: Add test case. From-SVN: r36638
27 lines
681 B
C
27 lines
681 B
C
/* { dg-do run } */
|
|
/* { dg-options -w } */
|
|
|
|
/* count() used to give 1 owing to a buggy test for varargs. */
|
|
#define count(y...) count1 ( , ##y)
|
|
#define count1(y...) count2 (y,1,0)
|
|
#define count2(_,x0,n,y...) n
|
|
#if count() != 0 || count(A) != 1
|
|
#error Incorrect vararg argument counts
|
|
#endif
|
|
|
|
/* Test for changed behavior of the GNU varargs extension.
|
|
##args, where args is a rest argument which received zero tokens,
|
|
used to delete the previous sequence of nonwhitespace characters.
|
|
Now it deletes the previous token. */
|
|
|
|
#include <string.h>
|
|
|
|
#define S(str, args...) " " str "\n", ##args
|
|
|
|
int
|
|
main()
|
|
{
|
|
const char *s = S("foo");
|
|
return strchr (s, '\n') == NULL;
|
|
}
|