66 lines · plain
1// RUN: rm -rf %t2// RUN: mkdir -p %t3// RUN: split-file %s %t4//5// RUNX: %clang_cc1 -std=c++20 -triple %itanium_abi_triple \6// RUNX: -emit-module-interface %t/a.cppm -o %t/a.pcm7// RUNX: %clang_cc1 -std=c++20 -triple %itanium_abi_triple \8// RUNX: %t/b.cpp -fmodule-file=a=%t/a.pcm -disable-llvm-passes \9// RUNX: -emit-llvm -o - | FileCheck %t/b.cpp10// RUNX: %clang_cc1 -std=c++20 -triple %itanium_abi_triple \11// RUNX: %t/c.cpp -fmodule-file=a=%t/a.pcm -disable-llvm-passes \12// RUNX: -emit-llvm -o - | FileCheck %t/c.cpp13 14// Test again with reduced BMI.15// RUN: rm -rf %t16// RUN: mkdir -p %t17// RUN: split-file %s %t18//19// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple \20// RUN: -emit-reduced-module-interface %t/a.cppm -o %t/a.pcm21// RUNX: %clang_cc1 -std=c++20 -triple %itanium_abi_triple \22// RUNX: %t/b.cpp -fmodule-file=a=%t/a.pcm -disable-llvm-passes \23// RUNX: -emit-llvm -o - | FileCheck %t/b.cpp24// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple \25// RUN: %t/c.cpp -fmodule-file=a=%t/a.pcm -disable-llvm-passes \26// RUN: -emit-llvm -o - | FileCheck %t/c.cpp27 28//--- a.cppm29export module a;30 31struct integer {32 explicit operator int() const {33 return 0;34 }35};36 37export template<typename>38int a = static_cast<int>(integer());39 40int aa() {41 return a<void>;42}43 44 45//--- b.cpp46import a;47 48void b() {}49 50// CHECK-NOT: @_ZW1a1dIvE =51// CHECK-NOT: @_ZGVW1a1dIvE =52// CHECK-NOT: @_ZW1a11dynamic_var =53// CHECK-NOT: @_ZGVW1a11dynamic_var =54// CHECK-NOT: @_ZW1a1aIvE =55// CHECK-NOT: @_ZGVW1a1aIvE =56 57//--- c.cpp58import a;59int c() {60 return a<void>;61}62 63// The used variables are generated normally64// CHECK-DAG: @_ZW1a1aIvE =65// CHECK-DAG: @_ZGVW1a1aIvE =66