| ; REQUIRES: x86-registered-target |
| |
| ; For the given test case: |
| |
| ; // ThreadLocalStorage.cpp |
| ; 1 thread_local int TGlobal = 0; |
| ; 2 int NGlobal = 1; |
| ; 3 void test() { |
| ; 4 thread_local int TLocal = 0; |
| ; 5 TGlobal = 1; |
| ; 6 |
| ; 7 int NLocal = 0; |
| ; 8 NGlobal = 2; |
| ; 9 } |
| |
| ; The llvm-debuginfo-analyzer crashes when producing a logical view for |
| ; the object file generated using the following commands: |
| ; |
| ; clang++ -Xclang -disable-O0-optnone -Xclang -disable-llvm-passes |
| ; -fno-discard-value-names -emit-llvm -S -g -O0 |
| ; ThreadLocalStorage.cpp -o ThreadLocalStorage.ll |
| ; llc --filetype=obj ThreadLocalStorage.ll -o ThreadLocalStorage.o |
| ; |
| ; llvm-debuginfo-analyzer --attribute=location --print=symbols |
| ; ThreadLocalStorage.o |
| |
| ; RUN: llc --filetype=obj \ |
| ; RUN: %p/Inputs/ThreadLocalStorage.ll -o %t.ThreadLocalStorage.o |
| |
| ; RUN: llvm-debuginfo-analyzer --attribute=location \ |
| ; RUN: --print=symbols \ |
| ; RUN: %t.ThreadLocalStorage.o 2>&1 | \ |
| ; RUN: FileCheck --strict-whitespace %s |
| |
| ; CHECK: Logical View: |
| ; CHECK: {File} '{{.*}}threadlocalstorage.o' |
| ; CHECK-EMPTY: |
| ; CHECK: {CompileUnit} 'threadlocalstorage.cpp' |
| ; CHECK: 1 {Variable} extern 'TGlobal' -> 'int' |
| ; CHECK: {Location} |
| ; CHECK: {Entry} const_u 0, gnu_push_tls_address |
| ; CHECK: 2 {Variable} extern 'NGlobal' -> 'int' |
| ; CHECK: {Location} |
| ; CHECK: {Entry} addrx 0 |
| ; CHECK: 3 {Function} extern not_inlined 'test' -> 'void' |
| ; CHECK: 4 {Variable} 'TLocal' -> 'int' |
| ; CHECK: {Location} |
| ; CHECK: {Entry} const_u 0, gnu_push_tls_address |
| ; CHECK: 7 {Variable} 'NLocal' -> 'int' |
| ; CHECK: {Location} |
| ; CHECK: {Entry} fbreg -4 |