blob: 6af5c0b6f5a93cc112f9bbeb4a5a6cbd2634daaf [file] [edit]
// REQUIRES: system-windows
// RUN: %clang -E -fno-file-reproducible -target x86_64-pc-win32 -ffile-prefix-map=%p=A:\UNLIKELY_PATH\empty -c -o - %s | FileCheck %s
// RUN: %clang -E -fno-file-reproducible -target x86_64-pc-win32 -fmacro-prefix-map=%p=A:\UNLIKELY_PATH\empty -c -o - %s | FileCheck %s
// RUN: %clang -E -fno-file-reproducible -target x86_64-pc-win32 -fmacro-prefix-map=%p=A:\UNLIKELY_PATH=empty -c -o - %s | FileCheck %s -check-prefix CHECK-EVIL
// RUN: %clang -E -fno-file-reproducible -target x86_64-pc-win32 -fmacro-prefix-map=%p/iNPUTS\=A:\UNLIKELY_PATH_INC\ -fmacro-prefix-map=%p/=A:\UNLIKELY_PATH_BASE\ -c -o - %s | FileCheck %s -check-prefix CHECK-CASE
// RUN: %clang -E -fno-file-reproducible -target x86_64-pc-win32 -fmacro-prefix-map=%p\= -c -o - %s | FileCheck %s --check-prefix CHECK-REMOVE
// RUN: %clang -E -target x86_64-pc-win32 -ffile-prefix-map=%p=A:\UNLIKELY_PATH\empty -c -o - %s | FileCheck %s --check-prefix CHECK-REPRODUCIBLE
// RUN: %clang -E -target x86_64-pc-win32 -fmacro-prefix-map=%p=A:\UNLIKELY_PATH\empty -c -o - %s | FileCheck %s --check-prefix CHECK-REPRODUCIBLE
// RUN: %clang -E -target x86_64-pc-win32 -fmacro-prefix-map=%p=A:\UNLIKELY_PATH=empty -c -o - %s | FileCheck %s -check-prefix CHECK-EVIL-REPRODUCIBLE
// RUN: %clang -E -target x86_64-pc-win32 -fmacro-prefix-map=%p/iNPUTS\=A:\UNLIKELY_PATH_INC\ -fmacro-prefix-map=%p/=A:\UNLIKELY_PATH_BASE\ -c -o - %s | FileCheck %s -check-prefix CHECK-CASE-REPRODUCIBLE
// RUN: %clang -E -target x86_64-pc-win32 -fmacro-prefix-map=%p\= -c -o - %s | FileCheck %s --check-prefix CHECK-REMOVE-REPRODUCIBLE
// RUN: %clang -E -target x86_64-pc-linux-gnu -fmacro-prefix-map=%p\= -c -o - %s | FileCheck %s --check-prefix CHECK-REMOVE
// RUN: %clang -E -target x86_64-pc-linux-gnu -ffile-prefix-map=%p\= -c -o - %s | FileCheck %s --check-prefix CHECK-REMOVE
// Clang defaults to forward slashes for the non-prefix portion of the path even if the build environment is Windows.
// RUN: %clang -E -fno-file-reproducible -target x86_64-pc-linux-gnu -fmacro-prefix-map=%p\= -c -o - %s | FileCheck %s --check-prefix CHECK-REMOVE
// RUN: %clang -E -fno-file-reproducible -target x86_64-pc-linux-gnu -ffile-prefix-map=%p\= -c -o - %s | FileCheck %s --check-prefix CHECK-REMOVE
// RUN: %clang -E -ffile-reproducible -target x86_64-pc-win32 -c -o - %s | FileCheck %s --check-prefix CHECK-WINDOWS-FULL
// RUN: %clang -E -ffile-reproducible -target x86_64-pc-linux-gnu -c -o - %s | FileCheck %s --check-prefix CHECK-LINUX-FULL
filename: __FILE__
#include "Inputs/include-file-test/file_test.h"
// Forward or backward slashes can be used depending on LLVM_WINDOWS_PREFER_FORWARD_SLASH.
// CHECK: filename: "A:{{[/\\]+}}UNLIKELY_PATH{{[/\\]+}}empty{{[/\\]+}}file_test_windows.c"
// CHECK: filename: "A:{{[/\\]+}}UNLIKELY_PATH{{[/\\]+}}empty{{[/\\]+}}Inputs/include-file-test/file_test.h"
// CHECK: basefile: "A:{{[/\\]+}}UNLIKELY_PATH{{[/\\]+}}empty{{[/\\]+}}file_test_windows.c"
// CHECK-NOT: filename:
// CHECK-EVIL: filename: "A:{{[/\\]+}}UNLIKELY_PATH=empty{{[/\\]+}}file_test_windows.c"
// CHECK-EVIL: filename: "A:{{[/\\]+}}UNLIKELY_PATH=empty{{[/\\]+}}Inputs/include-file-test/file_test.h"
// CHECK-EVIL: basefile: "A:{{[/\\]+}}UNLIKELY_PATH=empty{{[/\\]+}}file_test_windows.c"
// CHECK-EVIL-NOT: filename:
// CHECK-CASE: filename: "A:{{[/\\]+}}UNLIKELY_PATH_BASE{{[/\\]+}}file_test_windows.c"
// CHECK-CASE: filename: "A:{{[/\\]+}}UNLIKELY_PATH_INC{{[/\\]+}}include-file-test/file_test.h"
// CHECK-CASE: basefile: "A:{{[/\\]+}}UNLIKELY_PATH_BASE{{[/\\]+}}file_test_windows.c"
// CHECK-CASE-NOT: filename:
// CHECK-REMOVE: filename: "file_test_windows.c"
// CHECK-REMOVE: filename: "Inputs/include-file-test/file_test.h"
// CHECK-REMOVE: basefile: "file_test_windows.c"
// CHECK-REMOVE-NOT: filename:
// CHECK-REPRODUCIBLE: filename: "A:{{[/\\]+}}UNLIKELY_PATH{{[/\\]+}}empty{{[/\\]+}}file_test_windows.c"
// CHECK-REPRODUCIBLE: filename: "A:{{[/\\]+}}UNLIKELY_PATH{{[/\\]+}}empty{{[/\\]+}}Inputs{{[/\\]+}}include-file-test{{[/\\]+}}file_test.h"
// CHECK-REPRODUCIBLE: basefile: "A:{{[/\\]+}}UNLIKELY_PATH{{[/\\]+}}empty{{[/\\]+}}file_test_windows.c"
// CHECK-REPRODUCIBLE-NOT: filename:
// CHECK-EVIL-REPRODUCIBLE: filename: "A:{{[/\\]+}}UNLIKELY_PATH=empty{{[/\\]+}}file_test_windows.c"
// CHECK-EVIL-REPRODUCIBLE: filename: "A:{{[/\\]+}}UNLIKELY_PATH=empty{{[/\\]+}}Inputs{{[/\\]+}}include-file-test{{[/\\]+}}file_test.h"
// CHECK-EVIL-REPRODUCIBLE: basefile: "A:{{[/\\]+}}UNLIKELY_PATH=empty{{[/\\]+}}file_test_windows.c"
// CHECK-EVIL-REPRODUCIBLE-NOT: filename:
// CHECK-CASE-REPRODUCIBLE: filename: "A:{{[/\\]+}}UNLIKELY_PATH_BASE{{[/\\]+}}file_test_windows.c"
// CHECK-CASE-REPRODUCIBLE: filename: "A:{{[/\\]+}}UNLIKELY_PATH_INC{{[/\\]+}}include-file-test{{[/\\]+}}file_test.h"
// CHECK-CASE-REPRODUCIBLE: basefile: "A:{{[/\\]+}}UNLIKELY_PATH_BASE{{[/\\]+}}file_test_windows.c"
// CHECK-CASE-REPRODUCIBLE-NOT: filename:
// CHECK-REMOVE-REPRODUCIBLE: filename: "file_test_windows.c"
// CHECK-REMOVE-REPRODUCIBLE: filename: "Inputs{{[/\\]+}}include-file-test{{[/\\]+}}file_test.h"
// CHECK-REMOVE-REPRODUCIBLE: basefile: "file_test_windows.c"
// CHECK-REMOVE-REPRODUCIBLE-NOT: filename:
// CHECK-WINDOWS-FULL: filename: "{{[^/]*}}file_test_windows.c"
// CHECK-WINDOWS-FULL: filename: "{{[^/]*}}Inputs\\include-file-test\\file_test.h"
// CHECK-WINDOWS-FULL: basefile: "{{[^/]*}}file_test_windows.c"
// CHECK-WINDOWS-FULL-NOT: filename:
// Clang does not modify the prefix for POSIX style, so it may have backslashes.
// CHECK-LINUX-FULL: filename: "{{.*}}file_test_windows.c"
// CHECK-LINUX-FULL: filename: "{{.*}}Inputs/include-file-test/file_test.h"
// CHECK-LINUX-FULL: basefile: "{{.*}}file_test_windows.c"
// CHECK-LINUX-FULL-NOT: filename: