git: 9f33a321916b - main - databases/mysql80-server: Fix build with LLVM15

From: Jochen Neumeister <joneum_at_FreeBSD.org>
Date: Sun, 12 Feb 2023 01:25:26 UTC
The branch main has been updated by joneum:

URL: https://cgit.FreeBSD.org/ports/commit/?id=9f33a321916b70feece270f78b03eb081a7cefbf

commit 9f33a321916b70feece270f78b03eb081a7cefbf
Author:     Guido Falsi <madpilot@FreeBSD.org>
AuthorDate: 2023-02-12 01:22:17 +0000
Commit:     Jochen Neumeister <joneum@FreeBSD.org>
CommitDate: 2023-02-12 01:24:41 +0000

    databases/mysql80-server: Fix build with LLVM15
    
    This Patch fix an LLVM15 Problem on CURRENT
    
    PR:     269442
    Reported by:    madpilot
    Sponsored by:   Netzkommune GmbH
---
 databases/mysql80-server/files/patch-llvm15-fix | 103 ++++++++++++++++++++++++
 1 file changed, 103 insertions(+)

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++) {