blob: b273fc318058ee65f3e178443d390f609e2326c6 [file] [log] [blame]
// RUN: rm -rf %t
// RUN: mkdir -p %t
// RUN: split-file %s %t
//
// RUN: %clang_cc1 -xc++ -std=c++20 -emit-module -fmodule-name=hf -fno-cxx-modules -fmodules -fno-implicit-modules %t/CMO.cppmap -o %t/WI9.pcm
// RUN: %clang_cc1 -xc++ -std=c++20 -emit-module -fmodule-name=g -fno-cxx-modules -fmodules -fno-implicit-modules -fmodule-file=%t/WI9.pcm %t/E6H.cppmap -o %t/4BK.pcm
// RUN: %clang_cc1 -xc++ -std=c++20 -emit-module -fmodule-name=r -fno-cxx-modules -fmodules -fno-implicit-modules -fmodule-file=%t/WI9.pcm %t/HMT.cppmap -o %t/LUM.pcm
// RUN: %clang_cc1 -xc++ -std=c++20 -emit-module -fmodule-name=q -fno-cxx-modules -fmodules -fno-implicit-modules -fmodule-file=%t/LUM.pcm -fmodule-file=%t/4BK.pcm %t/JOV.cppmap -o %t/9VX.pcm
// RUN: %clang_cc1 -xc++ -std=c++20 -verify -fsyntax-only -fno-cxx-modules -fmodules -fno-implicit-modules -fmodule-file=%t/9VX.pcm %t/XFD.cc
//--- 2OT.h
#include "LQ1.h"
namespace ciy {
namespace xqk {
template <typename>
class vum {
public:
using sc = std::C::wmd;
friend bool operator==(vum, vum);
};
template <typename>
class me {
public:
using vbh = vum<me>;
using sc = std::C::vy<vbh>::sc;
template <typename db>
operator db() { return {}; }
};
} // namespace xqk
template <typename vus>
xqk::me<vus> uvo(std::C::wmd, vus);
} // namespace ciy
class ua {
std::C::wmd kij() {
ciy::uvo(kij(), '-');
return {};
}
};
//--- 9KF.h
#include "LQ1.h"
#include "2OT.h"
namespace {
void al(std::C::wmd lou) { std::C::jv<std::C::wmd> yt = ciy::uvo(lou, '/'); }
} // namespace
//--- CMO.cppmap
module "hf" {
header "LQ1.h"
}
//--- E6H.cppmap
module "g" {
export *
header "2OT.h"
}
//--- HMT.cppmap
module "r" {
header "2OT.h"
}
//--- JOV.cppmap
module "q" {
header "9KF.h"
}
//--- LQ1.h
namespace std {
namespace C {
template <class zd>
struct vy : zd {};
template <class ub>
struct vy<ub*> {
typedef ub jz;
};
struct wmd {};
template <class uo, class zt>
void sk(uo k, zt gf) {
(void)(k != gf);
}
template <class uo>
class fm {
public:
fm(uo);
};
template <class kj, class kju>
bool operator==(kj, kju);
template <class epn>
void afm(epn) {
using yp = vy<epn>;
if (__is_trivially_copyable(yp)) {
sk(fm(epn()), nullptr);
}
}
template <class ub>
class jv {
public:
constexpr void gq();
ub *nef;
};
template <class ub>
constexpr void jv<ub>::gq() {
afm(nef);
}
} // namespace C
} // namespace std
namespace ciy {
} // namespace ciy
//--- XFD.cc
// expected-no-diagnostics
#include "LQ1.h"
#include "2OT.h"
class wiy {
public:
std::C::wmd eyb();
};
template <typename wpa>
void i(wpa fg) {
std::C::jv<std::C::wmd> zs;
zs = ciy::uvo(fg.eyb(), '\n');
}
namespace ciy {
namespace xqk {
struct sbv;
std::C::jv<sbv> ns() {
std::C::jv<sbv> ubs;
ubs.gq();
return ubs;
}
} // namespace xqk
} // namespace ciy
void s() {
wiy fg;
i(fg);
}