diff mbox series

[committed] libphobos: Remove unused variables in gcc.backtrace.

Message ID 20210930164328.2838062-1-ibuclaw@gdcproject.org
State New
Headers show
Series [committed] libphobos: Remove unused variables in gcc.backtrace. | expand

Commit Message

Iain Buclaw Sept. 30, 2021, 4:43 p.m. UTC
Hi,

This patch simplifies how core runtime constructs the LibBacktrace
object in the event of a segfault during unittests.

The core.runtime module always overrides the default parameter value for
constructor calls.  MaxAlignment is not required because a class can be
created on the stack with the `scope' keyword.

Bootstrapped and regression tested on x86_64-linux-gnu/-m32/-mx32, and
committed to mainline.

Regards
Iain

---
libphobos/ChangeLog:

	* libdruntime/core/runtime.d (runModuleUnitTests): Use scope to new
	LibBacktrace on the stack.
	* libdruntime/gcc/backtrace.d (FIRSTFRAME): Remove.
	(LibBacktrace.MaxAlignment): Remove.
	(LibBacktrace.this): Remove default initialization of firstFrame.
	(UnwindBacktrace.this): Likewise.
---
 libphobos/libdruntime/core/runtime.d  | 14 +++-----------
 libphobos/libdruntime/gcc/backtrace.d | 24 ++----------------------
 2 files changed, 5 insertions(+), 33 deletions(-)
diff mbox series

Patch

diff --git a/libphobos/libdruntime/core/runtime.d b/libphobos/libdruntime/core/runtime.d
index 848b607ae69..5fc99046d23 100644
--- a/libphobos/libdruntime/core/runtime.d
+++ b/libphobos/libdruntime/core/runtime.d
@@ -483,17 +483,9 @@  extern (C) bool runModuleUnitTests()
             fprintf(stderr, "Segmentation fault while running unittests:\n");
             fprintf(stderr, "----------------\n");
 
-            enum alignment = LibBacktrace.MaxAlignment;
-            enum classSize = __traits(classInstanceSize, LibBacktrace);
-
-            void[classSize + alignment] bt_store = void;
-            void* alignedAddress = cast(byte*)((cast(size_t)(bt_store.ptr + alignment - 1))
-                & ~(alignment - 1));
-
-            (alignedAddress[0 .. classSize]) = typeid(LibBacktrace).initializer[];
-            auto bt = cast(LibBacktrace)(alignedAddress);
-            // First frame is LibBacktrace ctor. Second is signal handler, but include that for now
-            bt.__ctor(1);
+            // First frame is LibBacktrace ctor. Second is signal handler,
+            // but include that for now
+            scope bt = new LibBacktrace(1);
 
             foreach (size_t i, const(char[]) msg; bt)
                 fprintf(stderr, "%s\n", msg.ptr ? msg.ptr : "???");
diff --git a/libphobos/libdruntime/gcc/backtrace.d b/libphobos/libdruntime/gcc/backtrace.d
index 8f5582d7469..3c4d65f417f 100644
--- a/libphobos/libdruntime/gcc/backtrace.d
+++ b/libphobos/libdruntime/gcc/backtrace.d
@@ -24,24 +24,6 @@  module gcc.backtrace;
 
 import gcc.libbacktrace;
 
-version (Posix)
-{
-    // NOTE: The first 5 frames with the current implementation are
-    //       inside core.runtime and the object code, so eliminate
-    //       these for readability.  The alternative would be to
-    //       exclude the first N frames that are in a list of
-    //       mangled function names.
-    private enum FIRSTFRAME = 5;
-}
-else
-{
-    // NOTE: On Windows, the number of frames to exclude is based on
-    //       whether the exception is user or system-generated, so
-    //       it may be necessary to exclude a list of function names
-    //       instead.
-    private enum FIRSTFRAME = 0;
-}
-
 // Max size per line of the traceback.
 private enum MAX_BUFSIZE = 1536;
 
@@ -205,8 +187,6 @@  static if (BACKTRACE_SUPPORTED && !BACKTRACE_USES_MALLOC)
     // FIXME: state is never freed as libbacktrace doesn't provide a free function...
     public class LibBacktrace : Throwable.TraceInfo
     {
-        enum MaxAlignment = (void*).alignof;
-
         static void initLibBacktrace()
         {
             if (!initialized)
@@ -216,7 +196,7 @@  static if (BACKTRACE_SUPPORTED && !BACKTRACE_USES_MALLOC)
             }
         }
 
-        this(int firstFrame = FIRSTFRAME)
+        this(int firstFrame)
         {
             _firstFrame = firstFrame;
 
@@ -365,7 +345,7 @@  else
      */
     public class UnwindBacktrace : Throwable.TraceInfo
     {
-        this(int firstFrame = FIRSTFRAME)
+        this(int firstFrame)
         {
             _firstFrame = firstFrame;
             _callstack = getBacktrace();