From c25d8793cce98e6abaaf9c44be1526aaabd54e43 Mon Sep 17 00:00:00 2001 From: Mike Stump Date: Mon, 7 Dec 1998 14:57:30 +0000 Subject: [PATCH] cccp.c (ignore_escape_flag): Add support for \ as `natural' characters in file names in #line to be... Mon Dec 7 17:55:06 1998 Mike Stump * cccp.c (ignore_escape_flag): Add support for \ as `natural' characters in file names in #line to be consistent with #include handling. We support escape prcessing in the # 1 "..." version of the command. See also support in cp/lex.c. (handle_directive): Likewise. (do_line): Likewise. From-SVN: r24156 --- gcc/ChangeLog | 9 +++++++++ gcc/cccp.c | 26 +++++++++++++++++--------- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 098de32c649..c2811fe1ad8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +Mon Dec 7 17:55:06 1998 Mike Stump + + * cccp.c (ignore_escape_flag): Add support for \ as `natural' + characters in file names in #line to be consistent with #include + handling. We support escape prcessing in the # 1 "..." version of + the command. See also support in cp/lex.c. + (handle_directive): Likewise. + (do_line): Likewise. + 1998-12-07 Zack Weinberg * cpplib.c (initialize_char_syntax): Use ISALPHA and ISALNUM diff --git a/gcc/cccp.c b/gcc/cccp.c index f09709dc94c..34b9d46f839 100644 --- a/gcc/cccp.c +++ b/gcc/cccp.c @@ -868,6 +868,10 @@ static int errors = 0; /* Error counter for exit code */ /* Name of output file, for error messages. */ static char *out_fname; +/* Nonzero to ignore \ in string constants. Use to treat #line 1 "A:\file.h + as a non-form feed. If you want it to be a form feed, you must use + # 1 "\f". */ +static int ignore_escape_flag = 1; /* Stack of conditionals currently in progress (including both successful and failing conditionals). */ @@ -3806,6 +3810,8 @@ handle_directive (ip, op) /* Record where the directive started. do_xifdef needs this. */ directive_start = bp - 1; + ignore_escape_flag = 1; + /* Skip whitespace and \-newline. */ while (1) { if (is_hor_space[*bp]) { @@ -3868,6 +3874,7 @@ handle_directive (ip, op) pedwarn ("`#' followed by integer"); after_ident = ident; kt = line_directive_table; + ignore_escape_flag = 0; goto old_linenum; } @@ -6940,15 +6947,16 @@ do_line (buf, limit, op, keyword) return 0; case '\\': - { - char *bpc = (char *) bp; - HOST_WIDE_INT c = parse_escape (&bpc, (HOST_WIDE_INT) (U_CHAR) (-1)); - bp = (U_CHAR *) bpc; - if (c < 0) - p--; - else - p[-1] = c; - } + if (! ignore_escape_flag) + { + char *bpc = (char *) bp; + HOST_WIDE_INT c = parse_escape (&bpc, (HOST_WIDE_INT) (U_CHAR) (-1)); + bp = (U_CHAR *) bpc; + if (c < 0) + p--; + else + p[-1] = c; + } break; case '\"': -- 2.30.2