xref: /llvm-project/lldb/test/Shell/SymbolFile/PDB/Inputs/AstRestoreTest.cpp (revision 895529cfd8756e2b4dc609f5af92e0d8ae280ed8)
187aa9c9eSJonas Devlieghere namespace N0 {
287aa9c9eSJonas Devlieghere namespace N1 {
387aa9c9eSJonas Devlieghere 
487aa9c9eSJonas Devlieghere namespace {
587aa9c9eSJonas Devlieghere enum Enum { Enum_0 = 1, Enum_1 = 2, Enum_2 = 4, Enum_3 = 8 };
6*895529cfSAleksandr Urakov enum class ScopedEnum { Enum_0 = 1, Enum_1 = 2, Enum_2 = 4, Enum_3 = 8 };
787aa9c9eSJonas Devlieghere }
887aa9c9eSJonas Devlieghere 
987aa9c9eSJonas Devlieghere Enum Global = Enum_3;
1087aa9c9eSJonas Devlieghere 
1187aa9c9eSJonas Devlieghere struct Base {
1287aa9c9eSJonas Devlieghere   Enum m_e = Enum_1;
1387aa9c9eSJonas Devlieghere };
1487aa9c9eSJonas Devlieghere 
1587aa9c9eSJonas Devlieghere class Class : public Base {
1687aa9c9eSJonas Devlieghere public:
Class(Enum e)1787aa9c9eSJonas Devlieghere   Class(Enum e) : m_ce(e) {}
1887aa9c9eSJonas Devlieghere 
StaticFunc(const Class & c)1987aa9c9eSJonas Devlieghere   static int StaticFunc(const Class &c) {
2087aa9c9eSJonas Devlieghere     return c.PrivateFunc(c.m_inner) + Global + ClassStatic;
2187aa9c9eSJonas Devlieghere   }
2287aa9c9eSJonas Devlieghere 
2387aa9c9eSJonas Devlieghere   const Enum m_ce;
2487aa9c9eSJonas Devlieghere 
2587aa9c9eSJonas Devlieghere   static int ClassStatic;
26*895529cfSAleksandr Urakov   static const int ClassStaticConst = 8;
27*895529cfSAleksandr Urakov   static constexpr int ClassStaticConstexpr = 9;
28*895529cfSAleksandr Urakov   static constexpr float ClassStaticConstexprFloat = 10.f;
29*895529cfSAleksandr Urakov   static constexpr double ClassStaticConstexprDouble = 11.0;
30*895529cfSAleksandr Urakov   static constexpr long double ClassStaticConstexprLongDouble = 12.0;
31*895529cfSAleksandr Urakov   static const Enum ClassStaticConstEnum = Enum_3;
32*895529cfSAleksandr Urakov   static const ScopedEnum ClassStaticConstScopedEnum = ScopedEnum::Enum_2;
3387aa9c9eSJonas Devlieghere 
3487aa9c9eSJonas Devlieghere private:
3587aa9c9eSJonas Devlieghere   struct Inner {
3687aa9c9eSJonas Devlieghere     char x;
3787aa9c9eSJonas Devlieghere     short y;
3887aa9c9eSJonas Devlieghere     int z;
3987aa9c9eSJonas Devlieghere   };
4087aa9c9eSJonas Devlieghere 
PrivateFunc(const Inner & i) const4187aa9c9eSJonas Devlieghere   int PrivateFunc(const Inner &i) const { return i.z; }
4287aa9c9eSJonas Devlieghere 
4387aa9c9eSJonas Devlieghere   Inner m_inner{};
4487aa9c9eSJonas Devlieghere };
4587aa9c9eSJonas Devlieghere int Class::ClassStatic = 7;
4687aa9c9eSJonas Devlieghere 
4787aa9c9eSJonas Devlieghere template<typename T>
4887aa9c9eSJonas Devlieghere struct Template {
4987aa9c9eSJonas Devlieghere   template<Enum E>
TemplateFuncN0::N1::Template5087aa9c9eSJonas Devlieghere   void TemplateFunc() {
5187aa9c9eSJonas Devlieghere     T::StaticFunc(T(E));
5287aa9c9eSJonas Devlieghere   }
5387aa9c9eSJonas Devlieghere };
5487aa9c9eSJonas Devlieghere 
foo()5587aa9c9eSJonas Devlieghere void foo() { Template<Class>().TemplateFunc<Enum_0>(); }
5687aa9c9eSJonas Devlieghere 
5787aa9c9eSJonas Devlieghere } // namespace N1
5887aa9c9eSJonas Devlieghere } // namespace N0
5987aa9c9eSJonas Devlieghere 
main()6087aa9c9eSJonas Devlieghere int main() {
6187aa9c9eSJonas Devlieghere   N0::N1::foo();
6287aa9c9eSJonas Devlieghere   return 0;
6387aa9c9eSJonas Devlieghere }
64