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