// Testing that adding a new line in a module interface unit won't cause the BMI // of consuming module unit changes. // // RUN: rm -rf %t // RUN: split-file %s %t // // RUN: %clang_cc1 -std=c++20 %t/A.part.cppm -emit-reduced-module-interface -o %t/A-part.pcm // // RUN: %clang_cc1 -std=c++20 %t/A.cppm -emit-reduced-module-interface -o %t/A.v0.pcm \ // RUN: -fprebuilt-module-path=%t // RUN: %clang_cc1 -std=c++20 %t/A.v1.cppm -emit-reduced-module-interface -o %t/A.v1.pcm \ // RUN: -fprebuilt-module-path=%t // // The BMI may not be the same since the source location differs. // RUN: not diff %t/A.pcm %t/A.v1.pcm &> /dev/null // // The BMI of B shouldn't change since all the locations remain the same. // RUN: %clang_cc1 -std=c++20 %t/B.cppm -emit-reduced-module-interface -fmodule-file=A=%t/A.v0.pcm \ // RUN: -o %t/B.pcm -fprebuilt-module-path=%t // RUN: %clang_cc1 -std=c++20 %t/B.cppm -emit-reduced-module-interface -fmodule-file=A=%t/A.v1.pcm \ // RUN: -o %t/B.v1.pcm -fprebuilt-module-path=%t // RUN: diff %t/B.v1.pcm %t/B.pcm &> /dev/null // // The BMI of C may change since the locations for instantiations changes. // RUN: %clang_cc1 -std=c++20 %t/C.cppm -emit-reduced-module-interface -fmodule-file=A=%t/A.v0.pcm \ // RUN: -o %t/C.pcm -fprebuilt-module-path=%t // RUN: %clang_cc1 -std=c++20 %t/C.cppm -emit-reduced-module-interface -fmodule-file=A=%t/A.v1.pcm \ // RUN: -o %t/C.v1.pcm -fprebuilt-module-path=%t // RUN: diff %t/C.v1.pcm %t/C.pcm &> /dev/null //--- A.part.cppm export module A:part; export template struct C { T func() { return T(43); } }; export int funcA() { return 43; } //--- A.cppm export module A; export import :part; //--- A.v1.cppm export module A; export import :part; //--- B.cppm export module B; import A; export int funcB() { return funcA(); } //--- C.cppm export module C; import A; export inline void testD() { C c; c.func(); }