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:
parent
fdff9f3d33
commit
b492b6862e
@ -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
|
||||
|
1
gcc/testsuite/gcc.dg/pr33919-0.h
Normal file
1
gcc/testsuite/gcc.dg/pr33919-0.h
Normal file
@ -0,0 +1 @@
|
||||
char *pre_inc_base_file = __BASE_FILE__;
|
2
gcc/testsuite/gcc.dg/pr33919-1.h
Normal file
2
gcc/testsuite/gcc.dg/pr33919-1.h
Normal file
@ -0,0 +1,2 @@
|
||||
#include "pr33919-2.h"
|
||||
char *inc_base_file = __BASE_FILE__;
|
1
gcc/testsuite/gcc.dg/pr33919-2.h
Normal file
1
gcc/testsuite/gcc.dg/pr33919-2.h
Normal file
@ -0,0 +1 @@
|
||||
char *nested_inc_base_file = __BASE_FILE__;
|
26
gcc/testsuite/gcc.dg/pr33919.c
Normal file
26
gcc/testsuite/gcc.dg/pr33919.c
Normal 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;
|
||||
}
|
@ -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.
|
||||
|
@ -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)
|
||||
|
@ -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 */
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user