187aa9c9eSJonas Devlieghere# RUN: rm -rf %t.dir
287aa9c9eSJonas Devlieghere# RUN: mkdir %t.dir
387aa9c9eSJonas Devlieghere# RUN: cd %t.dir
4*b587ca93SFangrui Song# RUN: yaml2obj %p/Inputs/split-dwarf5-debug-stroffsets-file1.dwo.yaml -o %t.dir/file1.dwo
5*b587ca93SFangrui Song# RUN: yaml2obj %p/Inputs/split-dwarf5-debug-stroffsets-file2.dwo.yaml -o %t.dir/file2.dwo
6*b587ca93SFangrui Song# RUN: yaml2obj %p/Inputs/split-dwarf5-debug-stroffsets-main.yaml      -o %t.dir/test
787aa9c9eSJonas Devlieghere# RUN: lldb-test breakpoints %t.dir/test %s | FileCheck %s
887aa9c9eSJonas Devlieghere
987aa9c9eSJonas Devlieghere# This test checks that source code location is shown correctly
1087aa9c9eSJonas Devlieghere# when split DWARF 5 is used and both DWO/executable file contains
1187aa9c9eSJonas Devlieghere# .debug_str_offsets/.debug_str_offsets.dwo sections.
1287aa9c9eSJonas Devlieghere# Used clang version 8.0.0 (trunk 347299)
1387aa9c9eSJonas Devlieghere#
1487aa9c9eSJonas Devlieghere# split-dwarf5-debug-stroffsets-file1.dwo.yaml, split-dwarf5-debug-stroffsets-file2.dwo.yaml
1587aa9c9eSJonas Devlieghere# and split-dwarf5-debug-stroffsets-main.yaml are reduced yaml files produces
1687aa9c9eSJonas Devlieghere# from the DWO files and the corresponding executable.
1787aa9c9eSJonas Devlieghere#
1887aa9c9eSJonas Devlieghere# Code:
1987aa9c9eSJonas Devlieghere# // decl.h
2087aa9c9eSJonas Devlieghere# struct struct1 {
2187aa9c9eSJonas Devlieghere#   ~struct1();
2287aa9c9eSJonas Devlieghere#   static void f();
2387aa9c9eSJonas Devlieghere# };
2487aa9c9eSJonas Devlieghere#
2587aa9c9eSJonas Devlieghere# struct struct2 {
2687aa9c9eSJonas Devlieghere#   ~struct2();
2787aa9c9eSJonas Devlieghere#   static void f();
2887aa9c9eSJonas Devlieghere# };
2987aa9c9eSJonas Devlieghere#
3087aa9c9eSJonas Devlieghere# int g();
3187aa9c9eSJonas Devlieghere#
3287aa9c9eSJonas Devlieghere# // file1.cpp
3387aa9c9eSJonas Devlieghere# #include "decls.h"
3487aa9c9eSJonas Devlieghere#
3587aa9c9eSJonas Devlieghere# int g() {
3687aa9c9eSJonas Devlieghere#   return 1;
3787aa9c9eSJonas Devlieghere# }
3887aa9c9eSJonas Devlieghere#
3987aa9c9eSJonas Devlieghere# struct1::~struct1() {
4087aa9c9eSJonas Devlieghere#   int x = g();
4187aa9c9eSJonas Devlieghere# }
4287aa9c9eSJonas Devlieghere#
4387aa9c9eSJonas Devlieghere# void struct1::f() {}
4487aa9c9eSJonas Devlieghere#
4587aa9c9eSJonas Devlieghere# float test() {
4687aa9c9eSJonas Devlieghere#  return 0.0f;
4787aa9c9eSJonas Devlieghere# }
4887aa9c9eSJonas Devlieghere#
4987aa9c9eSJonas Devlieghere# int main() {
5087aa9c9eSJonas Devlieghere#   struct1::f();
5187aa9c9eSJonas Devlieghere#   struct2::f();
5287aa9c9eSJonas Devlieghere#
5387aa9c9eSJonas Devlieghere#   struct1 s1;
5487aa9c9eSJonas Devlieghere#   struct2 s2;
5587aa9c9eSJonas Devlieghere#
5687aa9c9eSJonas Devlieghere#   test();
5787aa9c9eSJonas Devlieghere#
5887aa9c9eSJonas Devlieghere#   return 0;
5987aa9c9eSJonas Devlieghere# }
6087aa9c9eSJonas Devlieghere#
6187aa9c9eSJonas Devlieghere# // file2.cpp
6287aa9c9eSJonas Devlieghere#
6387aa9c9eSJonas Devlieghere#
6487aa9c9eSJonas Devlieghere# #include "decls.h"
6587aa9c9eSJonas Devlieghere#
6687aa9c9eSJonas Devlieghere# struct2::~struct2() {
6787aa9c9eSJonas Devlieghere#   int x = g();
6887aa9c9eSJonas Devlieghere# }
6987aa9c9eSJonas Devlieghere#
7087aa9c9eSJonas Devlieghere# void struct2::f() {}
7187aa9c9eSJonas Devlieghere#
7287aa9c9eSJonas Devlieghere#
7387aa9c9eSJonas Devlieghere# Invocation used was:
7487aa9c9eSJonas Devlieghere# clang++ file1.cpp -o file1.o -g -fno-rtti -c -gdwarf-5 -gsplit-dwarf -ffunction-sections
7587aa9c9eSJonas Devlieghere# clang++ file2.cpp -o file2.o -g -fno-rtti -c -gdwarf-5 -gsplit-dwarf -ffunction-sections
7687aa9c9eSJonas Devlieghere# clang++ file1.o file2.o -g -fno-rtti -gdwarf-5 -o test -gsplit-dwarf -ffunction-sections
7787aa9c9eSJonas Devlieghere
7887aa9c9eSJonas Devlieghereb struct1::f
7987aa9c9eSJonas Devlieghere# CHECK-LABEL: b struct1::f
8087aa9c9eSJonas Devlieghere# CHECK: Address: {{.*}}struct1::f() + 4 at file1.cpp:11:20
8187aa9c9eSJonas Devlieghere
8287aa9c9eSJonas Devlieghereb struct2::f
8387aa9c9eSJonas Devlieghere# CHECK-LABEL: b struct2::f
8487aa9c9eSJonas Devlieghere# CHECK: Address: {{.*}}struct2::f() + 4 at file2.cpp:7:20
85