// Checks that -fmodules-driver correctly handles compilations using // Standard C++20 modules. // RUN: split-file %s %t // RUN: %clang -c -std=c++23 \ // RUN: -fmodules-driver -Rmodules-driver -Rmodule-import \ // RUN: %t/main.cpp %t/A.cppm %t/A-part1.cppm %t/A-part1-impl.cppm %t/B.cppm 2>&1 \ // RUN: | sed 's:\\\\\?:/:g' \ // RUN: | FileCheck -DPREFIX=%/t --check-prefix=CHECK-REMARKS %s // CHECK-REMARKS: [[PREFIX]]/A.cppm:2:8: remark: importing module 'A:part1' from // CHECK-REMARKS: [[PREFIX]]/A.cppm:3:1: remark: importing module 'B' from // CHECK-REMARKS: [[PREFIX]]/main.cpp:1:1: remark: importing module 'A' from // CHECK-REMARKS: [[PREFIX]]/main.cpp:1:1: remark: importing module 'A:part1' into 'A' from // CHECK-REMARKS: [[PREFIX]]/main.cpp:1:1: remark: importing module 'B' into 'A' from // CHECK-REMARKS: [[PREFIX]]/main.cpp:2:1: remark: importing module 'B' from // RUN: %clang -std=c++23 \ // RUN: -fmodules-driver -Rmodules-driver -Rmodule-import \ // RUN: %t/main.cpp %t/A.cppm %t/A-part1.cppm %t/A-part1-impl.cppm %t/B.cppm \ // RUN: -### 2>&1 \ // RUN: | sed 's:\\\\\?:/:g' \ // RUN: | FileCheck --check-prefix=CHECK-CC1 %s // CHECK-CC1: "-cc1" // CHECK-CC1-SAME: "{{.*}}/B.cppm" // CHECK-CC1-SAME: "-fno-implicit-modules" // CHECK-CC1-SAME: "-fmodule-output=[[B_PCM:[^"]+]]" // CHECK-CC1: "-cc1" // CHECK-CC1-SAME: "{{.*}}/A-part1-impl.cppm" // CHECK-CC1-SAME: "-fno-implicit-modules" // CHECK-CC1-SAME: "-fmodule-output=[[A_PART1_IMPL_PCM:[^"]+]]" // CHECK-CC1: "-cc1" // CHECK-CC1-SAME: "{{.*}}/A-part1.cppm" // CHECK-CC1-SAME: "-fno-implicit-modules" // CHECK-CC1-SAME: "-fmodule-output=[[A_PART1_PCM:[^"]+]]" // CHECK-CC1: "-cc1" // CHECK-CC1-SAME: "{{.*}}/A.cppm" // CHECK-CC1-SAME: "-fno-implicit-modules" // CHECK-CC1-SAME: "-fmodule-output=[[A_PCM:[^"]+]]" // CHECK-CC1-SAME: "-fmodule-file=A:part1=[[A_PART1_PCM]]" // CHECK-CC1-SAME: "-fmodule-file=B=[[B_PCM]]" // CHECK-CC1: "-cc1" // CHECK-CC1-SAME: "{{.*}}/main.cpp" // CHECK-CC1-SAME: "-fno-implicit-modules" // CHECK-CC1-SAME: "-fmodule-file=A=[[A_PCM]]" // CHECK-CC1-SAME: "-fmodule-file=A:part1=[[A_PART1_PCM]]" // CHECK-CC1-SAME: "-fmodule-file=B=[[B_PCM]]" //--- main.cpp import A; import B; int main() { return a() + b(); } //--- A.cppm export module A; export import :part1; import B; export int a() { return part1() + b(); } //--- A-part1.cppm export module A:part1; export int part1(); //--- A-part1-impl.cppm module A:part1_impl; int part1() { return 30; } //--- B.cppm export module B; export int b() { return 12; }