debug-info-same-line.cpp revision b38b3cd64c24500cbea9e6dfe774407dd6ef4a79
1// RUN: %clang_cc1 -g -emit-llvm -o - %s | FileCheck %s 2 3// Make sure that clang outputs distinct debug info for a function 4// that is inlined twice on the same line. Otherwise it would appear 5// as if the function was only inlined once. 6 7#define INLINE inline __attribute__((always_inline)) 8 9INLINE int 10product (int x, int y) 11{ 12 int result = x * y; 13 return result; 14} 15 16INLINE int 17sum (int a, int b) 18{ 19 int result = a + b; 20 return result; 21} 22 23int 24strange_max (int m, int n) 25{ 26 if (m > n) 27 return m; 28 else if (n > m) 29 return n; 30 else 31 return 0; 32} 33 34int 35foo (int i, int j) 36{ 37 if (strange_max (i, j) == i) 38 return product (i, j); 39 else if (strange_max (i, j) == j) 40 return sum (i, j); 41 else 42 return product (sum (i, i), sum (j, j)); 43} 44 45int 46main(int argc, char const *argv[]) 47{ 48 49 int array[3]; 50 51 array[0] = foo (1238, 78392); 52 array[1] = foo (379265, 23674); 53 array[2] = foo (872934, 234); 54 55 return 0; 56} 57 58// CHECK: define {{.*}} @_Z3fooii 59// i 60// CHECK: call void @llvm.dbg.declare 61// j 62// CHECK: call void @llvm.dbg.declare 63// x 64// CHECK: call void @llvm.dbg.declare 65// y 66// CHECK: call void @llvm.dbg.declare 67// result 68// CHECK: call void @llvm.dbg.declare 69 70// CHECK: call void @llvm.dbg.declare(metadata !{i32* %{{.*}}}, metadata ![[A_MD:[0-9]+]]), !dbg ![[A_DI:[0-9]+]] 71// CHECK: call void @llvm.dbg.declare(metadata !{i32* %{{.*}}}, metadata ![[B_MD:[0-9]+]]), !dbg ![[B_DI:[0-9]+]] 72// result 73// CHECK: call void @llvm.dbg.declare 74 75// We want to see a distinct !dbg node. 76// CHECK-NOT: call void @llvm.dbg.declare(metadata !{i32* %{{.*}}}, metadata ![[A_MD]]), !dbg ![[A_DI]] 77// CHECK: call void @llvm.dbg.declare(metadata !{i32* %{{.*}}}, metadata ![[A_MD]]), !dbg !{{.*}} 78// CHECK-NOT: call void @llvm.dbg.declare(metadata !{i32* %{{.*}}}, metadata ![[B_MD]]), !dbg ![[B_DI]] 79// CHECK: call void @llvm.dbg.declare(metadata !{i32* %{{.*}}}, metadata ![[B_MD]]), !dbg !{{.*}} 80// result 81// CHECK: call void @llvm.dbg.declare 82