aboutsummaryrefslogtreecommitdiff
path: root/libcpp
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2009-04-18 17:36:28 +0000
committerJoseph Myers <joseph@codesourcery.com>2009-04-18 17:36:28 +0000
commit5758dceec7445879ec6e5dcccef581eab7299ec7 (patch)
tree59684b555702b1b2456e3b64f86fd190e1b48332 /libcpp
parentcbdac2fe8f2cd3c5e9af0a23a9da178db9056422 (diff)
libcpp:
PR preprocessor/39646 * include/line-map.h (enum lc_reason): Add LC_RENAME_VERBATIM. * line-map.c (linemap_add): Handle LC_RENAME_VERBATIM. * directives.c (do_line, do_linemarker): Use LC_RENAME_VERBATIM in place of LC_RENAME. gcc/testsuite: * gcc.dg/cpp/line8.c: New test. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@146319 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libcpp')
-rw-r--r--libcpp/ChangeLog8
-rw-r--r--libcpp/directives.c4
-rw-r--r--libcpp/include/line-map.h5
-rw-r--r--libcpp/line-map.c5
4 files changed, 17 insertions, 5 deletions
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index ce7bbe059cd..ab72fa61061 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,5 +1,13 @@
2009-04-18 Joseph Myers <joseph@codesourcery.com>
+ PR preprocessor/39646
+ * include/line-map.h (enum lc_reason): Add LC_RENAME_VERBATIM.
+ * line-map.c (linemap_add): Handle LC_RENAME_VERBATIM.
+ * directives.c (do_line, do_linemarker): Use LC_RENAME_VERBATIM in
+ place of LC_RENAME.
+
+2009-04-18 Joseph Myers <joseph@codesourcery.com>
+
PR preprocessor/39647
* directives.c (check_eol): Add parameter expand.
(do_undef, parse_include, do_line, do_linemarker, do_ident,
diff --git a/libcpp/directives.c b/libcpp/directives.c
index 9cb8506bb13..9e26732337b 100644
--- a/libcpp/directives.c
+++ b/libcpp/directives.c
@@ -924,7 +924,7 @@ do_line (cpp_reader *pfile)
}
skip_rest_of_line (pfile);
- _cpp_do_file_change (pfile, LC_RENAME, new_file, new_lineno,
+ _cpp_do_file_change (pfile, LC_RENAME_VERBATIM, new_file, new_lineno,
map_sysp);
}
@@ -940,7 +940,7 @@ do_linemarker (cpp_reader *pfile)
const char *new_file = map->to_file;
linenum_type new_lineno;
unsigned int new_sysp = map->sysp;
- enum lc_reason reason = LC_RENAME;
+ enum lc_reason reason = LC_RENAME_VERBATIM;
int flag;
bool wrapped;
diff --git a/libcpp/include/line-map.h b/libcpp/include/line-map.h
index 501a1939324..56ab79a2608 100644
--- a/libcpp/include/line-map.h
+++ b/libcpp/include/line-map.h
@@ -31,8 +31,9 @@ along with this program; see the file COPYING3. If not see
when including a new file, e.g. a #include directive in C.
LC_LEAVE is when reaching a file's end. LC_RENAME is when a file
name or line number changes for neither of the above reasons
- (e.g. a #line directive in C). */
-enum lc_reason {LC_ENTER = 0, LC_LEAVE, LC_RENAME};
+ (e.g. a #line directive in C); LC_RENAME_VERBATIM is like LC_RENAME
+ but a filename of "" is not specially interpreted as standard input. */
+enum lc_reason {LC_ENTER = 0, LC_LEAVE, LC_RENAME, LC_RENAME_VERBATIM};
/* The type of line numbers. */
typedef unsigned int linenum_type;
diff --git a/libcpp/line-map.c b/libcpp/line-map.c
index cce699f3cfe..553cc2ab605 100644
--- a/libcpp/line-map.c
+++ b/libcpp/line-map.c
@@ -109,9 +109,12 @@ linemap_add (struct line_maps *set, enum lc_reason reason,
map = &set->maps[set->used];
- if (to_file && *to_file == '\0')
+ if (to_file && *to_file == '\0' && reason != LC_RENAME_VERBATIM)
to_file = "<stdin>";
+ if (reason == LC_RENAME_VERBATIM)
+ reason = LC_RENAME;
+
/* If we don't keep our line maps consistent, we can easily
segfault. Don't rely on the client to do it for us. */
if (set->depth == 0)