[PATCH] D62758: Add cdb test for inline line tables

Reid Kleckner via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri May 31 16:11:39 PDT 2019


rnk created this revision.
rnk added a reviewer: thakis.
Herald added a subscriber: eraman.
Herald added a project: LLVM.

This creates an integration test for inlined call line tables, and in
particular, ones that are discontiguous.

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

Depends on D62701 <https://reviews.llvm.org/D62701>


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D62758

Files:
  debuginfo-tests/win_cdb/inline-line-gap.cpp


Index: debuginfo-tests/win_cdb/inline-line-gap.cpp
===================================================================
--- /dev/null
+++ debuginfo-tests/win_cdb/inline-line-gap.cpp
@@ -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


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D62758.202504.patch
Type: text/x-patch
Size: 1705 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190531/c769a14f/attachment.bin>


More information about the llvm-commits mailing list