debug-info-same-line.cpp revision 5ca58a0aca0320b8980921e8ee55112668817939
15ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// RUN: %clang_cc1 -g -emit-llvm -o - %s | FileCheck %s 25ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl 35ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// Make sure that clang outputs distinct debug info for a function 45ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// that is inlined twice on the same line. Otherwise it would appear 55ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// as if the function was only inlined once. 600df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl 700df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl#define INLINE inline __attribute__((always_inline)) 800df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl 900df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian PrantlINLINE int 1000df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantlproduct (int x, int y) 1100df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl{ 1200df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl int result = x * y; 1300df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl return result; 1400df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl} 1500df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl 1600df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian PrantlINLINE int 1700df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantlsum (int a, int b) 1800df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl{ 1900df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl int result = a + b; 2000df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl return result; 2100df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl} 2200df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl 2300df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantlint 2400df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantlstrange_max (int m, int n) 2500df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl{ 2600df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl if (m > n) 2700df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl return m; 2800df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl else if (n > m) 2900df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl return n; 3000df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl else 3100df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl return 0; 3200df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl} 3300df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl 3400df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantlint 3500df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantlfoo (int i, int j) 3600df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl{ 3700df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl if (strange_max (i, j) == i) 3800df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl return product (i, j); 3900df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl else if (strange_max (i, j) == j) 4000df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl return sum (i, j); 4100df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl else 4200df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl return product (sum (i, i), sum (j, j)); 4300df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl} 4400df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl 4500df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantlint 4600df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantlmain(int argc, char const *argv[]) 4700df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl{ 4800df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl 4900df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl int array[3]; 5000df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl 5100df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl array[0] = foo (1238, 78392); 5200df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl array[1] = foo (379265, 23674); 5300df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl array[2] = foo (872934, 234); 5400df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl 5500df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl return 0; 5600df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl} 5700df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl 585ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// CHECK: define i32 @_Z3fooii(i32 %i, i32 %j) 595ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// i 605ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// CHECK: call void @llvm.dbg.declare 615ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// j 625ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// CHECK: call void @llvm.dbg.declare 635ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// x 645ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// CHECK: call void @llvm.dbg.declare 655ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// y 665ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// CHECK: call void @llvm.dbg.declare 675ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// result 685ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// CHECK: call void @llvm.dbg.declare 695ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl 705ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// CHECK: call void @llvm.dbg.declare(metadata !{i32* %{{.*}}}, metadata ![[A_MD:[0-9]+]]), !dbg ![[A_DI:[0-9]+]] 715ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// CHECK: call void @llvm.dbg.declare(metadata !{i32* %{{.*}}}, metadata ![[B_MD:[0-9]+]]), !dbg ![[B_DI:[0-9]+]] 725ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// result 735ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// CHECK: call void @llvm.dbg.declare 745ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl 755ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// We want to see a distinct !dbg node. 765ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// CHECK-NOT: call void @llvm.dbg.declare(metadata !{i32* %{{.*}}}, metadata ![[A_MD]]), !dbg ![[A_DI]] 775ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// CHECK: call void @llvm.dbg.declare(metadata !{i32* %{{.*}}}, metadata ![[A_MD]]), !dbg !{{.*}} 785ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// CHECK-NOT: call void @llvm.dbg.declare(metadata !{i32* %{{.*}}}, metadata ![[B_MD]]), !dbg ![[B_DI]] 795ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// CHECK: call void @llvm.dbg.declare(metadata !{i32* %{{.*}}}, metadata ![[B_MD]]), !dbg !{{.*}} 805ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// result 815ca58a0aca0320b8980921e8ee55112668817939Adrian Prantl// CHECK: call void @llvm.dbg.declare 82