1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
; 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
|