Add cdb test for inline line tables

This creates an integration test for inlined call line tables, and in
particular, ones that are discontiguous. We've had issues in the past
with discontiguous inline line tables, and until r362429 LLD didn't
write the inlinees section into the PDB.

The test was reduced from https://crbug.com/965670

Reviewers: thakis

Differential Revision: https://reviews.llvm.org/D62758

llvm-svn: 362431
This commit is contained in:
Reid Kleckner 2019-06-03 18:24:55 +00:00
parent c061b99c5b
commit 479568e645

View File

@ -0,0 +1,45 @@
// RUN: %clang_cl -MD -Od %s -o %t.exe -fuse-ld=lld -Z7
// RUN: grep DE[B]UGGER: %s | sed -e 's/.*DE[B]UGGER: //' > %t.script
// RUN: %cdb -cf %t.script %t.exe | FileCheck %s --check-prefixes=DEBUGGER,CHECK
//
// RUN: %clang_cl -MD -O2 %s -o %t.exe -fuse-ld=lld -Z7
// RUN: grep DE[B]UGGER: %s | sed -e 's/.*DE[B]UGGER: //' > %t.script
// RUN: %cdb -cf %t.script %t.exe | FileCheck %s --check-prefixes=DEBUGGER,CHECK
// This code is structured to have an early exit with an epilogue in the middle
// of the function, which creates a gap between the beginning of the inlined
// code region and the end. Previously, this confused cdb.
volatile bool shutting_down_ = true;
volatile bool tearing_down_ = true;
void __attribute__((optnone)) setCrashString(const char *) {}
void __attribute__((optnone)) doTailCall() {}
extern "C" void __declspec(noreturn) abort();
void __forceinline inlineCrashFrame() {
if (shutting_down_ || tearing_down_) {
setCrashString("crashing");
__debugbreak();
// MSVC lays out calls to abort out of line, gets the layout we want.
abort();
}
}
void __declspec(noinline) callerOfInlineCrashFrame(bool is_keeping_alive) {
if (is_keeping_alive)
inlineCrashFrame();
else
doTailCall();
}
int __attribute__((optnone)) main() {
callerOfInlineCrashFrame(true);
}
// DEBUGGER: g
// DEBUGGER: k3
// CHECK: {{.*}}!inlineCrashFrame
// CHECK: {{.*}}!callerOfInlineCrashFrame
// CHECK: {{.*}}!main
// DEBUGGER: q