
There is a long-standing FIXME in `HeaderSearch.cpp` to use the path separator preferred by the platform instead of forward slash. There was an attempt to fix that (1cf6c28a) which got reverted (cf385dc8). I couldn't find an explanation, but my guess is that some tests assuming forward slash started failing. This commit fixes tests with that assumption. This is intended to be NFC, but there are two exceptions to that: * Some diagnostic messages might now contain backslash instead of forward slash. * Arguments to the "-remap-file" option that use forward slash might stop kicking in. Separators between potential includer path and header name need to be replaced by backslash in that case.
106 lines
3.0 KiB
C++
106 lines
3.0 KiB
C++
// Test macro preservation in C++20 Header Units.
|
|
|
|
// RUN: rm -rf %t
|
|
// RUN: mkdir -p %t
|
|
// RUN: split-file %s %t
|
|
// RUN: cd %t
|
|
|
|
// RUN: %clang_cc1 -std=c++20 -emit-header-unit -xc++-user-header hu-01.h \
|
|
// RUN: -o hu-01.pcm
|
|
|
|
// RUN: %clang_cc1 -std=c++20 -module-file-info hu-01.pcm | \
|
|
// RUN: FileCheck --check-prefix=CHECK-HU %s -DTDIR=%t
|
|
|
|
// RUN: %clang_cc1 -std=c++20 -emit-header-unit -xc++-user-header hu-02.h \
|
|
// RUN: -DFOO -fmodule-file=hu-01.pcm -o hu-02.pcm -Rmodule-import 2>&1 | \
|
|
// RUN: FileCheck --check-prefix=CHECK-IMP %s -DTDIR=%t
|
|
|
|
// RUN: %clang_cc1 -std=c++20 -module-file-info hu-02.pcm | \
|
|
// RUN: FileCheck --check-prefix=CHECK-HU2 %s -DTDIR=%t
|
|
|
|
// RUN: %clang_cc1 -std=c++20 -emit-module-interface importer-01.cpp \
|
|
// RUN: -fmodule-file=hu-02.pcm -o B.pcm -verify
|
|
|
|
// RUN: %clang_cc1 -std=c++20 -emit-module-interface importer-02.cpp \
|
|
// RUN: -fmodule-file=hu-02.pcm -o C.pcm -Rmodule-import 2>&1 | \
|
|
// RUN: FileCheck --check-prefix=CHECK-IMP-HU2 %s -DTDIR=%t
|
|
|
|
//--- hu-01.h
|
|
#ifndef __GUARD
|
|
#define __GUARD
|
|
|
|
int baz(int);
|
|
#define FORTYTWO 42
|
|
|
|
#define SHOULD_NOT_BE_DEFINED -1
|
|
#undef SHOULD_NOT_BE_DEFINED
|
|
|
|
#endif // __GUARD
|
|
// expected-no-diagnostics
|
|
|
|
// CHECK-HU: ====== C++20 Module structure ======
|
|
// CHECK-HU-NEXT: Header Unit '.{{/|\\\\?}}hu-01.h' is the Primary Module at index #1
|
|
|
|
//--- hu-02.h
|
|
export import "hu-01.h"; // expected-warning {{the implementation of header units is in an experimental phase}}
|
|
#if !defined(FORTYTWO) || FORTYTWO != 42
|
|
#error FORTYTWO missing in hu-02
|
|
#endif
|
|
|
|
#ifndef __GUARD
|
|
#error __GUARD missing in hu-02
|
|
#endif
|
|
|
|
#ifdef SHOULD_NOT_BE_DEFINED
|
|
#error SHOULD_NOT_BE_DEFINED is visible
|
|
#endif
|
|
|
|
#define KAP 6174
|
|
|
|
#ifdef FOO
|
|
#define FOO_BRANCH(X) (X) + 1
|
|
inline int foo(int x) {
|
|
if (x == FORTYTWO)
|
|
return FOO_BRANCH(x);
|
|
return FORTYTWO;
|
|
}
|
|
#else
|
|
#define BAR_BRANCH(X) (X) + 2
|
|
inline int bar(int x) {
|
|
if (x == FORTYTWO)
|
|
return BAR_BRANCH(x);
|
|
return FORTYTWO;
|
|
}
|
|
#endif
|
|
|
|
// CHECK-IMP: remark: importing module '.{{/|\\\\?}}hu-01.h' from 'hu-01.pcm'
|
|
// CHECK-HU2: ====== C++20 Module structure ======
|
|
// CHECK-HU2-NEXT: Header Unit '.{{/|\\\\?}}hu-02.h' is the Primary Module at index #2
|
|
// CHECK-HU2-NEXT: Exports:
|
|
// CHECK-HU2-NEXT: Header Unit '.{{/|\\\\?}}hu-01.h' is at index #1
|
|
// expected-no-diagnostics
|
|
|
|
//--- importer-01.cpp
|
|
export module B;
|
|
import "hu-02.h"; // expected-warning {{the implementation of header units is in an experimental phase}}
|
|
|
|
int success(int x) {
|
|
return foo(FORTYTWO + x + KAP);
|
|
}
|
|
|
|
int fail(int x) {
|
|
return bar(FORTYTWO + x + KAP); // expected-error {{use of undeclared identifier 'bar'}}
|
|
// expected-note@* {{'baz' declared here}}
|
|
}
|
|
|
|
//--- importer-02.cpp
|
|
export module C;
|
|
import "hu-02.h"; // expected-warning {{the implementation of header units is in an experimental phase}}
|
|
|
|
int success(int x) {
|
|
return foo(FORTYTWO + x + KAP);
|
|
}
|
|
|
|
// CHECK-IMP-HU2: remark: importing module '.{{/|\\\\?}}hu-02.h' from 'hu-02.pcm'
|
|
// CHECK-IMP-HU2: remark: importing module '.{{/|\\\\?}}hu-01.h' into '.{{/|\\\\?}}hu-02.h' from '[[TDIR]]{{[/\\]}}hu-01.pcm'
|