75 lines · plain
1// RUN: rm -rf %t2// RUN: split-file %s %t3// RUN: cd %t4//5// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/a.cppm \6// RUN: -emit-module-interface -o %t/a.pcm7// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/b.cppm \8// RUN: -emit-module-interface -fprebuilt-module-path=%t -o %t/b.pcm9// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/c.cppm \10// RUN: -emit-module-interface -fprebuilt-module-path=%t -o %t/c.pcm11// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/c.pcm \12// RUN: -fprebuilt-module-path=%t -emit-llvm -disable-llvm-passes -o - \13// RUN: | FileCheck %t/c.cppm14//15// Be sure that we keep the same behavior as if optization not enabled.16// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple -O3 %t/a.cppm \17// RUN: -emit-module-interface -o %t/a.pcm18// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple -O3 %t/b.cppm \19// RUN: -emit-module-interface -fprebuilt-module-path=%t -o %t/b.pcm20// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple -O3 %t/c.cppm \21// RUN: -emit-module-interface -fprebuilt-module-path=%t -o %t/c.pcm22// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple -O3 %t/c.pcm \23// RUN: -fprebuilt-module-path=%t -emit-llvm -disable-llvm-passes \24// RUN: -o - | FileCheck %t/c.cppm25 26//--- a.cppm27export module a;28export int a() {29 return 43;30}31 32template <int C>33int implicitly_inlined_template_function() {34 return C;35}36 37inline int reachable_inlined_a() {38 return 45;39}40 41int reachable_notinlined_a() {42 return 46;43}44 45export inline int inlined_a() {46 return 44 + reachable_inlined_a() +47 reachable_notinlined_a() +48 implicitly_inlined_template_function<47>();49}50 51//--- b.cppm52export module b;53export import a;54export int b() {55 return 43 + a();56}57export inline int inlined_b() {58 return 44 + inlined_a() + a();;59}60 61//--- c.cppm62export module c;63export import b;64export int c() {65 return 43 + b() + a() + inlined_b() + inlined_a();66}67 68// CHECK: declare{{.*}}@_ZW1b1bv69// CHECK: declare{{.*}}@_ZW1a1av70// CHECK: define{{.*}}@_ZW1b9inlined_bv71// CHECK: define{{.*}}@_ZW1a9inlined_av72// CHECK: define{{.*}}@_ZW1a19reachable_inlined_av73// CHECK: declare{{.*}}@_ZW1a22reachable_notinlined_av74// CHECK: define{{.*}}@_ZW1a36implicitly_inlined_template_functionILi47EEiv75