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.
202 lines
7.4 KiB
Diff
202 lines
7.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: PJ Reiniger <pj.reiniger@gmail.com>
|
|
Date: Sun, 8 May 2022 13:34:07 -0400
|
|
Subject: [PATCH 08/35] Add compiler warning pragmas
|
|
|
|
---
|
|
llvm/include/llvm/ADT/FunctionExtras.h | 11 +++++++++++
|
|
llvm/include/llvm/ADT/SmallVector.h | 8 ++++++++
|
|
llvm/include/llvm/Support/MathExtras.h | 9 +++++++++
|
|
llvm/include/llvm/Support/MemAlloc.h | 13 +++++++++++++
|
|
llvm/lib/Support/raw_ostream.cpp | 4 ++++
|
|
llvm/unittests/ADT/DenseMapTest.cpp | 4 ++++
|
|
llvm/unittests/ADT/FunctionExtrasTest.cpp | 6 ++++++
|
|
llvm/unittests/ADT/SmallVectorTest.cpp | 4 ++++
|
|
llvm/unittests/Support/AlignOfTest.cpp | 7 +++----
|
|
9 files changed, 62 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/llvm/include/llvm/ADT/FunctionExtras.h b/llvm/include/llvm/ADT/FunctionExtras.h
|
|
index df7fe3e19462ebecd30f7a9d006027c75751de5b..28a9ba756a4075987fbee28c6ed6387e99dfd14b 100644
|
|
--- a/llvm/include/llvm/ADT/FunctionExtras.h
|
|
+++ b/llvm/include/llvm/ADT/FunctionExtras.h
|
|
@@ -56,6 +56,13 @@ namespace llvm {
|
|
/// It can hold functions with a non-const operator(), like mutable lambdas.
|
|
template <typename FunctionT> class unique_function;
|
|
|
|
+// GCC warns on OutOfLineStorage
|
|
+#if defined(__GNUC__) && !defined(__clang__)
|
|
+#pragma GCC diagnostic push
|
|
+#pragma GCC diagnostic ignored "-Warray-bounds"
|
|
+#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
|
|
+#endif
|
|
+
|
|
namespace detail {
|
|
|
|
template <typename T>
|
|
@@ -414,6 +421,10 @@ public:
|
|
}
|
|
};
|
|
|
|
+#if defined(__GNUC__) && !defined(__clang__)
|
|
+#pragma GCC diagnostic pop
|
|
+#endif
|
|
+
|
|
} // end namespace llvm
|
|
|
|
#endif // LLVM_ADT_FUNCTIONEXTRAS_H
|
|
diff --git a/llvm/include/llvm/ADT/SmallVector.h b/llvm/include/llvm/ADT/SmallVector.h
|
|
index 2232b741d5359a129adb0e5b3f0f70110c38e90d..3cab284f5b6105956d6fff49a27d37482a3c321d 100644
|
|
--- a/llvm/include/llvm/ADT/SmallVector.h
|
|
+++ b/llvm/include/llvm/ADT/SmallVector.h
|
|
@@ -14,6 +14,14 @@
|
|
#ifndef LLVM_ADT_SMALLVECTOR_H
|
|
#define LLVM_ADT_SMALLVECTOR_H
|
|
|
|
+// This file uses std::memcpy() to copy std::pair<unsigned int, unsigned int>.
|
|
+// That type is POD, but the standard doesn't guarantee that. GCC doesn't treat
|
|
+// the type as POD so it throws a warning. We want to consider this a warning
|
|
+// instead of an error.
|
|
+#if __GNUC__ >= 8
|
|
+#pragma GCC diagnostic warning "-Wclass-memaccess"
|
|
+#endif
|
|
+
|
|
#include "llvm/Support/Compiler.h"
|
|
#include <algorithm>
|
|
#include <cassert>
|
|
diff --git a/llvm/include/llvm/Support/MathExtras.h b/llvm/include/llvm/Support/MathExtras.h
|
|
index 5db59bb848024fca622b2919efd773d185a93f1e..b2c62d833038f92d2621ca2e6838d0d6b3b48760 100644
|
|
--- a/llvm/include/llvm/Support/MathExtras.h
|
|
+++ b/llvm/include/llvm/Support/MathExtras.h
|
|
@@ -232,6 +232,11 @@ inline uint64_t maxUIntN(uint64_t N) {
|
|
return UINT64_MAX >> (64 - N);
|
|
}
|
|
|
|
+#ifdef _WIN32
|
|
+#pragma warning(push)
|
|
+#pragma warning(disable : 4146)
|
|
+#endif
|
|
+
|
|
/// Gets the minimum value for a N-bit signed integer.
|
|
inline int64_t minIntN(int64_t N) {
|
|
assert(N <= 64 && "integer width out of range");
|
|
@@ -241,6 +246,10 @@ inline int64_t minIntN(int64_t N) {
|
|
return UINT64_C(1) + ~(UINT64_C(1) << (N - 1));
|
|
}
|
|
|
|
+#ifdef _WIN32
|
|
+#pragma warning(pop)
|
|
+#endif
|
|
+
|
|
/// Gets the maximum value for a N-bit signed integer.
|
|
inline int64_t maxIntN(int64_t N) {
|
|
assert(N <= 64 && "integer width out of range");
|
|
diff --git a/llvm/include/llvm/Support/MemAlloc.h b/llvm/include/llvm/Support/MemAlloc.h
|
|
index f3f378b7697a18f57b189c5322b080fe23d45bec..0028e871f6a05baf6172c60c602b8b26e5f116c6 100644
|
|
--- a/llvm/include/llvm/Support/MemAlloc.h
|
|
+++ b/llvm/include/llvm/Support/MemAlloc.h
|
|
@@ -22,6 +22,14 @@
|
|
|
|
namespace llvm {
|
|
|
|
+#ifdef _WIN32
|
|
+#pragma warning(push)
|
|
+// Warning on NONNULL, report is not known to abort
|
|
+#pragma warning(disable : 6387)
|
|
+#pragma warning(disable : 28196)
|
|
+#pragma warning(disable : 28183)
|
|
+#endif
|
|
+
|
|
LLVM_ATTRIBUTE_RETURNS_NONNULL inline void *safe_malloc(size_t Sz) {
|
|
void *Result = std::malloc(Sz);
|
|
if (Result == nullptr) {
|
|
@@ -84,4 +92,9 @@ allocate_buffer(size_t Size, size_t Alignment);
|
|
void deallocate_buffer(void *Ptr, size_t Size, size_t Alignment);
|
|
|
|
} // namespace llvm
|
|
+
|
|
+#ifdef _WIN32
|
|
+#pragma warning(pop)
|
|
+#endif
|
|
+
|
|
#endif
|
|
diff --git a/llvm/lib/Support/raw_ostream.cpp b/llvm/lib/Support/raw_ostream.cpp
|
|
index 681b6fdc95eb4fda4f23d0b381b83417d82b3b78..a75abb7a4abf71e214ea6342352cfbaa5ce3ea27 100644
|
|
--- a/llvm/lib/Support/raw_ostream.cpp
|
|
+++ b/llvm/lib/Support/raw_ostream.cpp
|
|
@@ -10,6 +10,10 @@
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
+#ifdef _WIN32
|
|
+#define _CRT_NONSTDC_NO_WARNINGS
|
|
+#endif
|
|
+
|
|
#include "llvm/Support/raw_ostream.h"
|
|
#include "llvm/ADT/StringExtras.h"
|
|
#include "llvm/Config/config.h"
|
|
diff --git a/llvm/unittests/ADT/DenseMapTest.cpp b/llvm/unittests/ADT/DenseMapTest.cpp
|
|
index e93e18423507655ce8275a0718d8e5d01915985f..b930a21f8b43b64835436fcd27f4802a7987827f 100644
|
|
--- a/llvm/unittests/ADT/DenseMapTest.cpp
|
|
+++ b/llvm/unittests/ADT/DenseMapTest.cpp
|
|
@@ -6,6 +6,10 @@
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
+#if defined(__GNUC__) && !defined(__clang__)
|
|
+#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
|
|
+#endif
|
|
+
|
|
#include "llvm/ADT/DenseMap.h"
|
|
#include "CountCopyAndMove.h"
|
|
#include "llvm/ADT/DenseMapInfo.h"
|
|
diff --git a/llvm/unittests/ADT/FunctionExtrasTest.cpp b/llvm/unittests/ADT/FunctionExtrasTest.cpp
|
|
index 777c5784949fd3c07bbbcef8dc3fc8e5764896a9..3777eedff54639f0380218eaad767f27f1958a67 100644
|
|
--- a/llvm/unittests/ADT/FunctionExtrasTest.cpp
|
|
+++ b/llvm/unittests/ADT/FunctionExtrasTest.cpp
|
|
@@ -330,6 +330,12 @@ TEST(UniqueFunctionTest, InlineStorageWorks) {
|
|
UniqueFunctionWithInlineStorage(&UniqueFunctionWithInlineStorage);
|
|
}
|
|
|
|
+
|
|
+// GCC warns that val in CountCopyAndMove is uninitialized
|
|
+#if defined(__GNUC__) && !defined(__clang__)
|
|
+#pragma GCC diagnostic push
|
|
+#pragma GCC diagnostic ignored "-Wuninitialized"
|
|
+#endif
|
|
// Check that the moved-from captured state is properly destroyed during
|
|
// move construction/assignment.
|
|
TEST(UniqueFunctionTest, MovedFromStateIsDestroyedCorrectly) {
|
|
diff --git a/llvm/unittests/ADT/SmallVectorTest.cpp b/llvm/unittests/ADT/SmallVectorTest.cpp
|
|
index 7029038d18d433cef987bedbfa4fda269b24fb8f..f8c37820ef9fdfe0af067f5aa8d2297ed15e73bc 100644
|
|
--- a/llvm/unittests/ADT/SmallVectorTest.cpp
|
|
+++ b/llvm/unittests/ADT/SmallVectorTest.cpp
|
|
@@ -17,6 +17,10 @@
|
|
#include <span>
|
|
#include <stdarg.h>
|
|
|
|
+#if defined(__GNUC__)
|
|
+#pragma GCC diagnostic ignored "-Wpedantic"
|
|
+#endif
|
|
+
|
|
using namespace llvm;
|
|
|
|
namespace {
|
|
diff --git a/llvm/unittests/Support/AlignOfTest.cpp b/llvm/unittests/Support/AlignOfTest.cpp
|
|
index f84895c18602d3936d623ed79c5d9689cd57cc91..6a50205b143b7ff553066f048a45bf4e1ecc475b 100644
|
|
--- a/llvm/unittests/Support/AlignOfTest.cpp
|
|
+++ b/llvm/unittests/Support/AlignOfTest.cpp
|
|
@@ -31,10 +31,9 @@ namespace {
|
|
#pragma clang diagnostic ignored "-Wunknown-pragmas"
|
|
#pragma clang diagnostic ignored "-Winaccessible-base"
|
|
#elif ((__GNUC__ * 100) + __GNUC_MINOR__) >= 402
|
|
-// Pragma based warning suppression was introduced in GGC 4.2. Additionally
|
|
-// this warning is "enabled by default". The warning still appears if -Wall is
|
|
-// suppressed. Apparently GCC suppresses it when -w is specifed, which is odd.
|
|
-#pragma GCC diagnostic warning "-w"
|
|
+#pragma GCC diagnostic warning "-Wunknown-pragmas"
|
|
+#pragma GCC diagnostic warning "-Winaccessible-base"
|
|
+#pragma GCC diagnostic warning "-Wunused-function"
|
|
#endif
|
|
|
|
// Define some fixed alignment types to use in these tests.
|