55 lines · cpp
1// RUN: rm -rf %t2// RUN: mkdir %t3// RUN: split-file %s %t4 5// Check compiling a module interface to a .pcm file.6//7// RUN: %clang -std=c++2a -x c++-module --precompile %t/foo.cpp -o %t/foo.pcm -v 2>&1 | FileCheck %s --check-prefix=CHECK-PRECOMPILE8// RUN: %clang -std=gnu++2a -x c++-module --precompile %t/foo.cpp -o %t/foo-gnu.pcm -v 2>&1 | FileCheck %s --check-prefix=CHECK-PRECOMPILE9//10// CHECK-PRECOMPILE: -cc1 {{.*}} -emit-module-interface 11// CHECK-PRECOMPILE-SAME: -o {{.*}}.pcm12// CHECK-PRECOMPILE-SAME: -x c++13// CHECK-PRECOMPILE-SAME: foo.cpp14 15// Check compiling a .pcm file to a .o file.16//17// RUN: %clang -std=c++2a %t/foo.pcm -S -o %t/foo.pcm.o -v 2>&1 | FileCheck %s --check-prefix=CHECK-COMPILE18//19// CHECK-COMPILE: -cc1 {{.*}} {{-emit-obj|-S}}20// CHECK-COMPILE-SAME: -o {{.*}}foo{{2*}}.pcm.o21// CHECK-COMPILE-SAME: -x pcm22// CHECK-COMPILE-SAME: {{.*}}.pcm23 24// Check use of a .pcm file in another compilation.25//26// RUN: %clang -std=c++2a -fmodule-file=foo=%t/foo.pcm %t/foo_impl.cpp -S -o %t/module.o -v 2>&1 | FileCheck %s --check-prefix=CHECK-USE27// RUN: %clang -std=c++20 -fmodule-file=foo=%t/foo.pcm %t/foo_impl.cpp -S -o %t/module.o -v 2>&1 | FileCheck %s --check-prefix=CHECK-USE28// RUN: %clang -std=gnu++20 -fmodule-file=foo=%t/foo-gnu.pcm %t/foo_impl.cpp -S -o %t/module.o -v 2>&1 | FileCheck %s --check-prefix=CHECK-USE29//30// CHECK-USE: -cc1 {{.*}} {{-emit-obj|-S}}31// CHECK-USE-SAME: -fmodule-file=foo={{.*}}.pcm32// CHECK-USE-SAME: -o {{.*}}.{{o|s}}{{"?}} {{.*}}-x c++33// CHECK-USE-SAME: foo_impl.cpp34 35// Check combining precompile and compile steps works.36//37// RUN: %clang -std=c++2a -x c++-module -fno-modules-reduced-bmi %t/foo.cpp -S -o %t/foo2.pcm.o -v 2>&1 | FileCheck %s --check-prefix=CHECK-PRECOMPILE --check-prefix=CHECK-COMPILE38 39// Check that .cppm is treated as a module implicitly.40//41// RUN: cp %t/foo.cpp %t/foo.cppm42// RUN: %clang -std=c++2a --precompile %t/foo.cppm -o %t/foo.pcm -v 2>&1 | FileCheck %s --check-prefix=CHECK-PRECOMPILE43 44// RUN: %clang -std=c++20 -x c++-module %t/foo.cpp --precompile -o %t/foo.pcm -### 2>&1 | FileCheck %s --check-prefix=CHECK-PRECOMPILE-WO-MODULE-OUTPUT45// CHECK-PRECOMPILE-WO-MODULE-OUTPUT-NOT: -fmodule-output=46 47// RUN: %clang -std=c++20 -x c++-module %t/foo.cpp --precompile -fmodule-output=%t/foo.reduced.pcm -o %t/foo.pcm -### 2>&1 | FileCheck %s --check-prefix=CHECK-PRECOMPILE-WT-MODULE-OUTPUT48// CHECK-PRECOMPILE-WT-MODULE-OUTPUT: -fmodule-output=49 50//--- foo.cpp51export module foo;52 53//--- foo_impl.cpp54module foo;55