xref: /llvm-project/llvm/test/DebugInfo/PDB/Inputs/merge-ids-and-types-2.yaml (revision d4136e945ed7d057b4bb376eb6f5299c76d31614)
1# In file 1 we set up some basic types and IDs to refer to them.  In this file
2# we will set up the same types.  For some of them we will make them identical
3# but re-order the records in the file to make sure they have different type
4# indices and appear in different orders.  In other cases we will make slight
5# adjustments to the types, to ensure that they do not get merged in.
6#
7# For easy understanding, a semantic representation of the types we will set up
8# is as follows:
9#  - int main(int, char**)    // This record should share an LF_PROCEDURE and id
10#                             // record with corresponding function from the
11#                             // first file.
12#  - int main2(int, char**)   // This record should share the LF_PROCEDURE
13#                             // record but have a unique id record.
14#  - void foo(int, char**)    // This record should have a unique LF_PROCEDURE
15#                             // record, but the LF_ARGLIST record internally
16#                             // should be shared.
17#
18#  - struct FooBar {          // Because the type of this record exactly matches
19#                             // the corresponding file, its entire type record
20#                             // hierarchy should be shared.
21#    public:
22#      void *FooMember;
23#      void FooMethod2(int);  // Note that the *type* of this member should be
24#                             // the same as the type of the record from the
25#                             // first stream.  But since it has a different
26#                             // name, it will not share an id record.
27#    };
28TpiStream:
29  Records:
30    # TypeIndex: 4096 (0x1000)
31    # (int)
32    - Kind:            LF_ARGLIST
33      ArgList:         
34        ArgIndices:      [ 116 ]
35    # TypeIndex: 4097 (0x1001)
36    # public void *FooMember
37    - Kind:            LF_FIELDLIST
38      FieldList:       
39        - Kind:            LF_MEMBER
40          DataMember:      
41            Attrs:           3           # public
42            Type:            1027        # void*
43            FieldOffset:     0
44            Name:            FooMember   # FooMember
45    # TypeIndex: 4098 (0x1002)
46    # char**
47    - Kind:            LF_POINTER
48      Pointer:         
49        ReferentType:    1136
50        Attrs:           32778
51    # TypeIndex: 4099 (0x1003)
52    # (int, char**)
53    - Kind:            LF_ARGLIST
54      ArgList:         
55        ArgIndices:      [ 116, 4098 ]
56    # TypeIndex: 4100 (0x1004)
57    # struct FooBar {
58    # public:
59    #   void *FooMember;
60    # };
61    - Kind:            LF_STRUCTURE
62      Class:           
63        MemberCount:     1
64        Options:         [ None, HasUniqueName ]
65        FieldList:       4097
66        Name:            FooBar
67        UniqueName:      'FooBar'
68        DerivationList:  0
69        VTableShape:     0
70        Size:            4
71    # TypeIndex: 4101 (0x1005)
72    # void (int, char**)
73    - Kind:            LF_PROCEDURE
74      Procedure:       
75        ReturnType:      3           # void
76        CallConv:        NearC
77        Options:         [ None ]
78        ParameterCount:  2
79        ArgumentList:    4099        # (int, char**)
80    # TypeIndex: 4102 (0x1006)
81    # FooBar *
82    - Kind:            LF_POINTER
83      Pointer:         
84        ReferentType:    4100       # FooBar
85        Attrs:           32778
86    # TypeIndex: 4103 (0x1007)
87    # int (int, char**)
88    - Kind:            LF_PROCEDURE
89      Procedure:       
90        ReturnType:      116         # int
91        CallConv:        NearC
92        Options:         [ None ]
93        ParameterCount:  2
94        ArgumentList:    4099        # (int, char**)
95    # TypeIndex: 4104 (0x1008)
96    - Kind:            LF_MFUNCTION
97      MemberFunction:  
98        ReturnType:      3                      # void
99        ClassType:       4100                   # struct FooBar
100        ThisType:        4102                   # FooBar *
101        CallConv:        ThisCall
102        Options:         [ None, Constructor ]
103        ParameterCount:  1
104        ArgumentList:    4096                   # (int)
105        ThisPointerAdjustment: 0
106IpiStream:
107  Records:
108    # TypeIndex: 4096 (0x1000)
109    # struct FooBar
110    - Kind:            LF_UDT_MOD_SRC_LINE
111      UdtModSourceLine: 
112        UDT:             4100       # struct FooBar
113        SourceFile:      0          # We don't support this yet
114        LineNumber:      0
115        Module:          0          # We don't support this yet
116    # TypeIndex: 4097 (0x1001)
117    # int main2(int, char **)
118    - Kind:            LF_FUNC_ID
119      FuncId:          
120        ParentScope:     0
121        FunctionType:    4103       # int main2(int, char**)
122        Name:            main2
123    # TypeIndex: 4098 (0x1002)
124    # void foo(int, char **)
125    - Kind:            LF_FUNC_ID
126      FuncId:          
127        ParentScope:     0
128        FunctionType:    4101       # void main2(int, char**)
129        Name:            foo
130    # TypeIndex: 4099 (0x1003)
131    # void FooBar::FooMethod2(int)
132    - Kind:            LF_MFUNC_ID
133      MemberFuncId:    
134        ClassType:       4100       # struct FooBar
135        FunctionType:    4104       # void FooBar::FooMethod2(int)
136        Name:            FooMethod2
137    # TypeIndex: 4100 (0x1004)
138    # int main(int, char **)
139    - Kind:            LF_FUNC_ID
140      FuncId:          
141        ParentScope:     0
142        FunctionType:    4103       # int main(int, char**)
143        Name:            main
144