// RUN: rm -rf %t // RUN: mkdir -p %t // RUN: split-file %s %t // // RUN: %clang_cc1 -std=c++20 %t/a.cppm -emit-reduced-module-interface -o %t/a.pcm // RUN: %clang_cc1 -std=c++20 %t/a.cpp -fmodule-file=a=%t/a.pcm -ast-dump | FileCheck %s // RUN: %clang_cc1 -std=c++20 %t/a.cppm -emit-module-interface -o %t/a.pcm // RUN: %clang_cc1 -std=c++20 %t/a.cpp -fmodule-file=a=%t/a.pcm -ast-dump | FileCheck %s //--- a.h namespace a { class A { public: int aaaa; int get() { return aaaa; } }; template class B { public: B(T t): t(t) {} T t; }; using BI = B; inline int get(A a, BI b) { return a.get() + b.t; } } //--- a.cppm export module a; export extern "C++" { #include "a.h" } //--- a.cpp import a; #include "a.h" int test() { a::A aa; a::BI bb(43); return get(aa, bb); } // CHECK-NOT: DefinitionData // CHECK: FunctionDecl {{.*}} get 'int (A, BI)' {{.*}} // CHECK-NOT: CompoundStmt // CHECK: FunctionDecl {{.*}} test {{.*}}