| // Tests mixed usage of precompiled headers and modules. |
| // |
| // RUN: rm -rf %t |
| // RUN: mkdir -p %t |
| // RUN: split-file %s %t |
| // |
| // RUN: %clang_cc1 -std=c++20 -x c++-header -emit-pch %t/a.hpp \ |
| // RUN: -o %t/a.pch |
| |
| // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/Part1.cppm \ |
| // RUN: -include-pch %t/a.pch -o %t/Part1.pcm |
| // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/Part2.cppm \ |
| // RUN: -include-pch %t/a.pch -o %t/Part2.pcm |
| // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/Part3.cppm \ |
| // RUN: -include-pch %t/a.pch -o %t/Part3.pcm |
| // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/Part4.cppm \ |
| // RUN: -include-pch %t/a.pch -o %t/Part4.pcm |
| |
| // RUN: %clang_cc1 -std=c++20 -emit-module-interface \ |
| // RUN: -fmodule-file=mod:part1=%t/Part1.pcm \ |
| // RUN: -fmodule-file=mod:part2=%t/Part2.pcm \ |
| // RUN: -fmodule-file=mod:part3=%t/Part3.pcm \ |
| // RUN: -fmodule-file=mod:part4=%t/Part4.pcm \ |
| // RUN: %t/Mod.cppm \ |
| // RUN: -include-pch %t/a.pch -o %t/Mod.pcm |
| |
| // RUN: %clang_cc1 -std=c++20 -emit-obj \ |
| // RUN: -main-file-name Mod.cppm \ |
| // RUN: -fmodule-file=mod:part1=%t/Part1.pcm \ |
| // RUN: -fmodule-file=mod:part2=%t/Part2.pcm \ |
| // RUN: -fmodule-file=mod:part3=%t/Part3.pcm \ |
| // RUN: -fmodule-file=mod:part4=%t/Part4.pcm \ |
| // RUN: -x pcm %t/Mod.pcm \ |
| // RUN: -include-pch %t/a.pch -o %t/Mod.o |
| |
| |
| //--- a.hpp |
| #pragma once |
| |
| class a { |
| virtual ~a(); |
| a() {} |
| }; |
| |
| //--- Part1.cppm |
| export module mod:part1; |
| |
| //--- Part2.cppm |
| export module mod:part2; |
| |
| //--- Part3.cppm |
| export module mod:part3; |
| |
| //--- Part4.cppm |
| export module mod:part4; |
| |
| //--- Mod.cppm |
| export module mod; |
| export import :part1; |
| export import :part2; |
| export import :part3; |
| export import :part4; |
| |