xref: /llvm-project/llvm/test/tools/llvm-debuginfo-analyzer/COFF/01-coff-compare-logical-elements.test (revision e7950fceb1e7f82370f6cff80b258e552eb410a6)
1; REQUIRES: x86-registered-target
2
3; Test case 1 - General options
4
5; test.cpp
6;  1  using INTPTR = const int *;
7;  2  int foo(INTPTR ParamPtr, unsigned ParamUnsigned, bool ParamBool) {
8;  3    if (ParamBool) {
9;  4      typedef int INTEGER;
10;  5      const INTEGER CONSTANT = 7;
11;  6      return CONSTANT;
12;  7    }
13;  8    return ParamUnsigned;
14;  9  }
15
16; Compare mode - Logical view.
17; The output shows in view form the 'missing (-), added (+)' elements,
18; giving more context by swapping the reference and target object files.
19
20; RUN: llvm-debuginfo-analyzer --attribute=level \
21; RUN:                         --compare=types \
22; RUN:                         --report=view \
23; RUN:                         --print=symbols,types \
24; RUN:                         %p/Inputs/test-codeview-clang.o \
25; RUN:                         %p/Inputs/test-codeview-msvc.o 2>&1 | \
26; RUN: FileCheck --strict-whitespace -check-prefix=ONE %s
27
28; ONE:      Reference: 'test-codeview-clang.o'
29; ONE-NEXT: Target:    'test-codeview-msvc.o'
30; ONE-EMPTY:
31; ONE-NEXT: Logical View:
32; ONE-NEXT:  [000]           {File} 'test-codeview-clang.o'
33; ONE-EMPTY:
34; ONE-NEXT:  [001]             {CompileUnit} 'test.cpp'
35; ONE-NEXT:  [002]               {TypeAlias} 'INTPTR' -> '* const int'
36; ONE-NEXT:  [002]               {Function} extern not_inlined 'foo' -> 'int'
37; ONE-NEXT: -[003]                 {TypeAlias} 'INTEGER' -> 'int'
38; ONE-NEXT:  [003]                 {Parameter} 'ParamBool' -> 'bool'
39; ONE-NEXT:  [003]                 {Parameter} 'ParamPtr' -> '* const int'
40; ONE-NEXT:  [003]                 {Parameter} 'ParamUnsigned' -> 'unsigned'
41; ONE-NEXT:  [003]                 {Block}
42; ONE-NEXT:  [004]                   {Variable} 'CONSTANT' -> 'const int'
43; ONE-NEXT: +[004]                   {TypeAlias} 'INTEGER' -> 'int'
44
45; Compare mode - Logical elements.
46; The output shows in tabular form the 'missing (-), added (+)' elements,
47; giving more context by swapping the reference and target object files.
48
49; RUN: llvm-debuginfo-analyzer --attribute=level \
50; RUN:                         --compare=types \
51; RUN:                         --report=list \
52; RUN:                         --print=symbols,types,summary \
53; RUN:                         %p/Inputs/test-codeview-clang.o \
54; RUN:                         %p/Inputs/test-codeview-msvc.o 2>&1 | \
55; RUN: FileCheck --strict-whitespace -check-prefix=TWO %s
56
57; TWO:      Reference: 'test-codeview-clang.o'
58; TWO-NEXT: Target:    'test-codeview-msvc.o'
59; TWO-EMPTY:
60; TWO-NEXT: (1) Missing Types:
61; TWO-NEXT: -[003]           {TypeAlias} 'INTEGER' -> 'int'
62; TWO-EMPTY:
63; TWO-NEXT: (1) Added Types:
64; TWO-NEXT: +[004]           {TypeAlias} 'INTEGER' -> 'int'
65; TWO-EMPTY:
66; TWO-NEXT: ----------------------------------------
67; TWO-NEXT: Element   Expected    Missing      Added
68; TWO-NEXT: ----------------------------------------
69; TWO-NEXT: Scopes           4          0          0
70; TWO-NEXT: Symbols          0          0          0
71; TWO-NEXT: Types            2          1          1
72; TWO-NEXT: Lines            0          0          0
73; TWO-NEXT: ----------------------------------------
74; TWO-NEXT: Total            6          1          1
75
76; Changing the 'Reference' and 'Target' order:
77
78; RUN: llvm-debuginfo-analyzer --attribute=level \
79; RUN:                         --compare=types \
80; RUN:                         --report=list \
81; RUN:                         --print=symbols,types,summary \
82; RUN:                         %p/Inputs/test-codeview-msvc.o \
83; RUN:                         %p/Inputs/test-codeview-clang.o 2>&1 | \
84; RUN: FileCheck --strict-whitespace -check-prefix=THR %s
85
86; THR:      Reference: 'test-codeview-msvc.o'
87; THR-NEXT: Target:    'test-codeview-clang.o'
88; THR-EMPTY:
89; THR-NEXT: (1) Missing Types:
90; THR-NEXT: -[004]           {TypeAlias} 'INTEGER' -> 'int'
91; THR-EMPTY:
92; THR-NEXT: (1) Added Types:
93; THR-NEXT: +[003]           {TypeAlias} 'INTEGER' -> 'int'
94; THR-EMPTY:
95; THR-NEXT: ----------------------------------------
96; THR-NEXT: Element   Expected    Missing      Added
97; THR-NEXT: ----------------------------------------
98; THR-NEXT: Scopes           4          0          0
99; THR-NEXT: Symbols          0          0          0
100; THR-NEXT: Types            2          1          1
101; THR-NEXT: Lines            0          0          0
102; THR-NEXT: ----------------------------------------
103; THR-NEXT: Total            6          1          1
104