r360833 - [Clang][PP] Add the __FILE_NAME__ builtin macro.

Kristina Brooks via cfe-commits cfe-commits at lists.llvm.org
Wed May 15 19:30:36 PDT 2019


Yes, sorry about that, I did notice, just re-testing it, should have a fix
for Windows bots in a few minutes.

On Thu, May 16, 2019 at 3:26 AM <douglas.yung at sony.com> wrote:

> 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-bounces at lists.llvm.org> On Behalf Of
> Kristina Brooks via cfe-commits
> Sent: Wednesday, May 15, 2019 17:53
> To: cfe-commits at 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 at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190516/e6f1b9cf/attachment-0001.html>


More information about the cfe-commits mailing list