mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-19 00:41:43 +00:00
Semiwrap / meson / robotpy define `NDEBUG` when building their software in all modes, while `allwplib` only does it when building debug. This causes the size of `DenseMap` to differ between the shared libraries built here, and the extension modules built in `mostrobotpy`, causing segfaults when you try to execute code that uses `DenseMap`. This is not a problem with the robotpy code in `allwpilib`, because bazel uses the exact same compiler flags when building the shared libraries and pybind11 extensions.
56 lines
2.3 KiB
Diff
56 lines
2.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: PJ Reiniger <pj.reiniger@gmail.com>
|
|
Date: Sun, 8 May 2022 16:46:20 -0400
|
|
Subject: [PATCH 18/35] Prefer fmtlib
|
|
|
|
---
|
|
llvm/lib/Support/ErrorHandling.cpp | 20 ++++++--------------
|
|
1 file changed, 6 insertions(+), 14 deletions(-)
|
|
|
|
diff --git a/llvm/lib/Support/ErrorHandling.cpp b/llvm/lib/Support/ErrorHandling.cpp
|
|
index d0fd67bd3c0d4cf33922cdda042531424d277951..c153b91391fe63e819e4907ac98d2ee26228107a 100644
|
|
--- a/llvm/lib/Support/ErrorHandling.cpp
|
|
+++ b/llvm/lib/Support/ErrorHandling.cpp
|
|
@@ -22,7 +22,7 @@
|
|
#include "llvm/Support/Signals.h"
|
|
#include "llvm/Support/Threading.h"
|
|
#include "llvm/Support/WindowsError.h"
|
|
-#include "llvm/Support/raw_ostream.h"
|
|
+#include "wpi/util/print.hpp"
|
|
#include <cassert>
|
|
#include <cstdlib>
|
|
#include <mutex>
|
|
@@ -93,15 +93,7 @@ void llvm::report_fatal_error(std::string_view Reason, bool GenCrashDiag) {
|
|
if (handler) {
|
|
handler(handlerData, std::string{Reason}.c_str(), GenCrashDiag);
|
|
} else {
|
|
- // Blast the result out to stderr. We don't try hard to make sure this
|
|
- // succeeds (e.g. handling EINTR) and we can't use errs() here because
|
|
- // raw ostreams can call report_fatal_error.
|
|
- SmallVector<char, 64> Buffer;
|
|
- raw_svector_ostream OS(Buffer);
|
|
- OS << "LLVM ERROR: " << Reason << "\n";
|
|
- std::string_view MessageStr = OS.str();
|
|
- ssize_t written = ::write(2, MessageStr.data(), MessageStr.size());
|
|
- (void)written; // If something went wrong, we deliberately just give up.
|
|
+ wpi::util::print(stderr, "LLVM ERROR: {}\n", Reason);
|
|
}
|
|
|
|
// If we reached here, we are failing ungracefully. Run the interrupt handlers
|
|
@@ -177,11 +169,11 @@ void llvm::llvm_unreachable_internal(const char *msg, const char *file,
|
|
// llvm_unreachable is intended to be used to indicate "impossible"
|
|
// situations, and not legitimate runtime errors.
|
|
if (msg)
|
|
- dbgs() << msg << "\n";
|
|
- dbgs() << "UNREACHABLE executed";
|
|
+ wpi::util::print(stderr, "{}\n", msg);
|
|
+ std::fputs("UNREACHABLE executed", stderr);
|
|
if (file)
|
|
- dbgs() << " at " << file << ":" << line;
|
|
- dbgs() << "!\n";
|
|
+ wpi::util::print(stderr, " at {}:{}", file, line);
|
|
+ wpi::util::print(stderr, "!\n");
|
|
abort();
|
|
#ifdef LLVM_BUILTIN_UNREACHABLE
|
|
// Windows systems and possibly others don't declare abort() to be noreturn,
|