1; REQUIRES: x86-registered-target
2
3; Incorrect function matching during comparison.
4; https://github.com/llvm/llvm-project/issues/57040
5
6; Output generated by g++ (Debian 11.3.0-3) 11.3.0
7
8; .debug_info contents:
9; format = DWARF32, version = 0x0005, unit_type = DW_UT_compile
10;
11; DW_TAG_compile_unit
12;   DW_TAG_subprogram ("foo")
13;     DW_AT_decl_file	(1)
14;
15;     DW_TAG_formal_parameter ("ParamPtr")
16;       DW_AT_decl_file	(1)
17;
18; .debug_line contents:
19; Line table prologue:
20;           format: DWARF32, version: 5
21; include_directories[0] = "/usr/local/google/home/aheejin/test/llvm-dva"
22; file_names[0]: name: "test.cpp" dir_index: 0
23; file_names[1]: name: "test.cpp" dir_index: 0
24
25; The values for DW_AT_decl_file are 1-indexed.
26
27; test.cpp
28;  1  using INTPTR = const int *;
29;  2  int foo(INTPTR ParamPtr, unsigned ParamUnsigned, bool ParamBool) {
30;  3    if (ParamBool) {
31;  4      typedef int INTEGER;
32;  5      const INTEGER CONSTANT = 7;
33;  6      return CONSTANT;
34;  7    }
35;  8    return ParamUnsigned;
36;  9  }
37
38; RUN: llvm-debuginfo-analyzer --attribute=level,producer \
39; RUN:                         --compare=types \
40; RUN:                         --report=view \
41; RUN:                         --print=symbols,types \
42; RUN:                         %p/Inputs/pr-57040-test-dwarf-clang.o \
43; RUN:                         %p/Inputs/pr-57040-test-dwarf-gcc.o 2>&1 | \
44; RUN: FileCheck --strict-whitespace -check-prefix=ONE %s
45
46; ONE:      Reference: 'pr-57040-test-dwarf-clang.o'
47; ONE-NEXT: Target:    'pr-57040-test-dwarf-gcc.o'
48; ONE-EMPTY:
49; ONE-NEXT: Logical View:
50; ONE-NEXT:  [000]           {File} 'pr-57040-test-dwarf-clang.o'
51; ONE-EMPTY:
52; ONE-NEXT:  [001]             {CompileUnit} 'test.cpp'
53; ONE-NEXT:  [002]               {Producer} 'clang version 14.0.6'
54; ONE-NEXT:  [002]     1         {TypeAlias} 'INTPTR' -> '* const int'
55; ONE-NEXT:  [002]     2         {Function} extern not_inlined 'foo' -> 'int'
56; ONE-NEXT:  [003]                 {Block}
57; ONE-NEXT:  [004]     5             {Variable} 'CONSTANT' -> 'const INTEGER'
58; ONE-NEXT: +[004]     4             {TypeAlias} 'INTEGER' -> 'int'
59; ONE-NEXT:  [003]     2           {Parameter} 'ParamBool' -> 'bool'
60; ONE-NEXT:  [003]     2           {Parameter} 'ParamPtr' -> 'INTPTR'
61; ONE-NEXT:  [003]     2           {Parameter} 'ParamUnsigned' -> 'unsigned int'
62; ONE-NEXT: -[003]     4           {TypeAlias} 'INTEGER' -> 'int'
63
64; RUN: llvm-debuginfo-analyzer --attribute=level \
65; RUN:                         --compare=types \
66; RUN:                         --report=list \
67; RUN:                         --print=symbols,types,summary \
68; RUN:                         %p/Inputs/pr-57040-test-dwarf-clang.o \
69; RUN:                         %p/Inputs/pr-57040-test-dwarf-gcc.o 2>&1 | \
70; RUN: FileCheck --strict-whitespace -check-prefix=TWO %s
71
72; TWO:      Reference: 'pr-57040-test-dwarf-clang.o'
73; TWO-NEXT: Target:    'pr-57040-test-dwarf-gcc.o'
74; TWO-EMPTY:
75; TWO-NEXT: (1) Missing Types:
76; TWO-NEXT: -[003]     4     {TypeAlias} 'INTEGER' -> 'int'
77; TWO-EMPTY:
78; TWO-NEXT: (1) Added Types:
79; TWO-NEXT: +[004]     4     {TypeAlias} 'INTEGER' -> 'int'
80; TWO-EMPTY:
81; TWO-NEXT: ----------------------------------------
82; TWO-NEXT: Element   Expected    Missing      Added
83; TWO-NEXT: ----------------------------------------
84; TWO-NEXT: Scopes           4          0          0
85; TWO-NEXT: Symbols          0          0          0
86; TWO-NEXT: Types            2          1          1
87; TWO-NEXT: Lines            0          0          0
88; TWO-NEXT: ----------------------------------------
89; TWO-NEXT: Total            6          1          1
90
91; Changing the 'Reference' and 'Target' order:
92
93; RUN: llvm-debuginfo-analyzer --attribute=level,producer \
94; RUN:                         --compare=types \
95; RUN:                         --report=view \
96; RUN:                         --print=symbols,types \
97; RUN:                         %p/Inputs/pr-57040-test-dwarf-gcc.o \
98; RUN:                         %p/Inputs/pr-57040-test-dwarf-clang.o 2>&1 | \
99; RUN: FileCheck --strict-whitespace -check-prefix=THR %s
100
101; THR:      Reference: 'pr-57040-test-dwarf-gcc.o'
102; THR-NEXT: Target:    'pr-57040-test-dwarf-clang.o'
103; THR-EMPTY:
104; THR-NEXT: Logical View:
105; THR-NEXT:  [000]           {File} 'pr-57040-test-dwarf-gcc.o'
106; THR-EMPTY:
107; THR-NEXT:  [001]             {CompileUnit} 'test.cpp'
108; THR-NEXT:  [002]               {Producer} 'GNU C++17 11.3.0 {{.*}}'
109; THR-NEXT:  [002]     1         {TypeAlias} 'INTPTR' -> '* const int'
110; THR-NEXT:  [002]     2         {Function} extern not_inlined 'foo' -> 'int'
111; THR-NEXT:  [003]                 {Block}
112; THR-NEXT: -[004]     4             {TypeAlias} 'INTEGER' -> 'int'
113; THR-NEXT:  [004]     5             {Variable} 'CONSTANT' -> 'const INTEGER'
114; THR-NEXT:  [003]     2           {Parameter} 'ParamBool' -> 'bool'
115; THR-NEXT:  [003]     2           {Parameter} 'ParamPtr' -> 'INTPTR'
116; THR-NEXT:  [003]     2           {Parameter} 'ParamUnsigned' -> 'unsigned int'
117; THR-NEXT: +[003]     4           {TypeAlias} 'INTEGER' -> 'int'
118
119; RUN: llvm-debuginfo-analyzer --attribute=level \
120; RUN:                         --compare=types \
121; RUN:                         --report=list \
122; RUN:                         --print=symbols,types,summary \
123; RUN:                         %p/Inputs/pr-57040-test-dwarf-gcc.o \
124; RUN:                         %p/Inputs/pr-57040-test-dwarf-clang.o 2>&1 | \
125; RUN: FileCheck --strict-whitespace -check-prefix=FOU %s
126
127; FOU:      Reference: 'pr-57040-test-dwarf-gcc.o'
128; FOU-NEXT: Target:    'pr-57040-test-dwarf-clang.o'
129; FOU-EMPTY:
130; FOU-NEXT: (1) Missing Types:
131; FOU-NEXT: -[004]     4     {TypeAlias} 'INTEGER' -> 'int'
132; FOU-EMPTY:
133; FOU-NEXT: (1) Added Types:
134; FOU-NEXT: +[003]     4     {TypeAlias} 'INTEGER' -> 'int'
135; FOU-EMPTY:
136; FOU-NEXT: ----------------------------------------
137; FOU-NEXT: Element   Expected    Missing      Added
138; FOU-NEXT: ----------------------------------------
139; FOU-NEXT: Scopes           4          0          0
140; FOU-NEXT: Symbols          0          0          0
141; FOU-NEXT: Types            2          1          1
142; FOU-NEXT: Lines            0          0          0
143; FOU-NEXT: ----------------------------------------
144; FOU-NEXT: Total            6          1          1
145