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