llvm-project/clang/test/Preprocessor/file_name_macro.c
Kristina Brooks bd97484241 Reland "[Clang][PP] Add the __FILE_NAME__ builtin macro"
This relands commit rL360833 which caused issues on Win32
bots due to path handling/normalization differences. Now
this uses `sys::path::filename` which should handle
additional edge cases on Win32.

Original commit:

"[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

llvm-svn: 360938
2019-05-16 21:13:49 +00:00

45 lines
1.1 KiB
C

// 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