Hi Kristina, Your change does not seem to be working on Windows. Can you take a look?
http://lab.llvm.org:8011/builders/clang-x64-windows-msvc/builds/6860 FAIL: Clang :: Preprocessor/file_name_macro.c (7959 of 14753) ******************** TEST 'Clang :: Preprocessor/file_name_macro.c' FAILED ******************** Script: -- : 'RUN: at line 1'; c:\b\slave\clang-x64-windows-msvc\build\build\stage1\bin\clang.exe -cc1 -internal-isystem c:\b\slave\clang-x64-windows-msvc\build\build\stage1\lib\clang\9.0.0\include -nostdsysteminc -E C:\b\slave\clang-x64-windows-msvc\build\llvm.src\tools\clang\test\Preprocessor\file_name_macro.c -IC:\b\slave\clang-x64-windows-msvc\build\llvm.src\tools\clang\test\Preprocessor/Inputs | c:\b\slave\clang-x64-windows-msvc\build\build\stage1\bin\filecheck.exe -strict-whitespace C:\b\slave\clang-x64-windows-msvc\build\llvm.src\tools\clang\test\Preprocessor\file_name_macro.c : 'RUN: at line 2'; c:\b\slave\clang-x64-windows-msvc\build\build\stage1\bin\clang.exe -cc1 -internal-isystem c:\b\slave\clang-x64-windows-msvc\build\build\stage1\lib\clang\9.0.0\include -nostdsysteminc -fms-compatibility -DMS -E C:\b\slave\clang-x64-windows-msvc\build\llvm.src\tools\clang\test\Preprocessor\file_name_macro.c -IC:\b\slave\clang-x64-windows-msvc\build\llvm.src\tools\clang\test\Preprocessor/Inputs | c:\b\slave\clang-x64-windows-msvc\build\build\stage1\bin\filecheck.exe -check-prefix=CHECK-MS -strict-whitespace C:\b\slave\clang-x64-windows-msvc\build\llvm.src\tools\clang\test\Preprocessor\file_name_macro.c : 'RUN: at line 3'; c:\b\slave\clang-x64-windows-msvc\build\build\stage1\bin\clang.exe -cc1 -internal-isystem c:\b\slave\clang-x64-windows-msvc\build\build\stage1\lib\clang\9.0.0\include -nostdsysteminc -E C:\b\slave\clang-x64-windows-msvc\build\llvm.src\tools\clang\test\Preprocessor\file_name_macro.c -IC:\b\slave\clang-x64-windows-msvc\build\llvm.src\tools\clang\test\Preprocessor/Inputs -DBADINC -verify -- Exit Code: 1 Command Output (stdout): -- $ ":" "RUN: at line 1" $ "c:\b\slave\clang-x64-windows-msvc\build\build\stage1\bin\clang.exe" "-cc1" "-internal-isystem" "c:\b\slave\clang-x64-windows-msvc\build\build\stage1\lib\clang\9.0.0\include" "-nostdsysteminc" "-E" "C:\b\slave\clang-x64-windows-msvc\build\llvm.src\tools\clang\test\Preprocessor\file_name_macro.c" "-IC:\b\slave\clang-x64-windows-msvc\build\llvm.src\tools\clang\test\Preprocessor/Inputs" $ "c:\b\slave\clang-x64-windows-msvc\build\build\stage1\bin\filecheck.exe" "-strict-whitespace" "C:\b\slave\clang-x64-windows-msvc\build\llvm.src\tools\clang\test\Preprocessor\file_name_macro.c" # command stderr: C:\b\slave\clang-x64-windows-msvc\build\llvm.src\tools\clang\test\Preprocessor\file_name_macro.c:22:11: error: CHECK: expected string not found in input // CHECK: {{^}}2: "file_name_macro.c" ^ <stdin>:12:1: note: scanning from here 2: "C:\\b\\slave\\clang-x64-windows-msvc\\build\\llvm.src\\tools\\clang\\test\\Preprocessor\\file_name_macro.c" ^ <stdin>:12:87: note: possible intended match here 2: "C:\\b\\slave\\clang-x64-windows-msvc\\build\\llvm.src\\tools\\clang\\test\\Preprocessor\\file_name_macro.c" ^ error: command failed with exit status: 1 Douglas Yung -----Original Message----- From: cfe-commits <cfe-commits-boun...@lists.llvm.org> On Behalf Of Kristina Brooks via cfe-commits Sent: Wednesday, May 15, 2019 17:53 To: cfe-commits@lists.llvm.org Subject: r360833 - [Clang][PP] Add the __FILE_NAME__ builtin macro. Author: kristina Date: Wed May 15 17:52:41 2019 New Revision: 360833 URL: http://llvm.org/viewvc/llvm-project?rev=360833&view=rev Log: [Clang][PP] Add the __FILE_NAME__ builtin macro. This patch adds the `__FILE_NAME__` macro that expands to the last component of the path, similar to `__FILE__` except with a guarantee that only the last path component (without the separator) will be rendered. I intend to follow through with discussion of this with WG14 as a potential inclusion in the C standard or failing that, try to discuss this with GCC developers since this extension is desired by GCC and Clang users/developers alike. Differential Revision: https://reviews.llvm.org/D61756 Added: cfe/trunk/test/Preprocessor/Inputs/include-subdir/ cfe/trunk/test/Preprocessor/Inputs/include-subdir/file_name_macro_include.h cfe/trunk/test/Preprocessor/Inputs/include-subdir/h cfe/trunk/test/Preprocessor/Inputs/include-subdir/subdir1/ cfe/trunk/test/Preprocessor/Inputs/include-subdir/subdir1/hdr1.h cfe/trunk/test/Preprocessor/Inputs/include-subdir/subdir1/hdr2.h cfe/trunk/test/Preprocessor/file_name_macro.c Modified: cfe/trunk/include/clang/Lex/Preprocessor.h cfe/trunk/lib/Lex/PPMacroExpansion.cpp Modified: cfe/trunk/include/clang/Lex/Preprocessor.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/Preprocessor.h?rev=360833&r1=360832&r2=360833&view=diff ============================================================================== --- cfe/trunk/include/clang/Lex/Preprocessor.h (original) +++ cfe/trunk/include/clang/Lex/Preprocessor.h Wed May 15 17:52:41 2019 @@ -147,6 +147,7 @@ class Preprocessor { IdentifierInfo *Ident__DATE__, *Ident__TIME__; // __DATE__, __TIME__ IdentifierInfo *Ident__INCLUDE_LEVEL__; // __INCLUDE_LEVEL__ IdentifierInfo *Ident__BASE_FILE__; // __BASE_FILE__ + IdentifierInfo *Ident__FILE_NAME__; // __FILE_NAME__ IdentifierInfo *Ident__TIMESTAMP__; // __TIMESTAMP__ IdentifierInfo *Ident__COUNTER__; // __COUNTER__ IdentifierInfo *Ident_Pragma, *Ident__pragma; // _Pragma, __pragma Modified: cfe/trunk/lib/Lex/PPMacroExpansion.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPMacroExpansion.cpp?rev=360833&r1=360832&r2=360833&view=diff ============================================================================== --- cfe/trunk/lib/Lex/PPMacroExpansion.cpp (original) +++ cfe/trunk/lib/Lex/PPMacroExpansion.cpp Wed May 15 17:52:41 2019 @@ -363,6 +363,7 @@ void Preprocessor::RegisterBuiltinMacros } // Clang Extensions. + Ident__FILE_NAME__ = RegisterBuiltinMacro(*this, "__FILE_NAME__"); Ident__has_feature = RegisterBuiltinMacro(*this, "__has_feature"); Ident__has_extension = RegisterBuiltinMacro(*this, "__has_extension"); Ident__has_builtin = RegisterBuiltinMacro(*this, "__has_builtin"); @@ -1474,7 +1475,8 @@ void Preprocessor::ExpandBuiltinMacro(To // __LINE__ expands to a simple numeric value. OS << (PLoc.isValid()? PLoc.getLine() : 1); Tok.setKind(tok::numeric_constant); - } else if (II == Ident__FILE__ || II == Ident__BASE_FILE__) { + } else if (II == Ident__FILE__ || II == Ident__BASE_FILE__ || + II == Ident__FILE_NAME__) { // C99 6.10.8: "__FILE__: The presumed name of the current source file (a // character string literal)". This can be affected by #line. PresumedLoc PLoc = SourceMgr.getPresumedLoc(Tok.getLocation()); @@ -1495,7 +1497,21 @@ void Preprocessor::ExpandBuiltinMacro(To // Escape this filename. Turn '\' -> '\\' '"' -> '\"' SmallString<128> FN; if (PLoc.isValid()) { - FN += PLoc.getFilename(); + // __FILE_NAME__ is a Clang-specific extension that expands to the + // the last part of __FILE__. + if (II == Ident__FILE_NAME__) { + // Try to get the last path component. + StringRef PLFileName = PLoc.getFilename(); + size_t LastSep = PLFileName.find_last_of('/'); + // Skip the separator and get the last part, otherwise fall back on + // returning the original full filename. + if (LastSep != StringRef::npos) + FN += PLFileName.substr(LastSep+1); + else + FN += PLFileName; + } else { + FN += PLoc.getFilename(); + } Lexer::Stringify(FN); OS << '"' << FN << '"'; } Added: cfe/trunk/test/Preprocessor/Inputs/include-subdir/file_name_macro_include.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/Inputs/include-subdir/file_name_macro_include.h?rev=360833&view=auto ============================================================================== --- cfe/trunk/test/Preprocessor/Inputs/include-subdir/file_name_macro_include.h (added) +++ cfe/trunk/test/Preprocessor/Inputs/include-subdir/file_name_macro_in +++ clude.h Wed May 15 17:52:41 2019 @@ -0,0 +1,6 @@ +3: __FILE_NAME__ +4: "file_name_macro_include.h" +#ifdef MS +// Should be the same even when included with backslash. +5: __FILE_NAME__ +#endif Added: cfe/trunk/test/Preprocessor/Inputs/include-subdir/h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/Inputs/include-subdir/h?rev=360833&view=auto ============================================================================== --- cfe/trunk/test/Preprocessor/Inputs/include-subdir/h (added) +++ cfe/trunk/test/Preprocessor/Inputs/include-subdir/h Wed May 15 +++ 17:52:41 2019 @@ -0,0 +1 @@ +6: __FILE_NAME__ Added: cfe/trunk/test/Preprocessor/Inputs/include-subdir/subdir1/hdr1.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/Inputs/include-subdir/subdir1/hdr1.h?rev=360833&view=auto ============================================================================== --- cfe/trunk/test/Preprocessor/Inputs/include-subdir/subdir1/hdr1.h (added) +++ cfe/trunk/test/Preprocessor/Inputs/include-subdir/subdir1/hdr1.h Wed +++ May 15 17:52:41 2019 @@ -0,0 +1 @@ +7: __FILE_NAME__ Added: cfe/trunk/test/Preprocessor/Inputs/include-subdir/subdir1/hdr2.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/Inputs/include-subdir/subdir1/hdr2.h?rev=360833&view=auto ============================================================================== --- cfe/trunk/test/Preprocessor/Inputs/include-subdir/subdir1/hdr2.h (added) +++ cfe/trunk/test/Preprocessor/Inputs/include-subdir/subdir1/hdr2.h Wed +++ May 15 17:52:41 2019 @@ -0,0 +1 @@ +8: __FILE_NAME__ Added: cfe/trunk/test/Preprocessor/file_name_macro.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/file_name_macro.c?rev=360833&view=auto ============================================================================== --- cfe/trunk/test/Preprocessor/file_name_macro.c (added) +++ cfe/trunk/test/Preprocessor/file_name_macro.c Wed May 15 17:52:41 +++ 2019 @@ -0,0 +1,44 @@ +// RUN: %clang_cc1 -E %s -I%S/Inputs | FileCheck -strict-whitespace %s +// RUN: %clang_cc1 -fms-compatibility -DMS -E %s -I%S/Inputs | +FileCheck -check-prefix=CHECK-MS -strict-whitespace %s // RUN: +%clang_cc1 -E %s -I%S/Inputs -DBADINC -verify + +#ifdef BADINC + +// Paranoia. + +__FILE_NAME__ +#include <include-subdir/> // expected-error {{file not found}} +__FILE_NAME__ + +#else + +// Reference. +1: "file_name_macro.c" + +// Ensure it expands correctly for this file. +2: __FILE_NAME__ + +// CHECK: {{^}}1: "file_name_macro.c" +// CHECK: {{^}}2: "file_name_macro.c" + +// Test if inclusion works right. +#ifdef MS +#include <include-subdir\file_name_macro_include.h> +// MS compatibility allows for mixed separators in paths. +#include <include-subdir/subdir1\hdr1.h> #include +<include-subdir\subdir1/hdr2.h> #else #include +<include-subdir/file_name_macro_include.h> +#endif + +#include <include-subdir/h> + +// CHECK: {{^}}3: "file_name_macro_include.h" +// CHECK: {{^}}4: "file_name_macro_include.h" +// CHECK-NOT: {{^}}5: "file_name_macro_include.h" +// CHECK-MS: {{^}}5: "file_name_macro_include.h" +// CHECK: {{^}}6: "h" +// CHECK-MS: {{^}}7: "hdr1.h" +// CHECK-MS: {{^}}8: "hdr2.h" + +#endif _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits