xref: /aosp_15_r20/external/clang/test/Modules/Inputs/cxx-decls-imported.h (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li class HasFriends {
2*67e74705SXin Li   friend void friend_1(HasFriends);
3*67e74705SXin Li   friend void friend_2(HasFriends);
4*67e74705SXin Li   void private_thing();
5*67e74705SXin Li };
6*67e74705SXin Li 
7*67e74705SXin Li struct HasNontrivialDefaultConstructor {
8*67e74705SXin Li   HasNontrivialDefaultConstructor() = default;
9*67e74705SXin Li   HasNontrivialDefaultConstructor(int n = 0);
10*67e74705SXin Li 
11*67e74705SXin Li   // Ensure this class is not POD but is still trivially-copyable.
12*67e74705SXin Li   // This is necessary to exercise the second static_assert below,
13*67e74705SXin Li   // because GCC's spec for __has_trivial_constructor is absurd.
14*67e74705SXin Li   int m;
15*67e74705SXin Li private:
16*67e74705SXin Li   int n;
17*67e74705SXin Li };
18*67e74705SXin Li 
19*67e74705SXin Li static_assert(!__is_trivial(HasNontrivialDefaultConstructor), "");
20*67e74705SXin Li static_assert(!__has_trivial_constructor(HasNontrivialDefaultConstructor), "");
21*67e74705SXin Li 
22*67e74705SXin Li void *operator new[](__SIZE_TYPE__);
23*67e74705SXin Li 
24*67e74705SXin Li extern int mergeUsedFlag;
getMergeUsedFlag()25*67e74705SXin Li inline int getMergeUsedFlag() { return mergeUsedFlag; }
26*67e74705SXin Li 
27*67e74705SXin Li typedef struct {
28*67e74705SXin Li   int n;
29*67e74705SXin Li   int m;
30*67e74705SXin Li } NameForLinkage;
31*67e74705SXin Li 
32*67e74705SXin Li struct HasVirtualFunctions {
33*67e74705SXin Li   virtual void f();
34*67e74705SXin Li };
35*67e74705SXin Li struct OverridesVirtualFunctions : HasVirtualFunctions {
36*67e74705SXin Li   void f();
37*67e74705SXin Li };
38*67e74705SXin Li extern "C" void ExternCFunction();
39*67e74705SXin Li 
40*67e74705SXin Li typedef struct {
41*67e74705SXin Li   struct Inner {
42*67e74705SXin Li     int n;
43*67e74705SXin Li   };
44*67e74705SXin Li } NameForLinkage2;
45*67e74705SXin Li auto name_for_linkage2_inner_a = NameForLinkage2::Inner();
46*67e74705SXin Li typedef decltype(name_for_linkage2_inner_a) NameForLinkage2Inner;
47*67e74705SXin Li 
48*67e74705SXin Li namespace Aliased { extern int a; }
49*67e74705SXin Li namespace Alias = Aliased;
50*67e74705SXin Li 
51*67e74705SXin Li struct InhCtorA { InhCtorA(int); };
52*67e74705SXin Li struct InhCtorB : InhCtorA { using InhCtorA::InhCtorA; };
53*67e74705SXin Li 
54*67e74705SXin Li struct ClassWithVBases : HasFriends, virtual HasNontrivialDefaultConstructor {
55*67e74705SXin Li   int n;
56*67e74705SXin Li };
57*67e74705SXin Li struct ClassWithVBases;
58