[debuginfo-tests] r362431 - Add cdb test for inline line tables
Reid Kleckner via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 3 11:24:56 PDT 2019
Author: rnk
Date: Mon Jun 3 11:24:55 2019
New Revision: 362431
URL: http://llvm.org/viewvc/llvm-project?rev=362431&view=rev
Log:
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
Added:
debuginfo-tests/trunk/win_cdb/inline-line-gap.cpp
Added: debuginfo-tests/trunk/win_cdb/inline-line-gap.cpp
URL: http://llvm.org/viewvc/llvm-project/debuginfo-tests/trunk/win_cdb/inline-line-gap.cpp?rev=362431&view=auto
==============================================================================
--- debuginfo-tests/trunk/win_cdb/inline-line-gap.cpp (added)
+++ debuginfo-tests/trunk/win_cdb/inline-line-gap.cpp Mon Jun 3 11:24:55 2019
@@ -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
More information about the llvm-commits
mailing list