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 Smithinline 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