Index: llvm/lib/Fuzzer/FuzzerTracePC.h
===================================================================
--- llvm/lib/Fuzzer/FuzzerTracePC.h
+++ llvm/lib/Fuzzer/FuzzerTracePC.h
@@ -156,7 +156,7 @@
   std::set<uintptr_t> ObservedPCs;
 
   ValueBitMap ValueProfileMap;
-  uintptr_t InitialStack;
+  uintptr_t InitialStack = 0;
 };
 
 template <class Callback>
Index: llvm/lib/Fuzzer/FuzzerTracePC.cpp
===================================================================
--- llvm/lib/Fuzzer/FuzzerTracePC.cpp
+++ llvm/lib/Fuzzer/FuzzerTracePC.cpp
@@ -32,7 +32,7 @@
 uintptr_t __sancov_trace_pc_pcs[fuzzer::TracePC::kNumPCs];
 
 // Used by -fsanitize-coverage=stack-depth to track stack depth
-ATTRIBUTE_INTERFACE thread_local uintptr_t __sancov_lowest_stack;
+ATTRIBUTE_INTERFACE thread_local uintptr_t __sancov_lowest_stack = UINTPTR_MAX;
 
 namespace fuzzer {
 
@@ -344,7 +344,8 @@
 }
 
 void TracePC::RecordInitialStack() {
-  InitialStack = __sancov_lowest_stack;
+  if (InitialStack == 0)
+    InitialStack = __sancov_lowest_stack;
 }
 
 uintptr_t TracePC::GetMaxStackOffset() const {
Index: llvm/lib/Fuzzer/test/deep-recursion.test
===================================================================
--- /dev/null
+++ llvm/lib/Fuzzer/test/deep-recursion.test
@@ -0,0 +1,4 @@
+RUN: %cpp_compiler -fsanitize-coverage=stack-depth %S/DeepRecursionTest.cpp \
+RUN:     -o %t
+RUN: not %t -seed=1 -runs=100000000 2>&1 | FileCheck %s
+CHECK: ERROR: libFuzzer: deadly signal