opnsense-ports/databases/mysql80-server/files/patch-llvm15-fix
Franco Fichtner 37fe4377ba */*: sync with upstream
Taken from: FreeBSD
2023-02-10 19:48:45 +01:00

103 lines
4.1 KiB
Text

From 69fb953b55474f32d0e1e35b043599c34e516349 Mon Sep 17 00:00:00 2001
From: Gabor Buella <gabor.buella@oracle.com>
Date: Sat, 12 Nov 2022 01:05:54 +0100
Subject: [PATCH] Bug #34638573 Compile MySQL with clang 15
Fixing two compile errors, that are triggered when using libcxx from LLVM15
https://reviews.llvm.org/D104002
std::unary_function is not available in libcxx under C++17, see:
https://en.cppreference.com/w/cpp/utility/functional/unary_function
Boost uses std::unary_function, but it has a workaround for using
Boost headers in C++17, triggered by the macro BOOST_NO_CXX98_FUNCTION_BASE
See:
https://www.boost.org/doc/libs/master/libs/config/doc/html/boost_config/boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_features_that_have_been_removed_from_the_standard_
https://reviews.llvm.org/D130538
A new assert in libcxx is triggered in include/varlen_sort.h
std::iterator_traits<varlen_iterator>::reference should match the return type of varlen_iterator::operator*()
include/c++/v1/__algorithm/iterator_operations.h:100:5: error: static assertion failed due to requirement 'is_same<varlen_element, varlen_element &>::value': It looks like your iterator's `iterator_traits<It>::reference` does not match the return type of dereferencing the iterator, i.e., calling `*it`. This is undefined behavior according to [input.iterators] and can lead to dangling reference issues at runtime, so we are flagging this.
static_assert(is_same<__deref_t<_Iter>, typename iterator_traits<__remove_cvref_t<_Iter> >::reference>::value,
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Fix a few warnings:
Remove some explicitly defined "=defau.t" constructors, destructors.
warning: definition of implicit copy assignment operator for 'Row' is deprecated because it has a user-declared destructor [-Wdeprecated-copy-with-dtor]
Mark a variable potentially unuses in tests (unuses when __aarch64__)
Change-Id: Iad346bd0cdb1d25d958377b9c7a0dd5da7a45fad
---
cmake/boost.cmake | 3 +++
include/varlen_sort.h | 5 +++--
storage/innobase/include/ddl0impl.h | 8 --------
unittest/gunit/innodb/ut0new-t.cc | 2 --
unittest/gunit/mysys_my_rdtsc-t.cc | 2 +-
5 files changed, 7 insertions(+), 13 deletions(-)
diff --git a/cmake/boost.cmake b/cmake/boost.cmake
index 64e5cd6a1950..e879484a9d9e 100644
--- cmake/boost.cmake
+++ cmake/boost.cmake
@@ -330,6 +330,9 @@ ELSE()
ENDIF()
IF(NOT WIN32)
+# Needed to use Boost header container_hash/hash.hpp in C++17
+ ADD_DEFINITIONS(-DBOOST_NO_CXX98_FUNCTION_BASE)
+
FILE(GLOB_RECURSE BOOST_PATCHES_LIST
RELATIVE ${BOOST_PATCHES_DIR}
${BOOST_PATCHES_DIR}/*.hpp
diff --git a/include/varlen_sort.h b/include/varlen_sort.h
index 433ab7e493b0..380274e418cf 100644
--- include/varlen_sort.h
+++ include/varlen_sort.h
@@ -184,8 +184,9 @@ namespace std {
// Required for Iterator.
template <>
-struct iterator_traits<varlen_iterator> : iterator_traits<varlen_element *> {};
-
+struct iterator_traits<varlen_iterator> : iterator_traits<varlen_element *> {
+ using reference = varlen_element;
+};
} // namespace std
/*
diff --git a/storage/innobase/include/ddl0impl.h b/storage/innobase/include/ddl0impl.h
index 2276c8d2f40d..0e5d8e428997 100644
--- storage/innobase/include/ddl0impl.h
+++ storage/innobase/include/ddl0impl.h
@@ -119,13 +119,5 @@ struct Fetch_sequence : public Context::FTS::Sequence {
/** Physical row context. */
struct Row {
- /** Constructor. */
- Row() = default;
-
- Row(const Row &) = default;
-
- /** Destructor. */
- ~Row() = default;
-
/** Build a row from a raw record.
@param[in,out] ctx DDL context.
@param[in,out] index Index the record belongs to.
diff --git a/unittest/gunit/mysys_my_rdtsc-t.cc b/unittest/gunit/mysys_my_rdtsc-t.cc
index 6bec618475fe..e8d2fe1662b6 100644
--- unittest/gunit/mysys_my_rdtsc-t.cc
+++ unittest/gunit/mysys_my_rdtsc-t.cc
@@ -113,7 +113,7 @@ TEST_F(RDTimeStampCounter, TestCycle) {
ulonglong t1 = my_timer_cycles();
ulonglong t2;
int i;
- int backward = 0;
+ int backward [[maybe_unused]] = 0;
int nonzero = 0;
for (i = 0; i < LOOP_COUNT; i++) {