1*87aa9c9eSJonas Devlieghere // clang-format off 2*87aa9c9eSJonas Devlieghere // REQUIRES: lld 3*87aa9c9eSJonas Devlieghere 4*87aa9c9eSJonas Devlieghere // Test that we can set simple breakpoints using PDB on any platform. 5*87aa9c9eSJonas Devlieghere // RUN: %build --compiler=clang-cl --nodefaultlib -o %t.exe -- %s 6*87aa9c9eSJonas Devlieghere // RUN: env LLDB_USE_NATIVE_PDB_READER=1 %lldb -f %t.exe -s \ 7*87aa9c9eSJonas Devlieghere // RUN: %p/Inputs/break-by-function.lldbinit | FileCheck %s 8*87aa9c9eSJonas Devlieghere 9*87aa9c9eSJonas Devlieghere // Use different indentation style for each overload so that the starting 10*87aa9c9eSJonas Devlieghere // line is in a different place. 11*87aa9c9eSJonas Devlieghere 12*87aa9c9eSJonas Devlieghere int OvlGlobalFn(int X) { 13*87aa9c9eSJonas Devlieghere return X + 42; 14*87aa9c9eSJonas Devlieghere } 15*87aa9c9eSJonas Devlieghere 16*87aa9c9eSJonas Devlieghere int OvlGlobalFn(int X, int Y) { return X + Y + 42; } 17*87aa9c9eSJonas Devlieghere 18*87aa9c9eSJonas Devlieghere int OvlGlobalFn(int X, int Y, int Z) 19*87aa9c9eSJonas Devlieghere { 20*87aa9c9eSJonas Devlieghere return X + Y + Z + 42; 21*87aa9c9eSJonas Devlieghere } 22*87aa9c9eSJonas Devlieghere 23*87aa9c9eSJonas Devlieghere static int StaticFn(int X) { 24*87aa9c9eSJonas Devlieghere return X + 42; 25*87aa9c9eSJonas Devlieghere } 26*87aa9c9eSJonas Devlieghere 27*87aa9c9eSJonas Devlieghere int main(int argc, char **argv) { 28*87aa9c9eSJonas Devlieghere // Make sure they don't get optimized out. 29*87aa9c9eSJonas Devlieghere // Note the comments here, we want to make sure the line number reported 30*87aa9c9eSJonas Devlieghere // for the breakpoint is the first actual line of code. 31*87aa9c9eSJonas Devlieghere int Result = OvlGlobalFn(argc) + OvlGlobalFn(argc, argc) 32*87aa9c9eSJonas Devlieghere + OvlGlobalFn(argc, argc, argc) + StaticFn(argc); 33*87aa9c9eSJonas Devlieghere return Result; 34*87aa9c9eSJonas Devlieghere } 35*87aa9c9eSJonas Devlieghere 36*87aa9c9eSJonas Devlieghere 37*87aa9c9eSJonas Devlieghere // CHECK: (lldb) target create "{{.*}}break-by-function.cpp.tmp.exe" 38*87aa9c9eSJonas Devlieghere // CHECK: Current executable set to '{{.*}}break-by-function.cpp.tmp.exe' 39*87aa9c9eSJonas Devlieghere // CHECK: (lldb) break set -n main 40*87aa9c9eSJonas Devlieghere // CHECK: Breakpoint 1: where = break-by-function.cpp.tmp.exe`main + {{[0-9]+}} 41*87aa9c9eSJonas Devlieghere // CHECK: (lldb) break set -n OvlGlobalFn 42*87aa9c9eSJonas Devlieghere // CHECK: Breakpoint 2: 3 locations. 43*87aa9c9eSJonas Devlieghere // CHECK: (lldb) break set -n StaticFn 44*87aa9c9eSJonas Devlieghere // CHECK: Breakpoint 3: where = break-by-function.cpp.tmp.exe`StaticFn + {{[0-9]+}} 45*87aa9c9eSJonas Devlieghere // CHECK: (lldb) break set -n DoesntExist 46*87aa9c9eSJonas Devlieghere // CHECK: Breakpoint 4: no locations (pending). 47*87aa9c9eSJonas Devlieghere // CHECK: (lldb) break list 48*87aa9c9eSJonas Devlieghere // CHECK: Current breakpoints: 49*87aa9c9eSJonas Devlieghere // CHECK: 1: name = 'main', locations = 1 50*87aa9c9eSJonas Devlieghere // CHECK: 1.1: where = break-by-function.cpp.tmp.exe`main + {{[0-9]+}} 51*87aa9c9eSJonas Devlieghere // CHECK: 2: name = 'OvlGlobalFn', locations = 3 52*87aa9c9eSJonas Devlieghere // CHECK: 2.1: where = break-by-function.cpp.tmp.exe`OvlGlobalFn + {{[0-9]+}} 53*87aa9c9eSJonas Devlieghere // CHECK: 2.2: where = break-by-function.cpp.tmp.exe`OvlGlobalFn 54*87aa9c9eSJonas Devlieghere // CHECK: 2.3: where = break-by-function.cpp.tmp.exe`OvlGlobalFn + {{[0-9]+}} 55*87aa9c9eSJonas Devlieghere // CHECK: 3: name = 'StaticFn', locations = 1 56*87aa9c9eSJonas Devlieghere // CHECK: 3.1: where = break-by-function.cpp.tmp.exe`StaticFn + {{[0-9]+}} 57*87aa9c9eSJonas Devlieghere // CHECK: 4: name = 'DoesntExist', locations = 0 (pending) 58