aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuido Falsi <madpilot@FreeBSD.org>2023-02-12 01:22:17 +0000
committerJochen Neumeister <joneum@FreeBSD.org>2023-02-12 01:24:41 +0000
commit9f33a321916b70feece270f78b03eb081a7cefbf (patch)
treea757a37d040f48d0e85398275505b45fbe56ad4b
parent909032bc67293b5debcd0f6bac7b41084ce14f20 (diff)
downloadports-9f33a321916b70feece270f78b03eb081a7cefbf.tar.gz
ports-9f33a321916b70feece270f78b03eb081a7cefbf.zip
databases/mysql80-server: Fix build with LLVM15
This Patch fix an LLVM15 Problem on CURRENT PR: 269442 Reported by: madpilot Sponsored by: Netzkommune GmbH
-rw-r--r--databases/mysql80-server/files/patch-llvm15-fix103
1 files changed, 103 insertions, 0 deletions
diff --git a/databases/mysql80-server/files/patch-llvm15-fix b/databases/mysql80-server/files/patch-llvm15-fix
new file mode 100644
index 000000000000..0d16a0d93f68
--- /dev/null
+++ b/databases/mysql80-server/files/patch-llvm15-fix
@@ -0,0 +1,103 @@
+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++) {