Skip to content

Commit

Permalink
Bug #34638573 Compile MySQL with clang 15
Browse files Browse the repository at this point in the history
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
  • Loading branch information
GBuella committed Nov 15, 2022
1 parent 813cf98 commit 69fb953
Show file tree
Hide file tree
Showing 5 changed files with 7 additions and 13 deletions.
3 changes: 3 additions & 0 deletions cmake/boost.cmake
Expand Up @@ -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
Expand Down
5 changes: 3 additions & 2 deletions include/varlen_sort.h
Expand Up @@ -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

/*
Expand Down
8 changes: 0 additions & 8 deletions storage/innobase/include/ddl0impl.h
Expand Up @@ -182,14 +182,6 @@ struct Fetch_sequence : public Context::FTS::Sequence {
/** Physical row context. This is a wrapper class for a clustered index
record. It can be used to build a record for a given index. */
struct Row {
/** Constructor. */
Row() = default;

Row(const Row &) = default;

/** Destructor. */
~Row() = default;

/** Build a row for the given index using the available clustered index
record (member m_rec).
@param[in,out] ctx DDL context.
Expand Down
2 changes: 0 additions & 2 deletions unittest/gunit/innodb/ut0new-t.cc
Expand Up @@ -69,8 +69,6 @@ TEST(ut0new, edgecases) {

struct Pod_type {
Pod_type(int _x, int _y) : x(_x), y(_y) {}
Pod_type(const Pod_type &) = default;
~Pod_type() = default;
int x;
int y;
};
Expand Down
2 changes: 1 addition & 1 deletion unittest/gunit/mysys_my_rdtsc-t.cc
Expand Up @@ -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++) {
Expand Down

0 comments on commit 69fb953

Please sign in to comment.