xref: /llvm-project/clang/test/Modules/Inputs/cxx-decls-imported.h (revision 9c4fb0a8331cae2d4e2e4beaa4e7af06062a6b58)
19dd9f036SRichard Smith class HasFriends {
29dd9f036SRichard Smith   friend void friend_1(HasFriends);
39dd9f036SRichard Smith   friend void friend_2(HasFriends);
49dd9f036SRichard Smith   void private_thing();
59dd9f036SRichard Smith };
6b45a6f72SRichard Smith 
7b45a6f72SRichard Smith struct HasNontrivialDefaultConstructor {
8b45a6f72SRichard Smith   HasNontrivialDefaultConstructor() = default;
9b45a6f72SRichard Smith   HasNontrivialDefaultConstructor(int n = 0);
10b45a6f72SRichard Smith 
11b45a6f72SRichard Smith   // Ensure this class is not POD but is still trivially-copyable.
12b45a6f72SRichard Smith   // This is necessary to exercise the second static_assert below,
13b45a6f72SRichard Smith   // because GCC's spec for __has_trivial_constructor is absurd.
14b45a6f72SRichard Smith   int m;
15b45a6f72SRichard Smith private:
16b45a6f72SRichard Smith   int n;
17b45a6f72SRichard Smith };
18b45a6f72SRichard Smith 
19b45a6f72SRichard Smith static_assert(!__is_trivial(HasNontrivialDefaultConstructor), "");
20b45a6f72SRichard Smith static_assert(!__has_trivial_constructor(HasNontrivialDefaultConstructor), "");
21debcd500SRichard Smith 
22debcd500SRichard Smith void *operator new[](__SIZE_TYPE__);
23675d279aSRichard Smith 
24675d279aSRichard Smith extern int mergeUsedFlag;
getMergeUsedFlag()25675d279aSRichard Smith inline int getMergeUsedFlag() { return mergeUsedFlag; }
2688ebade8SRichard Smith 
2788ebade8SRichard Smith typedef struct {
2888ebade8SRichard Smith   int n;
2988ebade8SRichard Smith   int m;
3088ebade8SRichard Smith } NameForLinkage;
31b1108739SRichard Smith 
32b1108739SRichard Smith struct HasVirtualFunctions {
33b1108739SRichard Smith   virtual void f();
34b1108739SRichard Smith };
35b1108739SRichard Smith struct OverridesVirtualFunctions : HasVirtualFunctions {
36b1108739SRichard Smith   void f();
37b1108739SRichard Smith };
38b602c7f8SRichard Smith extern "C" void ExternCFunction();
3970d58509SRichard Smith 
4070d58509SRichard Smith typedef struct {
4170d58509SRichard Smith   struct Inner {
4270d58509SRichard Smith     int n;
4370d58509SRichard Smith   };
4470d58509SRichard Smith } NameForLinkage2;
4570d58509SRichard Smith auto name_for_linkage2_inner_a = NameForLinkage2::Inner();
4670d58509SRichard Smith typedef decltype(name_for_linkage2_inner_a) NameForLinkage2Inner;
47f463436dSRichard Smith 
48f463436dSRichard Smith namespace Aliased { extern int a; }
49f463436dSRichard Smith namespace Alias = Aliased;
50f81c2cc6SRichard Smith 
51f81c2cc6SRichard Smith struct InhCtorA { InhCtorA(int); };
52f81c2cc6SRichard Smith struct InhCtorB : InhCtorA { using InhCtorA::InhCtorA; };
53*9c4fb0a8SRichard Smith 
54*9c4fb0a8SRichard Smith struct ClassWithVBases : HasFriends, virtual HasNontrivialDefaultConstructor {
55*9c4fb0a8SRichard Smith   int n;
56*9c4fb0a8SRichard Smith };
57*9c4fb0a8SRichard Smith struct ClassWithVBases;
58