mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-28 08:36:06 +00:00

Many of our supported configurations support modules but do not have any first-class syntax to perform a module import. This leaves us with a problem: there is no way to represent the expansion of a #include that imports a module in the -E output for such languages. (We don't want to just leave it as a #include because that requires the consumer of the preprocessed source to have the same file system layout and include paths as the creator.) This patch adds a new pragma: #pragma clang module import MODULE.NAME.HERE that imports a module, and changes -E and -frewrite-includes to use it when rewriting a #include that maps to a module import. We don't make any attempt to use a native language syntax import if one exists, to get more consistent output. (If in the future, @import and #include have different semantics in some way, the pragma will track the #include semantics.) llvm-svn: 301725
31 lines
1.2 KiB
C++
31 lines
1.2 KiB
C++
// RUN: rm -rf %t
|
|
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -I %S/Inputs -x c++ -E %s | \
|
|
// RUN: FileCheck -strict-whitespace %s
|
|
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -I %S/Inputs -x objective-c -E %s | \
|
|
// RUN: FileCheck -strict-whitespace %s
|
|
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -I %S/Inputs -x c++ -E -frewrite-includes %s | \
|
|
// RUN: FileCheck -strict-whitespace %s --check-prefix=REWRITE
|
|
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -I %S/Inputs -x objective-c -E -frewrite-includes %s | \
|
|
// RUN: FileCheck -strict-whitespace %s --check-prefix=REWRITE
|
|
#include "dummy.h"
|
|
#include "dummy.h"
|
|
foo bar baz
|
|
|
|
// EOF marker to ensure -frewrite-includes doesn't match its own CHECK lines.
|
|
|
|
// REWRITE: #if 0
|
|
// REWRITE: #include{{ }}"dummy.h"
|
|
// REWRITE: #endif
|
|
|
|
// CHECK: #pragma clang module import dummy /* clang {{.*}} implicit import
|
|
|
|
// REWRITE: #if 0
|
|
// REWRITE: #include{{ }}"dummy.h"
|
|
// REWRITE: #endif
|
|
|
|
// CHECK: #pragma clang module import dummy /* clang {{.*}} implicit import
|
|
|
|
// CHECK: foo bar baz
|
|
|
|
// REWRITE: // {{EOF}} marker
|