[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