cpp.texi: Update.
authorNeil Booth <neil@daikokuya.demon.co.uk>
Sat, 3 Mar 2001 11:32:32 +0000 (11:32 +0000)
committerNeil Booth <neil@gcc.gnu.org>
Sat, 3 Mar 2001 11:32:32 +0000 (11:32 +0000)
        * cpp.texi: Update.
        * cppexp.c (parse_number): Update.
        * cpplex.c (parse_string): Pedwarn if multiline string does not
        result from a system header's macro.
        * cpplib.h (sys_objmacro_p): Rename sys_macro_p.
        * cppmacro.c (sys_objmacro_p): Rename sys_macro_p.  Return true
        for function-like macros too.
* c-lex.c (parse_number): Update.

From-SVN: r40211

gcc/ChangeLog
gcc/c-lex.c
gcc/cpp.texi
gcc/cppexp.c
gcc/cpplex.c
gcc/cpplib.h
gcc/cppmacro.c

index 23eba3be210cc77837409f56377a6a6bbf13ee2d..c818ddcc81dfb28c20a83fb306dd4d0f574ce0a7 100644 (file)
@@ -1,3 +1,14 @@
+2001-03-03  Neil Booth  <neil@daikokuya.demon.co.uk>
+
+        * cpp.texi: Update.
+        * cppexp.c (parse_number): Update. 
+        * cpplex.c (parse_string): Pedwarn if multiline string does not
+        result from a system header's macro.
+        * cpplib.h (sys_objmacro_p): Rename sys_macro_p.
+        * cppmacro.c (sys_objmacro_p): Rename sys_macro_p.  Return true
+        for function-like macros too.
+       * c-lex.c (lex_number): Update.
+
 2001-03-03  Richard Henderson  <rth@redhat.com>
 
        * dwarf2out.c (output_call_frame_info): Fix augmentation length.
index 9078361ad153f4b4946222eff43c65e644f9c416..1af7cd645daf1c787c8a019289c7804129dd1917 100644 (file)
@@ -1227,7 +1227,7 @@ lex_number (str, len)
            if (fflag)
              ERROR ("more than one 'f' suffix on floating constant");
            else if (warn_traditional && !in_system_header
-                    && ! cpp_sys_objmacro_p (parse_in))
+                    && ! cpp_sys_macro_p (parse_in))
              warning ("traditional C rejects the 'f' suffix");
 
            fflag = 1;
@@ -1237,7 +1237,7 @@ lex_number (str, len)
            if (lflag)
              ERROR ("more than one 'l' suffix on floating constant");
            else if (warn_traditional && !in_system_header
-                    && ! cpp_sys_objmacro_p (parse_in))
+                    && ! cpp_sys_macro_p (parse_in))
              warning ("traditional C rejects the 'l' suffix");
 
            lflag = 1;
@@ -1313,7 +1313,7 @@ lex_number (str, len)
              if (spec_unsigned)
                error ("two 'u' suffixes on integer constant");
              else if (warn_traditional && !in_system_header
-                      && ! cpp_sys_objmacro_p (parse_in))
+                      && ! cpp_sys_macro_p (parse_in))
                warning ("traditional C rejects the 'u' suffix");
 
              spec_unsigned = 1;
index 79efd480aff633a7ca0d9ec459b6254c3eb22366..8bfa8c40245fc3b680ee517f7ab268637102bcf1 100644 (file)
@@ -170,9 +170,9 @@ spaces, horizontal and vertical tabs, and form feeds between the
 backslash and the subsequent newline.  The preprocessor issues a
 warning, but treats it as a valid escaped newline and combines the two
 lines to form a single logical line.  This works within comments and
-tokens, including multi-line strings, as well as between tokens.
-Comments are @emph{not} treated as whitespace for the purposes of this
-relaxation, since they have not yet been replaced with spaces.
+tokens, as well as between tokens.  Comments are @emph{not} treated as
+whitespace for the purposes of this relaxation, since they have not yet
+been replaced with spaces.
 
 @item
 All comments are replaced with single spaces.
@@ -216,8 +216,9 @@ bar"
 @end example
 
 is equivalent to @code{"foo\bar"}, not to @code{"foo\\bar"}.  To avoid
-having to worry about this, do not use the GNU extension which permits
-multi-line strings.  Instead, use string constant concatenation:
+having to worry about this, do not use the deprecated GNU extension
+which permits multi-line strings.  Instead, use string literal
+concatenation:
 
 @example
    "foo\\"
@@ -3053,12 +3054,15 @@ used at all.
 This pragma has been superseded by @samp{#pragma GCC poison}.
 @xref{Poisoning}.
 
-@item Multi-line string literals in directives
+@item Multi-line string literals
 
-The GNU C preprocessor currently allows newlines in string literals
-within a directive.  This is forbidden by the C standard and will
-eventually be removed.  (Multi-line string literals in open text are
-still supported.)
+The preprocessor currently allows raw newlines in string literals.  This
+extension is deprecated and will be removed in a future version of GCC.
+The preprocessor already forbids such string literals in all directives
+apart from #define.
+
+Instead, make use of ISO C concatenation of adjacent string literals, or
+use @samp{\n} followed by an escaped newline.
 
 @item Preprocessing things which are not C
 
index 6ce693e48cccfc3ae0fd0042578eae427082870d..1231a7e266943f1faac37a924adf1f0b6a4392a1 100644 (file)
@@ -205,7 +205,7 @@ parse_number (pfile, tok)
 
       if (CPP_WTRADITIONAL (pfile)
          && sufftab[i].u
-         && ! cpp_sys_objmacro_p (pfile))
+         && ! cpp_sys_macro_p (pfile))
        cpp_warning (pfile, "traditional C rejects the `U' suffix");
       if (sufftab[i].l == 2 && CPP_OPTION (pfile, pedantic)
          && ! CPP_OPTION (pfile, c99))
index 1d98b056a635838cc3243d7a5d347e66a38e68b0..c0b5e026ae229d7eb27ea6c0da00b780939fe1dd 100644 (file)
@@ -686,12 +686,10 @@ parse_string (pfile, token, terminator)
              break;
            }
 
+         if (! cpp_sys_macro_p (pfile))
+           cpp_pedwarn (pfile, "multi-line string constants are deprecated");
          if (pfile->mlstring_pos.line == 0)
-           {
-             pfile->mlstring_pos = pfile->lexer_pos;
-             if (CPP_PEDANTIC (pfile))
-               cpp_pedwarn (pfile, "multi-line string constant");
-           }
+           pfile->mlstring_pos = pfile->lexer_pos;
              
          handle_newline (buffer, c);  /* Stores to read_ahead.  */
          c = '\n';
index 50d3bfe5de81a5ec092e64f366c08a1f3c4ef49e..eaa0ff9e2ba445c22877be5a45e376c1563520d4 100644 (file)
@@ -605,7 +605,7 @@ extern void cpp_forall_identifiers  PARAMS ((cpp_reader *,
 extern void cpp_scan_buffer_nooutput   PARAMS ((cpp_reader *, int));
 extern void cpp_start_lookahead                PARAMS ((cpp_reader *));
 extern void cpp_stop_lookahead         PARAMS ((cpp_reader *, int));
-extern int  cpp_sys_objmacro_p         PARAMS ((cpp_reader *));
+extern int  cpp_sys_macro_p            PARAMS ((cpp_reader *));
 
 /* In cppfiles.c */
 extern int cpp_included        PARAMS ((cpp_reader *, const char *));
index 4d4302dcbcace6e15d3396381e22ccea29eca38f..d424a4146e9878b7f545bbf8c278ce846aa0a8f3 100644 (file)
@@ -988,12 +988,12 @@ cpp_get_token (pfile, token)
    defined in a system header.  Just checks the macro at the top of
    the stack.  Used for diagnostic suppression.  */
 int
-cpp_sys_objmacro_p (pfile)
+cpp_sys_macro_p (pfile)
      cpp_reader *pfile;
 {
   cpp_macro *macro = pfile->context->macro;
 
-  return macro && ! macro->fun_like && macro->syshdr;
+  return macro && macro->syshdr;
 }
 
 /* Read each token in, until EOF.  Directives are transparently