From dd780fde447d3422ea5630f8a8779ac19ba06754 Mon Sep 17 00:00:00 2001
From: Victor Zverovich
Date: Sat, 15 Mar 2025 10:11:46 -0700
Subject: [PATCH] Add clang-3.4
---
.github/workflows/linux.yml | 71 ++++++++++++++++++++++++++++---------
doc/index.md | 2 +-
include/fmt/format.h | 2 +-
include/fmt/ranges.h | 8 ++---
test/ranges-test.cc | 5 ++-
5 files changed, 65 insertions(+), 23 deletions(-)
diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml
index 24e7f7da..6596924c 100644
--- a/.github/workflows/linux.yml
+++ b/.github/workflows/linux.yml
@@ -10,12 +10,13 @@ jobs:
runs-on: ubuntu-22.04
strategy:
matrix:
- cxx: [g++-4.9, g++-11, clang++-11]
+ cxx: [g++-4.9, g++-11, clang++-3.6, clang++-11]
build_type: [Debug, Release]
std: [11]
shared: [""]
include:
- cxx: g++-4.9
+ - cxx: clang++-3.6
- cxx: g++-11
build_type: Debug
std: 14
@@ -66,29 +67,65 @@ jobs:
# https://launchpad.net/ubuntu/xenial/amd64/g++-4.9/4.9.3-13ubuntu2
wget --no-verbose \
http://launchpadlibrarian.net/230069137/libmpfr4_3.1.3-2_amd64.deb \
- http://launchpadlibrarian.net/253728314/gcc-4.9-base_4.9.3-13ubuntu2_amd64.deb \
- http://launchpadlibrarian.net/445345919/gcc-5-base_5.4.0-6ubuntu1~16.04.12_amd64.deb \
- http://launchpadlibrarian.net/253728399/cpp-4.9_4.9.3-13ubuntu2_amd64.deb \
http://launchpadlibrarian.net/253728424/libasan1_4.9.3-13ubuntu2_amd64.deb \
http://launchpadlibrarian.net/445346135/libubsan0_5.4.0-6ubuntu1~16.04.12_amd64.deb \
http://launchpadlibrarian.net/445346112/libcilkrts5_5.4.0-6ubuntu1~16.04.12_amd64.deb \
http://launchpadlibrarian.net/253728426/libgcc-4.9-dev_4.9.3-13ubuntu2_amd64.deb \
- http://launchpadlibrarian.net/253728404/gcc-4.9_4.9.3-13ubuntu2_amd64.deb \
http://launchpadlibrarian.net/253728432/libstdc++-4.9-dev_4.9.3-13ubuntu2_amd64.deb \
+ http://launchpadlibrarian.net/253728314/gcc-4.9-base_4.9.3-13ubuntu2_amd64.deb \
+ http://launchpadlibrarian.net/445345919/gcc-5-base_5.4.0-6ubuntu1~16.04.12_amd64.deb \
+ http://launchpadlibrarian.net/253728399/cpp-4.9_4.9.3-13ubuntu2_amd64.deb \
+ http://launchpadlibrarian.net/253728404/gcc-4.9_4.9.3-13ubuntu2_amd64.deb \
http://launchpadlibrarian.net/253728401/g++-4.9_4.9.3-13ubuntu2_amd64.deb
- sudo dpkg -i libmpfr4_3.1.3-2_amd64.deb \
- gcc-4.9-base_4.9.3-13ubuntu2_amd64.deb \
- gcc-5-base_5.4.0-6ubuntu1~16.04.12_amd64.deb \
- cpp-4.9_4.9.3-13ubuntu2_amd64.deb \
+ sudo dpkg -i \
+ libmpfr4_3.1.3-2_amd64.deb \
libasan1_4.9.3-13ubuntu2_amd64.deb \
libubsan0_5.4.0-6ubuntu1~16.04.12_amd64.deb \
libcilkrts5_5.4.0-6ubuntu1~16.04.12_amd64.deb \
libgcc-4.9-dev_4.9.3-13ubuntu2_amd64.deb \
- gcc-4.9_4.9.3-13ubuntu2_amd64.deb \
libstdc++-4.9-dev_4.9.3-13ubuntu2_amd64.deb \
+ gcc-4.9-base_4.9.3-13ubuntu2_amd64.deb \
+ gcc-5-base_5.4.0-6ubuntu1~16.04.12_amd64.deb \
+ cpp-4.9_4.9.3-13ubuntu2_amd64.deb \
+ gcc-4.9_4.9.3-13ubuntu2_amd64.deb \
g++-4.9_4.9.3-13ubuntu2_amd64.deb
if: ${{ matrix.cxx == 'g++-4.9' }}
+ - name: Install Clang 3.6
+ run: |
+ sudo apt update
+ sudo apt install libtinfo5 libobjc4
+ # https://code.launchpad.net/ubuntu/xenial/amd64/clang-3.6/1:3.6.2-3ubuntu2
+ wget --no-verbose \
+ http://launchpadlibrarian.net/230019046/libffi6_3.2.1-4_amd64.deb \
+ http://launchpadlibrarian.net/445346109/libasan2_5.4.0-6ubuntu1~16.04.12_amd64.deb \
+ http://launchpadlibrarian.net/445346135/libubsan0_5.4.0-6ubuntu1~16.04.12_amd64.deb \
+ http://launchpadlibrarian.net/445346112/libcilkrts5_5.4.0-6ubuntu1~16.04.12_amd64.deb \
+ http://launchpadlibrarian.net/445346128/libmpx0_5.4.0-6ubuntu1~16.04.12_amd64.deb \
+ http://launchpadlibrarian.net/445346113/libgcc-5-dev_5.4.0-6ubuntu1~16.04.12_amd64.deb \
+ http://launchpadlibrarian.net/445346131/libstdc++-5-dev_5.4.0-6ubuntu1~16.04.12_amd64.deb \
+ http://launchpadlibrarian.net/445346022/libobjc-5-dev_5.4.0-6ubuntu1~16.04.12_amd64.deb \
+ http://launchpadlibrarian.net/254405108/libllvm3.6v5_3.6.2-3ubuntu2_amd64.deb \
+ http://launchpadlibrarian.net/254405097/libclang-common-3.6-dev_3.6.2-3ubuntu2_amd64.deb \
+ http://launchpadlibrarian.net/254405101/libclang1-3.6_3.6.2-3ubuntu2_amd64.deb \
+ http://launchpadlibrarian.net/445345919/gcc-5-base_5.4.0-6ubuntu1~16.04.12_amd64.deb \
+ http://launchpadlibrarian.net/254405091/clang-3.6_3.6.2-3ubuntu2_amd64.deb
+ sudo dpkg -i \
+ libffi6_3.2.1-4_amd64.deb \
+ libasan2_5.4.0-6ubuntu1~16.04.12_amd64.deb \
+ libubsan0_5.4.0-6ubuntu1~16.04.12_amd64.deb \
+ libcilkrts5_5.4.0-6ubuntu1~16.04.12_amd64.deb \
+ libmpx0_5.4.0-6ubuntu1~16.04.12_amd64.deb \
+ libgcc-5-dev_5.4.0-6ubuntu1~16.04.12_amd64.deb \
+ libstdc++-5-dev_5.4.0-6ubuntu1~16.04.12_amd64.deb \
+ libobjc-5-dev_5.4.0-6ubuntu1~16.04.12_amd64.deb \
+ libllvm3.6v5_3.6.2-3ubuntu2_amd64.deb \
+ libclang-common-3.6-dev_3.6.2-3ubuntu2_amd64.deb \
+ libclang1-3.6_3.6.2-3ubuntu2_amd64.deb \
+ gcc-5-base_5.4.0-6ubuntu1~16.04.12_amd64.deb \
+ clang-3.6_3.6.2-3ubuntu2_amd64.deb
+ if: ${{ matrix.cxx == 'clang++-3.6' }}
+
- name: Add repositories for newer GCC
run: |
sudo apt-add-repository ppa:ubuntu-toolchain-r/test
@@ -102,9 +139,9 @@ jobs:
curl http://mirrors.ubuntu.com/mirrors.txt | sudo tee --append /etc/apt/mirrors.txt
sudo sed -i 's~http://azure.archive.ubuntu.com/ubuntu/~mirror+file:/etc/apt/mirrors.txt~' /etc/apt/sources.list
- - name: Create Build Environment
+ - name: Create build environment
run: |
- sudo apt update --allow-unauthenticated
+ sudo apt update
${{matrix.install}}
sudo apt install locales-all
cmake -E make_directory ${{runner.workspace}}/build
@@ -115,10 +152,12 @@ jobs:
CXX: ${{matrix.cxx}}
CXXFLAGS: ${{matrix.cxxflags}}
run: |
- cmake -DCMAKE_BUILD_TYPE=${{matrix.build_type}} ${{matrix.fuzz}} ${{matrix.shared}} \
- -DCMAKE_CXX_STANDARD=${{matrix.std}} -DFMT_DOC=OFF \
- -DCMAKE_CXX_VISIBILITY_PRESET=hidden -DCMAKE_VISIBILITY_INLINES_HIDDEN=ON \
- -DFMT_PEDANTIC=ON -DFMT_WERROR=ON $GITHUB_WORKSPACE
+ cmake -DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
+ -DCMAKE_CXX_STANDARD=${{matrix.std}} \
+ -DCMAKE_CXX_VISIBILITY_PRESET=hidden \
+ -DCMAKE_VISIBILITY_INLINES_HIDDEN=ON \
+ -DFMT_DOC=OFF -DFMT_PEDANTIC=ON -DFMT_WERROR=ON \
+ ${{matrix.fuzz}} ${{matrix.shared}} $GITHUB_WORKSPACE
- name: Build
working-directory: ${{runner.workspace}}/build
diff --git a/doc/index.md b/doc/index.md
index 4f28e114..a2694736 100644
--- a/doc/index.md
+++ b/doc/index.md
@@ -122,7 +122,7 @@ hide:
The library is highly portable and requires only a minimal subset of
- C++11 features which are available in GCC 4.9, Clang 3.4, MSVC 19.10
+ C++11 features which are available in GCC 4.9, Clang 3.6, MSVC 19.10
(2017) and later. Newer compiler and standard library features are used
if available, and enable additional functionality.
diff --git a/include/fmt/format.h b/include/fmt/format.h
index 287e7163..81c97a07 100644
--- a/include/fmt/format.h
+++ b/include/fmt/format.h
@@ -705,7 +705,7 @@ using is_integer =
#if defined(FMT_USE_FLOAT128)
// Use the provided definition.
-#elif FMT_CLANG_VERSION && FMT_HAS_INCLUDE()
+#elif FMT_CLANG_VERSION >= 309 && FMT_HAS_INCLUDE()
# define FMT_USE_FLOAT128 1
#elif FMT_GCC_VERSION && defined(_GLIBCXX_USE_FLOAT128) && \
!defined(__STRICT_ANSI__)
diff --git a/include/fmt/ranges.h b/include/fmt/ranges.h
index 77d645f8..23ff7de0 100644
--- a/include/fmt/ranges.h
+++ b/include/fmt/ranges.h
@@ -774,13 +774,13 @@ struct formatter<
: formatter, Char> {
using all = detail::all;
template
- auto format(const T& t, FormatContext& ctx) const -> decltype(ctx.out()) {
+ auto format(const T& value, FormatContext& ctx) const -> decltype(ctx.out()) {
struct getter : T {
- static auto get(const T& t) -> all {
- return {t.*(&getter::c)}; // Access c through the derived class.
+ static auto get(const T& v) -> all {
+ return {v.*(&getter::c)}; // Access c through the derived class.
}
};
- return formatter::format(getter::get(t), ctx);
+ return formatter::format(getter::get(value), ctx);
}
};
diff --git a/test/ranges-test.cc b/test/ranges-test.cc
index be541818..e1c1f3ec 100644
--- a/test/ranges-test.cc
+++ b/test/ranges-test.cc
@@ -232,9 +232,12 @@ auto get(const tuple_like& t) noexcept -> decltype(t.get()) {
return t.get();
}
+// https://github.com/llvm/llvm-project/issues/39218
+FMT_PRAGMA_CLANG(diagnostic ignored "-Wmismatched-tags")
+
namespace std {
template <>
-struct tuple_size : std::integral_constant {};
+struct tuple_size : public std::integral_constant {};
template struct tuple_element {
using type = decltype(std::declval().get());