1d8584475SCarlos Alberto Enciso; REQUIRES: x86-registered-target 2d8584475SCarlos Alberto Enciso 34f06d46fSCarlos Alberto Enciso; Test case 5 - Incorrect lexical scope variable. 44f06d46fSCarlos Alberto Enciso 54f06d46fSCarlos Alberto Enciso; pr-43860.cpp 64f06d46fSCarlos Alberto Enciso; 1 #include "definitions.h" 74f06d46fSCarlos Alberto Enciso; 2 forceinline int InlineFunction(int Param) { 84f06d46fSCarlos Alberto Enciso; 3 int Var_1 = Param; 94f06d46fSCarlos Alberto Enciso; 4 { 104f06d46fSCarlos Alberto Enciso; 5 int Var_2 = Param + Var_1; 114f06d46fSCarlos Alberto Enciso; 6 Var_1 = Var_2; 124f06d46fSCarlos Alberto Enciso; 7 } 134f06d46fSCarlos Alberto Enciso; 8 return Var_1; 144f06d46fSCarlos Alberto Enciso; 9 } 154f06d46fSCarlos Alberto Enciso; 10 164f06d46fSCarlos Alberto Enciso; 11 int test(int Param_1, int Param_2) { 174f06d46fSCarlos Alberto Enciso; 12 int A = Param_1; 184f06d46fSCarlos Alberto Enciso; 13 A += InlineFunction(Param_2); 194f06d46fSCarlos Alberto Enciso; 14 return A; 204f06d46fSCarlos Alberto Enciso; 15 } 214f06d46fSCarlos Alberto Enciso 224f06d46fSCarlos Alberto Enciso; The above test is used to illustrate a variable issue found in the 234f06d46fSCarlos Alberto Enciso; Clang compiler. 244f06d46fSCarlos Alberto Enciso; PR43860: https://bugs.llvm.org/show_bug.cgi?id=43860 254f06d46fSCarlos Alberto Enciso; PR43205: https://github.com/llvm/llvm-project/issues/43205 264f06d46fSCarlos Alberto Enciso 274f06d46fSCarlos Alberto Enciso; In the following logical views, we can see that the DWARF debug 284f06d46fSCarlos Alberto Enciso; information generated by the Clang compiler shows the variables 294f06d46fSCarlos Alberto Enciso; 'Var_1' and 'Var_2' are at the same lexical scope (4) in the function 304f06d46fSCarlos Alberto Enciso; 'InlineFuction'. 314f06d46fSCarlos Alberto Enciso; The DWARF generated by GCC/Clang show those variables at the correct 324f06d46fSCarlos Alberto Enciso; lexical scope: '3' and '4' respectively. 334f06d46fSCarlos Alberto Enciso 344f06d46fSCarlos Alberto Enciso; RUN: llvm-debuginfo-analyzer --attribute=level,format,producer \ 354f06d46fSCarlos Alberto Enciso; RUN: --output-sort=name \ 364f06d46fSCarlos Alberto Enciso; RUN: --print=symbols \ 374f06d46fSCarlos Alberto Enciso; RUN: %p/Inputs/pr-43860-dwarf-clang.o \ 384f06d46fSCarlos Alberto Enciso; RUN: %p/Inputs/pr-43860-dwarf-gcc.o 2>&1 | \ 394f06d46fSCarlos Alberto Enciso; RUN: FileCheck --strict-whitespace -check-prefix=ONE %s 404f06d46fSCarlos Alberto Enciso 414f06d46fSCarlos Alberto Enciso; ONE: Logical View: 424f06d46fSCarlos Alberto Enciso; ONE-NEXT: [000] {File} 'pr-43860-dwarf-clang.o' -> elf64-x86-64 434f06d46fSCarlos Alberto Enciso; ONE-EMPTY: 444f06d46fSCarlos Alberto Enciso; ONE-NEXT: [001] {CompileUnit} 'pr-43860.cpp' 454f06d46fSCarlos Alberto Enciso; ONE-NEXT: [002] {Producer} 'clang version 15.0.0 {{.*}}' 46*fb376595SCarlos Alberto Enciso; ONE-NEXT: [002] 2 {Function} extern inlined 'InlineFunction' -> 'int' 474f06d46fSCarlos Alberto Enciso; ONE-NEXT: [003] {Block} 484f06d46fSCarlos Alberto Enciso; ONE-NEXT: [004] 5 {Variable} 'Var_2' -> 'int' 494f06d46fSCarlos Alberto Enciso; ONE-NEXT: [003] 2 {Parameter} 'Param' -> 'int' 504f06d46fSCarlos Alberto Enciso; ONE-NEXT: [003] 3 {Variable} 'Var_1' -> 'int' 514f06d46fSCarlos Alberto Enciso; ONE-NEXT: [002] 11 {Function} extern not_inlined 'test' -> 'int' 524f06d46fSCarlos Alberto Enciso; ONE-NEXT: [003] 12 {Variable} 'A' -> 'int' 53*fb376595SCarlos Alberto Enciso; ONE-NEXT: [003] 13 {InlinedFunction} inlined 'InlineFunction' -> 'int' 544f06d46fSCarlos Alberto Enciso; ONE-NEXT: [004] {Block} 554f06d46fSCarlos Alberto Enciso; ONE-NEXT: [005] {Variable} 'Var_2' -> 'int' 564f06d46fSCarlos Alberto Enciso; ONE-NEXT: [004] {Parameter} 'Param' -> 'int' 574f06d46fSCarlos Alberto Enciso; ONE-NEXT: [004] {Variable} 'Var_1' -> 'int' 584f06d46fSCarlos Alberto Enciso; ONE-NEXT: [003] 11 {Parameter} 'Param_1' -> 'int' 594f06d46fSCarlos Alberto Enciso; ONE-NEXT: [003] 11 {Parameter} 'Param_2' -> 'int' 604f06d46fSCarlos Alberto Enciso; ONE-EMPTY: 614f06d46fSCarlos Alberto Enciso; ONE-NEXT: Logical View: 624f06d46fSCarlos Alberto Enciso; ONE-NEXT: [000] {File} 'pr-43860-dwarf-gcc.o' -> elf64-x86-64 634f06d46fSCarlos Alberto Enciso; ONE-EMPTY: 644f06d46fSCarlos Alberto Enciso; ONE-NEXT: [001] {CompileUnit} 'pr-43860.cpp' 654f06d46fSCarlos Alberto Enciso; ONE-NEXT: [002] {Producer} 'GNU C++14 10.3.0 {{.*}}' 664f06d46fSCarlos Alberto Enciso; ONE-NEXT: [002] 2 {Function} extern declared_inlined 'InlineFunction' -> 'int' 674f06d46fSCarlos Alberto Enciso; ONE-NEXT: [003] {Block} 684f06d46fSCarlos Alberto Enciso; ONE-NEXT: [004] 5 {Variable} 'Var_2' -> 'int' 694f06d46fSCarlos Alberto Enciso; ONE-NEXT: [003] 2 {Parameter} 'Param' -> 'int' 704f06d46fSCarlos Alberto Enciso; ONE-NEXT: [003] 3 {Variable} 'Var_1' -> 'int' 714f06d46fSCarlos Alberto Enciso; ONE-NEXT: [002] 11 {Function} extern not_inlined 'test' -> 'int' 724f06d46fSCarlos Alberto Enciso; ONE-NEXT: [003] 12 {Variable} 'A' -> 'int' 734f06d46fSCarlos Alberto Enciso; ONE-NEXT: [003] 13 {InlinedFunction} declared_inlined 'InlineFunction' -> 'int' 744f06d46fSCarlos Alberto Enciso; ONE-NEXT: [004] {Block} 754f06d46fSCarlos Alberto Enciso; ONE-NEXT: [005] {Variable} 'Var_2' -> 'int' 764f06d46fSCarlos Alberto Enciso; ONE-NEXT: [004] {Parameter} 'Param' -> 'int' 774f06d46fSCarlos Alberto Enciso; ONE-NEXT: [004] {Variable} 'Var_1' -> 'int' 784f06d46fSCarlos Alberto Enciso; ONE-NEXT: [003] 11 {Parameter} 'Param_1' -> 'int' 794f06d46fSCarlos Alberto Enciso; ONE-NEXT: [003] 11 {Parameter} 'Param_2' -> 'int' 804f06d46fSCarlos Alberto Enciso 814f06d46fSCarlos Alberto Enciso; Using the selection facilities, we can produce a simple tabular output 824f06d46fSCarlos Alberto Enciso; showing just the logical elements that have in their name the 'var' 834f06d46fSCarlos Alberto Enciso; pattern. The logical view is sorted by the variables name. 844f06d46fSCarlos Alberto Enciso 854f06d46fSCarlos Alberto Enciso; RUN: llvm-debuginfo-analyzer --attribute=level,format \ 864f06d46fSCarlos Alberto Enciso; RUN: --output-sort=name \ 874f06d46fSCarlos Alberto Enciso; RUN: --select-regex --select-nocase \ 884f06d46fSCarlos Alberto Enciso; RUN: --select=Var \ 894f06d46fSCarlos Alberto Enciso; RUN: --report=list \ 904f06d46fSCarlos Alberto Enciso; RUN: --print=symbols \ 914f06d46fSCarlos Alberto Enciso; RUN: %p/Inputs/pr-43860-*.o 2>&1 | \ 924f06d46fSCarlos Alberto Enciso; RUN: FileCheck --strict-whitespace -check-prefix=TWO %s 934f06d46fSCarlos Alberto Enciso 944f06d46fSCarlos Alberto Enciso; TWO: Logical View: 954f06d46fSCarlos Alberto Enciso; TWO-NEXT: [000] {File} 'pr-43860-dwarf-clang.o' -> elf64-x86-64 964f06d46fSCarlos Alberto Enciso; TWO-EMPTY: 974f06d46fSCarlos Alberto Enciso; TWO-NEXT: [001] {CompileUnit} 'pr-43860.cpp' 984f06d46fSCarlos Alberto Enciso; TWO-NEXT: [004] {Variable} 'Var_1' -> 'int' 994f06d46fSCarlos Alberto Enciso; TWO-NEXT: [003] 3 {Variable} 'Var_1' -> 'int' 1004f06d46fSCarlos Alberto Enciso; TWO-NEXT: [005] {Variable} 'Var_2' -> 'int' 1014f06d46fSCarlos Alberto Enciso; TWO-NEXT: [004] 5 {Variable} 'Var_2' -> 'int' 1024f06d46fSCarlos Alberto Enciso; TWO-EMPTY: 1034f06d46fSCarlos Alberto Enciso; TWO-NEXT: Logical View: 1044f06d46fSCarlos Alberto Enciso; TWO-NEXT: [000] {File} 'pr-43860-dwarf-gcc.o' -> elf64-x86-64 1054f06d46fSCarlos Alberto Enciso; TWO-EMPTY: 1064f06d46fSCarlos Alberto Enciso; TWO-NEXT: [001] {CompileUnit} 'pr-43860.cpp' 1074f06d46fSCarlos Alberto Enciso; TWO-NEXT: [004] {Variable} 'Var_1' -> 'int' 1084f06d46fSCarlos Alberto Enciso; TWO-NEXT: [003] 3 {Variable} 'Var_1' -> 'int' 1094f06d46fSCarlos Alberto Enciso; TWO-NEXT: [005] {Variable} 'Var_2' -> 'int' 1104f06d46fSCarlos Alberto Enciso; TWO-NEXT: [004] 5 {Variable} 'Var_2' -> 'int' 111