re PR preprocessor/33919 (__BASE_FILE__ does not expand correctly when included from the command line)

libcpp/
	PR preprocessor/33919
	* files.c (_cpp_get_file_name): New. Implement file name
	access function.
	* internal.h (_cpp_get_file_name): New prototype.
	* macro.c (_cpp_builtin_macro_text): Call _cpp_get_file_name()
	to use pfile->main_file in lieu of traversing INCLUDED_FROM chain.

gcc/testsuite/
	PR preprocessor/33919
	* gcc.dg/pr33919.c: New test.
	* gcc.dg/pr33919-0.h: New test header file.
	* gcc.dg/pr33919-1.h: Ditto.
	* gcc.dg/pr33919-2.h: Ditto.

From-SVN: r183003
This commit is contained in:
Gary Funck 2012-01-09 08:48:43 +00:00 committed by Gary Funck
parent fdff9f3d33
commit b492b6862e
9 changed files with 62 additions and 8 deletions

View File

@ -1,3 +1,11 @@
2012-01-09 Gary Funck <gary@intrepid.com>
PR preprocessor/33919
* gcc.dg/pr33919.c: New test.
* gcc.dg/pr33919-0.h: New test header file.
* gcc.dg/pr33919-1.h: Ditto.
* gcc.dg/pr33919-2.h: Ditto.
2012-01-07 Jan Hubicka <jh@suse.cz> 2012-01-07 Jan Hubicka <jh@suse.cz>
PR tree-optimize/51694 PR tree-optimize/51694

View File

@ -0,0 +1 @@
char *pre_inc_base_file = __BASE_FILE__;

View File

@ -0,0 +1,2 @@
#include "pr33919-2.h"
char *inc_base_file = __BASE_FILE__;

View File

@ -0,0 +1 @@
char *nested_inc_base_file = __BASE_FILE__;

View File

@ -0,0 +1,26 @@
/* PR preprocessor/pr33919 */
/* { dg-do run } */
/* { dg-options "-I . -include ${srcdir}/gcc.dg/pr33919-0.h" } */
#include "pr33919-1.h"
const char *base_file = __BASE_FILE__;
extern int strcmp (const char *, const char *);
extern void abort (void);
int
main ()
{
if (!strcmp (pre_inc_base_file, "<command line>"))
abort ();
if (strcmp (pre_inc_base_file, __FILE__))
abort ();
if (strcmp (base_file, __FILE__))
abort ();
if (strcmp (inc_base_file, __FILE__))
abort ();
if (strcmp (nested_inc_base_file, __FILE__))
abort ();
return 0;
}

View File

@ -1,3 +1,12 @@
2012-01-09 Gary Funck <gary@intrepid.com>
PR preprocessor/33919
* files.c (_cpp_get_file_name): New. Implement file name
access function.
* internal.h (_cpp_get_file_name): New prototype.
* macro.c (_cpp_builtin_macro_text): Call _cpp_get_file_name()
to use pfile->main_file in lieu of traversing INCLUDED_FROM chain.
2012-01-03 Olivier Hainque <hainque@adacore.com> 2012-01-03 Olivier Hainque <hainque@adacore.com>
* system.h: Prior to #define, #undef fopen and freopen unconditionally. * system.h: Prior to #define, #undef fopen and freopen unconditionally.

View File

@ -1,7 +1,7 @@
/* Part of CPP library. File handling. /* Part of CPP library. File handling.
Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1998, Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 1999, 2000, 2001, 2002, 2003, 2004, 2005,
Free Software Foundation, Inc. 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
Written by Per Bothner, 1994. Written by Per Bothner, 1994.
Based on CCCP program by Paul Rubin, June 1986 Based on CCCP program by Paul Rubin, June 1986
Adapted to ANSI C, Richard Stallman, Jan 1987 Adapted to ANSI C, Richard Stallman, Jan 1987
@ -1370,6 +1370,13 @@ _cpp_pop_file_buffer (cpp_reader *pfile, _cpp_file *file)
} }
} }
/* Return the file name associated with FILE. */
const char *
_cpp_get_file_name (_cpp_file *file)
{
return file->name;
}
/* Inteface to file statistics record in _cpp_file structure. */ /* Inteface to file statistics record in _cpp_file structure. */
struct stat * struct stat *
_cpp_get_file_stat (_cpp_file *file) _cpp_get_file_stat (_cpp_file *file)

View File

@ -1,6 +1,6 @@
/* Part of CPP library. /* Part of CPP library.
Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007,
2008, 2009, 2010, 2011 Free Software Foundation, Inc. 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the under the terms of the GNU General Public License as published by the
@ -635,6 +635,7 @@ extern void _cpp_cleanup_files (cpp_reader *);
extern void _cpp_pop_file_buffer (cpp_reader *, struct _cpp_file *); extern void _cpp_pop_file_buffer (cpp_reader *, struct _cpp_file *);
extern bool _cpp_save_file_entries (cpp_reader *pfile, FILE *f); extern bool _cpp_save_file_entries (cpp_reader *pfile, FILE *f);
extern bool _cpp_read_file_entries (cpp_reader *, FILE *); extern bool _cpp_read_file_entries (cpp_reader *, FILE *);
extern const char *_cpp_get_file_name (_cpp_file *);
extern struct stat *_cpp_get_file_stat (_cpp_file *); extern struct stat *_cpp_get_file_stat (_cpp_file *);
/* In expr.c */ /* In expr.c */

View File

@ -1,7 +1,7 @@
/* Part of CPP library. (Macro and #define handling.) /* Part of CPP library. (Macro and #define handling.)
Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998, Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
Written by Per Bothner, 1994. Written by Per Bothner, 1994.
Based on CCCP program by Paul Rubin, June 1986 Based on CCCP program by Paul Rubin, June 1986
Adapted to ANSI C, Richard Stallman, Jan 1987 Adapted to ANSI C, Richard Stallman, Jan 1987
@ -278,10 +278,9 @@ _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
pfile->line_table->highest_line); pfile->line_table->highest_line);
else else
{ {
map = linemap_lookup (pfile->line_table, pfile->line_table->highest_line); name = _cpp_get_file_name (pfile->main_file);
while (! MAIN_FILE_P (map)) if (!name)
map = INCLUDED_FROM (pfile->line_table, map); abort ();
name = ORDINARY_MAP_FILE_NAME (map);
} }
len = strlen (name); len = strlen (name);
buf = _cpp_unaligned_alloc (pfile, len * 2 + 3); buf = _cpp_unaligned_alloc (pfile, len * 2 + 3);