mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-15 14:01:27 +08:00
re PR preprocessor/39646 (__FILE__ breaks for empty file name)
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. From-SVN: r146319
This commit is contained in:
parent
b8add5942c
commit
c7f9c0b983
@ -1,3 +1,8 @@
|
||||
2009-04-18 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
PR preprocessor/39646
|
||||
* gcc.dg/cpp/line8.c: New test.
|
||||
|
||||
2009-04-18 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
PR preprocessor/39647
|
||||
|
10
gcc/testsuite/gcc.dg/cpp/line8.c
Normal file
10
gcc/testsuite/gcc.dg/cpp/line8.c
Normal file
@ -0,0 +1,10 @@
|
||||
/* Test that "" is not specially interpreted as "<stdin>" in a #line
|
||||
directive. PR 39646. */
|
||||
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-pedantic-errors" } */
|
||||
|
||||
extern int x;
|
||||
|
||||
#line 24 ""
|
||||
extern char z[sizeof __FILE__ == 1];
|
@ -1,3 +1,11 @@
|
||||
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
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user