Re: Upgrading clang on CI

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

I worked on this for a while. There were issues that I discuss here:

Bumping the clang version itself on Jenkins is straightforward, and is done in this patch:

Bump linux_clang_dbgutil_64 to clang 18.1.8
https://gerrit.libreoffice.org/c/lode/+/182317

On the other hand, there are issues that rises from the fact that when someone compiles the code with clang++ 18 or 19 on Linux, the compiler uses the standard C++ library from the distribution, which may not be up to date. Therefore, I get warnings/errors for deprecation on Ubuntu 22.04 LTS:

$ make svl
...
In file included from /home/user/lode/dev/core/svl/source/items/stylepool.cxx:20: In file included from /home/user/lode/dev/core/include/svl/stylepool.hxx:21: In file included from /home/user/lode/dev/core/include/rtl/ustring.hxx:38: In file included from /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/algorithm:61: In file included from /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_algo.h:61: /usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tempbuf.h:263:8: error: 'get_temporary_buffer<const SfxItemSet *>' is deprecated [-Werror,-Wdeprecated-declarations] 263 | std::get_temporary_buffer<value_type>(_M_original_len));
      |                      ^
/usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_algo.h:4996:15: note: in instantiation of member function 'std::_Temporary_buffer<__gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator<const SfxItemSet **, std::__cxx1998::vector<const SfxItemSet *>>, std::vector<const SfxItemSet *>>, const SfxItemSet *>::_Temporary_buffer' requested here
 4996 |       _TmpBuf __buf(__first, (__last - __first + 1) / 2);
      |               ^
/usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_algo.h:5070:23: note: in instantiation of function template specialization 'std::__stable_sort<__gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator<const SfxItemSet **, std::__cxx1998::vector<const SfxItemSet *>>, std::vector<const SfxItemSet *>>, __gnu_cxx::__ops::_Iter_comp_iter<(lambda at /home/user/lode/dev/core/svl/source/items/stylepool.cxx:264:27)>>' requested here
 5070 |       _GLIBCXX_STD_A::__stable_sort(__first, __last,
      |                       ^
/home/user/lode/dev/core/svl/source/items/stylepool.cxx:263:22: note: in instantiation of function template specialization 'std::stable_sort<__gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator<const SfxItemSet **, std::__cxx1998::vector<const SfxItemSet *>>, std::vector<const SfxItemSet *>>, (lambda at /home/user/lode/dev/core/svl/source/items/stylepool.cxx:264:27)>' requested here 263 | std::stable_sort(maParents.begin(), maParents.end(),
      |                      ^
/usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tempbuf.h:99:5: note: 'get_temporary_buffer<const SfxItemSet *>' has been explicitly marked deprecated here
   99 |     _GLIBCXX17_DEPRECATED
      |     ^
/usr/lib/gcc/x86_64-linux-gnu/12/../../../../include/x86_64-linux-gnu/c++/12/bits/c++config.h:119:34: note: expanded from macro '_GLIBCXX17_DEPRECATED'
  119 | # define _GLIBCXX17_DEPRECATED [[__deprecated__]]
      |                                  ^
1 error generated.
make[1]: *** [/home/user/lode/dev/core/solenv/gbuild/LinkTarget.mk:339: /home/user/lode/dev/core/workdir/CxxObject/svl/source/items/stylepool.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:128: svl] Error 2


To fix these issues, we may:

1. Bundle and use standard C++ library from LLVM on Jenkins and elsewhere
2. Internally re-define deprecated function, stable_sort
3. Accept the deprecated implementation and avoid error with --disable-werror in the autogen.input, in case one face such a problem.

I suggest defining this function:

template<typename Iterator, typename Compare>
void stable_sort_custom(Iterator first, Iterator last, Compare comp) {
#if defined(__clang__) && defined(__GLIBCXX__)
    // new stable_sort implementation
}
#else
    std::stable_sort(first, last, comp);
#endif
}

It defines a new custom_stable_sort, in case clang and GNU standard C++ library are used. It falls back to std::stable_sort otherwise.

Regards,
Hossein

On 17.02.2025 21:15, Hossein Nourikhah wrote:
Hello,

The baseline for LibreOffice C++ source code is now C++20. But, the clang 12 installed on CI machines is quite old, and lacks some important C++20 features. ("/home/tdf/lode/opt_private/clang-llvmorg-12.0.1/bin/clang" is visible in the build logs)

C++ ranges library is one example:
https://en.cppreference.com/w/cpp/ranges/reverse_view

This is a related CI failure because of lacking C++ ranges library support:
https://ci.libreoffice.org/job/gerrit_master_ml/35822/

More details about C++20 support from different compilers can be seen here:

C++20 library features
https://en.cppreference.com/w/cpp/compiler_support#C.2B.2B20_library_features

Looking into the details of clang releases, I think clang versions until and including 17 are no longer supported.
https://llvm.org/docs/HowToReleaseLLVM.html

The current stable release is 19, an the preview release is 20.
https://releases.llvm.org/

I am not sure about 18, but it is the version available in many Linux distributions, and it seems to build LibreOffice from sources smoothly.

Ubuntu LTS: 20.04, 24.04, 22.04 (via llvm apt repository), RHEL 8 and 9 (via Clang and LLVM Toolset) and many other distributions:
https://packages.ubuntu.com/search?searchon=contents&keywords=clang&mode=exactfilename&suite=focal-updates&arch=any
https://packages.ubuntu.com/search?searchon=contents&keywords=clang&mode=exactfilename&suite=noble-updates&arch=any

Is it possible upgrade clang on CI machines to version 18 (or possibly, 19)?

Regards,
Hossein

--
Hossein Nourikhah, Ph.D., Developer Community Architect
Tel: +49 30 5557992-65 | Email: hossein@xxxxxxxxxxxxxxx
The Document Foundation, Winterfeldtstraße 52, 10781 Berlin, DE
Gemeinnützige rechtsfähige Stiftung des bürgerlichen Rechts
Legal details: https://www.documentfoundation.org/imprint



[Index of Archives]     [LARTC]     [Bugtraq]     [Yosemite Forum]     [Photo]

  Powered by Linux