c: Add support for __FILE_NAME__ macro (PR c/42579)
The toolchain provided by ST for stm32 has had support for __FILENAME__ for a while, but clang/llvm has recently implemented support for __FILE_NAME__, so it seems better to use the same macro name in GCC. It happens that the ST patch is similar to the one proposed in PR c/42579. Given these input files: :::::::::::::: mydir/myinc.h :::::::::::::: char* mystringh_file = __FILE__; char* mystringh_filename = __FILE_NAME__; char* mystringh_base_file = __BASE_FILE__; :::::::::::::: mydir/mysrc.c :::::::::::::: char* mystring_file = __FILE__; char* mystring_filename = __FILE_NAME__; char* mystring_base_file = __BASE_FILE__; we produce: $ gcc mydir/mysrc.c -I . -E char* mystringh_file = "./mydir/myinc.h"; char* mystringh_filename = "myinc.h"; char* mystringh_base_file = "mydir/mysrc.c"; char* mystring_file = "mydir/mysrc.c"; char* mystring_filename = "mysrc.c"; char* mystring_base_file = "mydir/mysrc.c"; 2021-05-20 Christophe Lyon <christophe.lyon@linaro.org> Torbjörn Svensson <torbjorn.svensson@st.com> PR c/42579 libcpp/ * include/cpplib.h (cpp_builtin_type): Add BT_FILE_NAME entry. * init.c (builtin_array): Likewise. * macro.c (_cpp_builtin_macro_text): Add support for BT_FILE_NAME. gcc/ * doc/cpp.texi (Common Predefined Macros): Document __FILE_NAME__. gcc/testsuite/ * c-c++-common/spellcheck-reserved.c: Add tests for __FILE_NAME__. * c-c++-common/cpp/file-name-1.c: New test.
This commit is contained in:
parent
9e0a5e3ea3
commit
1a9b3f04c1
6 changed files with 59 additions and 4 deletions
|
@ -531,15 +531,21 @@ _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node,
|
|||
}
|
||||
break;
|
||||
case BT_FILE:
|
||||
case BT_FILE_NAME:
|
||||
case BT_BASE_FILE:
|
||||
{
|
||||
unsigned int len;
|
||||
const char *name;
|
||||
uchar *buf;
|
||||
|
||||
if (node->value.builtin == BT_FILE)
|
||||
name = linemap_get_expansion_filename (pfile->line_table,
|
||||
pfile->line_table->highest_line);
|
||||
|
||||
if (node->value.builtin == BT_FILE
|
||||
|| node->value.builtin == BT_FILE_NAME)
|
||||
{
|
||||
name = linemap_get_expansion_filename (pfile->line_table,
|
||||
pfile->line_table->highest_line);
|
||||
if ((node->value.builtin == BT_FILE_NAME) && name)
|
||||
name = lbasename (name);
|
||||
}
|
||||
else
|
||||
{
|
||||
name = _cpp_get_file_name (pfile->main_file);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue