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