1# static volatile int do_mul; 2# static volatile int x, v; 3# 4# int foo () { 5# if (do_mul) x *= v; else x /= v; 6# return x; 7# } 8# 9# int main() { 10# return foo() + foo(); 11# } 12# Build as : clang -gmlt -fdebug-info-for-profiling -O2 discrim.c -o discrim 13 14RUN: llvm-symbolizer --verbose --print-address --obj=%p/Inputs/discrim < %p/Inputs/discrim.inp | FileCheck %s 15 16CHECK: ?? 17 18CHECK: 0x400590 19CHECK-NEXT: foo 20CHECK-NEXT: Filename: /tmp{{[\\/]}}discrim.c 21CHECK-NEXT: Function start filename: /tmp{{[\\/]}}discrim.c 22CHECK-NEXT: Function start line: 4 23CHECK-NEXT: Function start address: 0x400590 24CHECK-NEXT: Line: 5 25CHECK-NEXT: Column: 7 26CHECK-NEXT: main 27CHECK-NEXT: Filename: /tmp{{[\\/]}}discrim.c 28CHECK-NEXT: Function start filename: /tmp{{[\\/]}}discrim.c 29CHECK-NEXT: Function start line: 9 30CHECK-NEXT: Function start address: 0x400590 31CHECK-NEXT: Line: 10 32CHECK-NEXT: Column: 0 33 34CHECK: 0x4005a5 35CHECK-NEXT: foo 36CHECK-NEXT: Filename: /tmp{{[\\/]}}discrim.c 37CHECK-NEXT: Function start filename: /tmp{{[\\/]}}discrim.c 38CHECK-NEXT: Function start line: 4 39CHECK-NEXT: Function start address: 0x400590 40CHECK-NEXT: Line: 5 41CHECK-NEXT: Column: 17 42CHECK-NEXT: Discriminator: 2 43CHECK-NEXT: main 44CHECK-NEXT: Filename: /tmp{{[\\/]}}discrim.c 45CHECK-NEXT: Function start filename: /tmp{{[\\/]}}discrim.c 46CHECK-NEXT: Function start line: 9 47CHECK-NEXT: Function start address: 0x400590 48CHECK-NEXT: Line: 10 49CHECK-NEXT: Column: 0 50 51CHECK: 0x4005ad 52CHECK-NEXT: foo 53CHECK-NEXT: Filename: /tmp{{[\\/]}}discrim.c 54CHECK-NEXT: Function start filename: /tmp{{[\\/]}}discrim.c 55CHECK-NEXT: Function start line: 4 56CHECK-NEXT: Function start address: 0x400590 57CHECK-NEXT: Line: 0 58CHECK-NEXT: Column: 30 59CHECK-NEXT: Discriminator: 4 60CHECK-NEXT: main 61CHECK-NEXT: Filename: /tmp{{[\\/]}}discrim.c 62CHECK-NEXT: Function start filename: /tmp{{[\\/]}}discrim.c 63CHECK-NEXT: Function start line: 9 64CHECK-NEXT: Function start address: 0x400590 65CHECK-NEXT: Line: 10 66CHECK-NEXT: Column: 0 67 68CHECK: 0x4005b9 69CHECK-NEXT: foo 70CHECK-NEXT: Filename: /tmp{{[\\/]}}discrim.c 71CHECK-NEXT: Function start filename: /tmp{{[\\/]}}discrim.c 72CHECK-NEXT: Function start line: 4 73CHECK-NEXT: Function start address: 0x4005b9 74CHECK-NEXT: Line: 5 75CHECK-NEXT: Column: 7 76CHECK-NEXT: main 77CHECK-NEXT: Filename: /tmp{{[\\/]}}discrim.c 78CHECK-NEXT: Function start filename: /tmp{{[\\/]}}discrim.c 79CHECK-NEXT: Function start line: 9 80CHECK-NEXT: Function start address: 0x400590 81CHECK-NEXT: Line: 10 82CHECK-NEXT: Column: 0 83CHECK-NEXT: Discriminator: 2 84 85CHECK: 0x4005ce 86CHECK-NEXT: foo 87CHECK-NEXT: Filename: /tmp{{[\\/]}}discrim.c 88CHECK-NEXT: Function start filename: /tmp{{[\\/]}}discrim.c 89CHECK-NEXT: Function start line: 4 90CHECK-NEXT: Function start address: 0x4005b9 91CHECK-NEXT: Line: 5 92CHECK-NEXT: Column: 17 93CHECK-NEXT: Discriminator: 2 94CHECK-NEXT: main 95CHECK-NEXT: Filename: /tmp{{[\\/]}}discrim.c 96CHECK-NEXT: Function start filename: /tmp{{[\\/]}}discrim.c 97CHECK-NEXT: Function start line: 9 98CHECK-NEXT: Function start address: 0x400590 99CHECK-NEXT: Line: 10 100CHECK-NEXT: Column: 0 101CHECK-NEXT: Discriminator: 2 102 103CHECK: 0x4005d4 104CHECK-NEXT: foo 105CHECK-NEXT: Filename: /tmp{{[\\/]}}discrim.c 106CHECK-NEXT: Function start filename: /tmp{{[\\/]}}discrim.c 107CHECK-NEXT: Function start line: 4 108CHECK-NEXT: Function start address: 0x4005b9 109CHECK-NEXT: Line: 5 110CHECK-NEXT: Column: 30 111CHECK-NEXT: Discriminator: 4 112CHECK-NEXT: main 113CHECK-NEXT: Filename: /tmp{{[\\/]}}discrim.c 114CHECK-NEXT: Function start filename: /tmp{{[\\/]}}discrim.c 115CHECK-NEXT: Function start line: 9 116CHECK-NEXT: Function start address: 0x400590 117CHECK-NEXT: Line: 10 118CHECK-NEXT: Column: 0 119CHECK-NEXT: Discriminator: 2 120 121CHECK: ?? 122