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>
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>
* system.h: Prior to #define, #undef fopen and freopen unconditionally.

View File

@ -1,7 +1,7 @@
/* Part of CPP library. File handling.
Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc.
1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
Written by Per Bothner, 1994.
Based on CCCP program by Paul Rubin, June 1986
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. */
struct stat *
_cpp_get_file_stat (_cpp_file *file)

View File

@ -1,6 +1,6 @@
/* Part of CPP library.
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
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 bool _cpp_save_file_entries (cpp_reader *pfile, FILE *f);
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 *);
/* In expr.c */

View File

@ -1,7 +1,7 @@
/* Part of CPP library. (Macro and #define handling.)
Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998,
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.
Based on CCCP program by Paul Rubin, June 1986
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);
else
{
map = linemap_lookup (pfile->line_table, pfile->line_table->highest_line);
while (! MAIN_FILE_P (map))
map = INCLUDED_FROM (pfile->line_table, map);
name = ORDINARY_MAP_FILE_NAME (map);
name = _cpp_get_file_name (pfile->main_file);
if (!name)
abort ();
}
len = strlen (name);
buf = _cpp_unaligned_alloc (pfile, len * 2 + 3);