xref: /llvm-project/clang/test/Headers/header-unit-common-cmp-cat.cpp (revision 12ae1ea13e68657ac75d65fd62385cae5272e2cb)
1*12ae1ea1SDmitry Polukhin // RUN: rm -fR %t
2*12ae1ea1SDmitry Polukhin // RUN: split-file %s %t
3*12ae1ea1SDmitry Polukhin // RUN: cd %t
4*12ae1ea1SDmitry Polukhin // RUN: %clang_cc1 -verify -std=c++20 -fskip-odr-check-in-gmf -I. -emit-header-unit -xc++-user-header bz1.h
5*12ae1ea1SDmitry Polukhin // RUN: %clang_cc1 -verify -std=c++20 -fskip-odr-check-in-gmf -I. -emit-header-unit -xc++-user-header bz2.h
6*12ae1ea1SDmitry Polukhin // RUN: %clang_cc1 -verify -std=c++20 -fskip-odr-check-in-gmf -I. -emit-header-unit -xc++-user-header -fmodule-file=bz1.pcm -fmodule-file=bz2.pcm bz.cpp
7*12ae1ea1SDmitry Polukhin 
8*12ae1ea1SDmitry Polukhin //--- compare
9*12ae1ea1SDmitry Polukhin namespace std {
10*12ae1ea1SDmitry Polukhin namespace __detail {
11*12ae1ea1SDmitry Polukhin 
12*12ae1ea1SDmitry Polukhin template<typename _Tp>
13*12ae1ea1SDmitry Polukhin inline constexpr unsigned __cmp_cat_id = 1;
14*12ae1ea1SDmitry Polukhin 
15*12ae1ea1SDmitry Polukhin template<typename... _Ts>
16*12ae1ea1SDmitry Polukhin constexpr auto __common_cmp_cat() {
17*12ae1ea1SDmitry Polukhin   (__cmp_cat_id<_Ts> | ...);
18*12ae1ea1SDmitry Polukhin }
19*12ae1ea1SDmitry Polukhin 
20*12ae1ea1SDmitry Polukhin } // namespace __detail
21*12ae1ea1SDmitry Polukhin } // namespace std
22*12ae1ea1SDmitry Polukhin 
23*12ae1ea1SDmitry Polukhin //--- bz0.h
24*12ae1ea1SDmitry Polukhin template <class T>
25*12ae1ea1SDmitry Polukhin int operator|(T, T);
26*12ae1ea1SDmitry Polukhin 
27*12ae1ea1SDmitry Polukhin //--- bz1.h
28*12ae1ea1SDmitry Polukhin #include "bz0.h"
29*12ae1ea1SDmitry Polukhin #include <compare>
30*12ae1ea1SDmitry Polukhin // expected-no-diagnostics
31*12ae1ea1SDmitry Polukhin 
32*12ae1ea1SDmitry Polukhin //--- bz2.h
33*12ae1ea1SDmitry Polukhin #include <compare>
34*12ae1ea1SDmitry Polukhin // expected-no-diagnostics
35*12ae1ea1SDmitry Polukhin 
36*12ae1ea1SDmitry Polukhin //--- bz.cpp
37*12ae1ea1SDmitry Polukhin #include <compare>
38*12ae1ea1SDmitry Polukhin 
39*12ae1ea1SDmitry Polukhin import "bz1.h"; // expected-warning {{the implementation of header units is in an experimental phase}}
40*12ae1ea1SDmitry Polukhin import "bz2.h"; // expected-warning {{the implementation of header units is in an experimental phase}}
41