From 745ef6d6ec2c9a2ad6ff6876587dc4ad122c117a Mon Sep 17 00:00:00 2001 From: Neil Booth Date: Tue, 11 Jul 2000 13:39:09 +0000 Subject: [PATCH] cpp.texi: Update. * cpp.texi: Update. * gcc.dg/cpp/cmdlne-C.c: New test. From-SVN: r34957 --- gcc/ChangeLog | 4 ++++ gcc/cpp.texi | 19 ++++++++++-------- gcc/testsuite/ChangeLog | 8 ++++++-- gcc/testsuite/gcc.dg/cpp/cmdlne-C.c | 31 +++++++++++++++++++++++++++++ 4 files changed, 52 insertions(+), 10 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/cpp/cmdlne-C.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index df3a1c3c73e..976ce9b6109 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2000-07-11 Neil Booth + + * cpp.texi: Update. + 2000-07-11 Neil Booth * cppinit.c: (cpp_reader_init): Allow digraphs by default. diff --git a/gcc/cpp.texi b/gcc/cpp.texi index 74270d08530..0e30e1db028 100644 --- a/gcc/cpp.texi +++ b/gcc/cpp.texi @@ -83,9 +83,9 @@ It is called a macro processor because it allows you to define The C preprocessor is intended only for macro processing of C, C++ and Objective C source files. For macro processing of other files, you are strongly encouraged to use alternatives like M4, which will likely give -you better results and avoid many problems. For example, the C -preprocessor sometimes outputs extra white space to avoid inadvertent C -token concatenation, and this may cause problems with other languages. +you better results and avoid many problems. For example, normally the C +preprocessor does not preserve arbitrary whitespace verbatim, but +instead replaces each sequence with a single space. For use on C-like source files, the C preprocessor provides four separate facilities that you can use as you see fit: @@ -2908,11 +2908,14 @@ and will be sent to a program which might be confused by the @item -C @findex -C -Do not discard comments: pass them through to the output file. -Comments appearing in arguments of a macro call will be copied to the -output before the expansion of the macro call. - -You should be prepared for unwanted side effects when using -C. For +Do not discard comments. All comments are passed through to the output +file, except for comments in processed directives, which are deleted +along with the directive. Comments appearing in the expansion list of a +macro will be preserved, and appear in place wherever the macro is +invoked. + +You should be prepared for side effects when using -C; it causes the +preprocessor to treat comments as tokens in their own right. For example, macro redefinitions that were trivial when comments were replaced by a single space might become significant when comments are retained. Also, comments appearing at the start of what would be a diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 63cac60285b..1d157f1c825 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,7 +1,11 @@ +2000-07-11 Neil Booth + + * gcc.dg/cpp/cmdlne-C.c: New. + 2000-07-09 Neil Booth - * testsuite/gcc.dg/cpp/directiv.c: New tests. - * testsuite/gcc.dg/cpp/undef1.c: Update. + * gcc.dg/cpp/directiv.c: New tests. + * gcc.dg/cpp/undef1.c: Update. 2000-07-08 Angela Marie Thomas diff --git a/gcc/testsuite/gcc.dg/cpp/cmdlne-C.c b/gcc/testsuite/gcc.dg/cpp/cmdlne-C.c new file mode 100644 index 00000000000..344718de9b7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/cmdlne-C.c @@ -0,0 +1,31 @@ +/* Copyright (C) 2000 Free Software Foundation, Inc. */ + +/* { dg-do preprocess } */ +/* { dg-options -C } */ + +/* Test -C doesn't fail with #define. #define is the tricky case, + being the only directive that remembers its comments. + + -C treats comments as tokens in their own right, so e.g. comment at + the beginning of a directive turns it into a non-directive. */ + +#define simple no comments +#/**/define bad_directive /* { dg-error "invalid" } */ +#define/**/obj_like/**/(some)/**/thing/**/ +#define fun_like(/**/x/**/,/**/y/**/)/**/ +/**/#define not_a_macro + +#if !defined simple || !defined obj_like || !defined fun_like +#error Missed some macros with -C +#endif + +#ifdef not_a_macro +#error not_a_macro is! +#endif + +/* Check obj_like2 doesn't expect arguments, and fun_like does. */ +obj_like2 +fun_like (foo, bar) + +/* Check OK to redefine fun_like without comments in the params. */ +#define fun_like(x, y)/**/ -- 2.30.2