debug-info-same-line.cpp revision 00df5eaa9f4f7cc0809fd47c95311b532fbe63c6
100df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl// RUN: %clang_cc1 -g -emit-obj -o %t %s 200df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl// RUN: llvm-dwarfdump %t | FileCheck %s 300df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl// In the attached test case a post-r166236 clang coalesces two 400df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl// instances of an inlined function in a way that makes it appear as 500df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl// 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 5800df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl// CHECK: DW_TAG_inlined_subroutine 5900df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl// CHECK: DW_TAG_inlined_subroutine 6000df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl// CHECK: DW_TAG_inlined_subroutine 6100df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl// CHECK: DW_TAG_inlined_subroutine 6200df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl// CHECK-NOT: DW_TAG_inlined_subroutine 6300df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl// CHECK: DW_AT_call_line {{.*}} (0x2a) 6400df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl// CHECK: DW_TAG_inlined_subroutine 6500df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl// CHECK-NOT: DW_TAG_inlined_subroutine 6600df5eaa9f4f7cc0809fd47c95311b532fbe63c6Adrian Prantl// CHECK: DW_AT_call_line {{.*}} (0x2a) 67