Skip to content

Commit daabdd6

Browse files
authored
Clang-tidy CI test: bump version from 16 to 17 (#5600)
This PR bumps the version used for `clang-tidy` CI tests from 16 to 17. It also addresses all the issues found with the upgraded tool. To be merged **after** #5592 ✅ ### The issues found 🧐 and fixed 🛠️ with the upgraded tool are the following : - [bugprone-switch-missing-default-case](https://releases.llvm.org/17.0.1/tools/clang/tools/extra/docs/clang-tidy/checks/bugprone/switch-missing-default-case.html) A newly introduced check to flag `switch` statements without a `default` case (unless the argument is an `enum`) - [cppcoreguidelines-rvalue-reference-param-not-moved](https://releases.llvm.org/17.0.1/tools/clang/tools/extra/docs/clang-tidy/checks/cppcoreguidelines/rvalue-reference-param-not-moved.html) A newly introduced check to flag when an rvalue reference argument of a function is never moved inside the function body. ⚠️ **Warning**: in order to have this check compatible with [performance-move-const-arg](https://releases.llvm.org/17.0.1/tools/clang/tools/extra/docs/clang-tidy/checks/performance/move-const-arg.html) I had to set `performance-move-const-arg.CheckTriviallyCopyableMove` to `false` (specifically for the three methods in `ablastr::utils::msg_logger` accepting `std::vector<char>::const_iterator&& rit` arguments). - [misc-header-include-cycle](https://releases.llvm.org/17.0.1/tools/clang/tools/extra/docs/clang-tidy/checks/misc/header-include-cycle.html) A newly introduced check to prevent cyclic header inclusions. - [modernize-type-traits](https://releases.llvm.org/17.0.1/tools/clang/tools/extra/docs/clang-tidy/checks/modernize/type-traits.html) A newly introduced check. The idea is to replace currencies of, e.g., `std::is_integral<T>::value`, with the less verbose alternative `std::is_integral_v<T>` - [performance-avoid-endl](https://releases.llvm.org/17.0.1/tools/clang/tools/extra/docs/clang-tidy/checks/performance/avoid-endl.html) A newly introduced check. The idea is to replace `<< std::endl` with `\n`, since `endl` also forces a flush of the stream. In few cases flushing the buffer is actually the desired behavior. Typically, this happens when we want to write to `std::cerr`, which is however automatically flushed after each write operation. In cases where actually flushing to `std::cout` is the desired behavior one can do `<< \n << std::flush `, which is arguably more transparent than `<< std::endl`. - [performance-noexcept-swap](https://releases.llvm.org/17.0.1/tools/clang/tools/extra/docs/clang-tidy/checks/performance/noexcept-swap.html) For performance reasons it is better if `swap` functions are declared as `noexcept`, in order to allow the compiler to perform more aggressive optimizations. In any case, we can use the AMReX function `amrex::Swap`, which is `noexcept`. ### 🔄 Re-enabled checks: - [readability-misleading-indentation](https://releases.llvm.org/17.0.1/tools/clang/tools/extra/docs/clang-tidy/checks/readability/misleading-indentation.html) This check was already available in v16, but a bug led to false positives. The bug has been corrected in v17 of the tool, so we can re-enable the check. ### ⛔ The PR excludes the following checks : - [cppcoreguidelines-missing-std-forward](https://releases.llvm.org/17.0.1/tools/clang/tools/extra/docs/clang-tidy/checks/cppcoreguidelines/missing-std-forward.html) A newly introduced check that warns when a forwarding reference parameter is not forwarded. In order to comply with this check I think that I have to pass some parameters by reference to lambda functions inside `ParallelFor` constructs. However, this leads to issues when we compile for GPUs. Therefore, I think that the best solution is to exclude this check. See an example below (for `PredFunc&& filter` ): ``` amrex::ParallelForRNG(np, [=,&filter] AMREX_GPU_DEVICE (int i, amrex::RandomEngine const& engine) { p_mask[i] = filter(src_data, i, engine); }); ``` - [misc-include-cleaner](https://releases.llvm.org/17.0.1/tools/clang/tools/extra/docs/clang-tidy/checks/misc/include-cleaner.html) It would be awesome to include this check. However, as it is now implemented, it has no notion of "associated headers". For instance, let's suppose that the header `MyClass.H` has `#include<string>` and that `MyClass.cpp` has `#include "MyClass.H"` and uses `std:string` somewhere. In this case, the check raises a warning stating that you should include `<string>` in `MyClass.cpp` even if it is transitively included via the associate header `MyClass.H` . For this reason, for the moment, it is better to periodically check headers with the `IWYU` tool.
1 parent 879caec commit daabdd6

File tree

21 files changed

+55
-58
lines changed

21 files changed

+55
-58
lines changed

.clang-tidy

+4-2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ Checks: '
1919
-cppcoreguidelines-avoid-non-const-global-variables,
2020
-cppcoreguidelines-init-variables,
2121
-cppcoreguidelines-macro-usage,
22+
-cppcoreguidelines-missing-std-forward,
2223
-cppcoreguidelines-narrowing-conversions,
2324
-cppcoreguidelines-non-private-member-variables-in-classes,
2425
-cppcoreguidelines-owning-memory,
@@ -29,6 +30,7 @@ Checks: '
2930
misc-*,
3031
-misc-no-recursion,
3132
-misc-non-private-member-variables-in-classes,
33+
-misc-include-cleaner,
3234
modernize-*,
3335
-modernize-avoid-c-arrays,
3436
-modernize-return-braced-init-list,
@@ -44,7 +46,6 @@ Checks: '
4446
-readability-implicit-bool-conversion,
4547
-readability-isolate-declaration,
4648
-readability-magic-numbers,
47-
-readability-misleading-indentation,
4849
-readability-named-parameter,
4950
-readability-uppercase-literal-suffix
5051
'
@@ -58,6 +59,7 @@ CheckOptions:
5859
value: "true"
5960
- key: misc-use-anonymous-namespace.HeaderFileExtensions
6061
value: "H,"
61-
62+
- key: performance-move-const-arg.CheckTriviallyCopyableMove
63+
value: "false"
6264

6365
HeaderFilterRegex: 'Source[a-z_A-Z0-9\/]+\.H$'

.github/workflows/clang_tidy.yml

+4-4
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
2626
- uses: actions/checkout@v4
2727
- name: install dependencies
2828
run: |
29-
.github/workflows/dependencies/clang.sh 16
29+
.github/workflows/dependencies/clang.sh 17
3030
- name: set up cache
3131
uses: actions/cache@v4
3232
with:
@@ -43,8 +43,8 @@ jobs:
4343
export CCACHE_LOGFILE=${{ github.workspace }}/ccache.log.txt
4444
ccache -z
4545
46-
export CXX=$(which clang++-16)
47-
export CC=$(which clang-16)
46+
export CXX=$(which clang++-17)
47+
export CC=$(which clang-17)
4848
4949
cmake -S . -B build_clang_tidy \
5050
-DCMAKE_VERBOSE_MAKEFILE=ON \
@@ -62,7 +62,7 @@ jobs:
6262
6363
${{github.workspace}}/.github/workflows/source/makeMakefileForClangTidy.py --input ${{github.workspace}}/ccache.log.txt
6464
make -j4 --keep-going -f clang-tidy-ccache-misses.mak \
65-
CLANG_TIDY=clang-tidy-16 \
65+
CLANG_TIDY=clang-tidy-17 \
6666
CLANG_TIDY_ARGS="--config-file=${{github.workspace}}/.clang-tidy --warnings-as-errors=*"
6767
6868
ccache -s

Source/Diagnostics/FlushFormats/FlushFormatCatalyst.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ FlushFormatCatalyst::FlushFormatCatalyst() {
110110
if (err != catalyst_status_ok)
111111
{
112112
std::string message = " Error: Failed to initialize Catalyst!\n";
113-
std::cerr << message << err << std::endl;
113+
std::cerr << message << err << "\n";
114114
amrex::Print() << message;
115115
amrex::Abort(message);
116116
}
@@ -180,7 +180,7 @@ FlushFormatCatalyst::WriteToFile (
180180
if (err != catalyst_status_ok)
181181
{
182182
std::string message = " Error: Failed to execute Catalyst!\n";
183-
std::cerr << message << err << std::endl;
183+
std::cerr << message << err << "\n";
184184
amrex::Print() << message;
185185
}
186186
WARPX_PROFILE_VAR_STOP(prof_catalyst_execute);
@@ -200,7 +200,7 @@ FlushFormatCatalyst::~FlushFormatCatalyst() {
200200
if (err != catalyst_status_ok)
201201
{
202202
std::string message = " Error: Failed to finalize Catalyst!\n";
203-
std::cerr << message << err << std::endl;
203+
std::cerr << message << err << "\n";
204204
amrex::Print() << message;
205205
amrex::Abort(message);
206206
} else {

Source/Diagnostics/FullDiagnostics.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -873,7 +873,7 @@ FullDiagnostics::InitializeFieldFunctors (int lev)
873873
} else if ( m_varnames[comp] == "divE" ){
874874
m_all_field_functors[lev][comp] = std::make_unique<DivEFunctor>(warpx.m_fields.get_alldirs(FieldType::Efield_aux, lev), lev, m_crse_ratio);
875875
} else {
876-
std::cout << "Error on component " << m_varnames[comp] << std::endl;
876+
std::cout << "Error on component " << m_varnames[comp] << "\n";
877877
WARPX_ABORT_WITH_MESSAGE(m_varnames[comp] + " is not a known field output type for this geometry");
878878
}
879879
}

Source/Diagnostics/ReducedDiags/Timestep.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ Timestep::Timestep (const std::string& rd_name)
5050
}
5151

5252
// close file
53-
ofs << std::endl;
53+
ofs << "\n";
5454
ofs.close();
5555
}
5656
}

Source/FieldSolver/MagnetostaticSolver/MagnetostaticSolver.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ WarpX::AddMagnetostaticFieldLabFrame()
130130
// temporary fix!!!
131131
const amrex::Real absolute_tolerance = 0.0;
132132
amrex::Real required_precision;
133-
if constexpr (std::is_same<Real, float>::value) {
133+
if constexpr (std::is_same_v<Real, float>) {
134134
required_precision = 1e-5;
135135
}
136136
else {

Source/FieldSolver/SpectralSolver/SpectralKSpace.H

+5-4
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <AMReX_Array.H>
1818
#include <AMReX_BoxArray.H>
1919
#include <AMReX_Config.H>
20+
#include <AMReX_Enum.H>
2021
#include <AMReX_GpuContainers.H>
2122
#include <AMReX_LayoutData.H>
2223
#include <AMReX_REAL.H>
@@ -35,9 +36,9 @@ using SpectralShiftFactor = amrex::LayoutData<
3536

3637
// Indicate the type of correction "shift" factor to apply
3738
// when the FFT is performed from/to a cell-centered grid in real space.
38-
struct ShiftType {
39-
enum{ TransformFromCellCentered=0, TransformToCellCentered=1 };
40-
};
39+
AMREX_ENUM(ShiftType,
40+
TransformFromCellCentered,
41+
TransformToCellCentered);
4142

4243
/**
4344
* \brief Class that represents the spectral space.
@@ -69,7 +70,7 @@ class SpectralKSpace
6970

7071
SpectralShiftFactor getSpectralShiftFactor(
7172
const amrex::DistributionMapping& dm, int i_dim,
72-
int shift_type ) const;
73+
ShiftType shift_type ) const;
7374

7475
protected:
7576
amrex::Array<KVectorComponent, AMREX_SPACEDIM> k_vec;

Source/FieldSolver/SpectralSolver/SpectralKSpace.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ SpectralKSpace::getKComponent( const DistributionMapping& dm,
145145
SpectralShiftFactor
146146
SpectralKSpace::getSpectralShiftFactor( const DistributionMapping& dm,
147147
const int i_dim,
148-
const int shift_type ) const
148+
const ShiftType shift_type ) const
149149
{
150150
// Initialize an empty DeviceVector in each box
151151
SpectralShiftFactor shift_factor( spectralspace_ba, dm );

Source/FieldSolver/SpectralSolver/SpectralKSpace_fwd.H

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#ifndef WARPX_SPECTRALKSPACE_FWD_H
99
#define WARPX_SPECTRALKSPACE_FWD_H
1010

11-
struct ShiftType;
11+
enum class ShiftType;
1212

1313
class SpectralKSpace;
1414

Source/Initialization/DivCleaner/ProjectionDivCleaner.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ void
104104
ProjectionDivCleaner::ReadParameters ()
105105
{
106106
// Initialize tolerance based on field precision
107-
if constexpr (std::is_same<Real, float>::value) {
107+
if constexpr (std::is_same_v<Real, float>) {
108108
m_rtol = 5e-5;
109109
m_atol = 0.0;
110110
}
@@ -337,7 +337,7 @@ WarpX::ProjectionCleanDivB() {
337337
&& WarpX::poisson_solver_id == PoissonSolverAlgo::Multigrid)) {
338338
amrex::Print() << Utils::TextMsg::Info( "Starting Projection B-Field divergence cleaner.");
339339

340-
if constexpr (!std::is_same<Real, double>::value) {
340+
if constexpr (!std::is_same_v<Real, double>) {
341341
ablastr::warn_manager::WMRecordWarning("Projection Div Cleaner",
342342
"WarpX is running with a field precision of SINGLE."
343343
"Convergence of projection based div cleaner is not optimal and may fail.",

Source/NonlinearSolvers/NewtonSolver.H

+1-1
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ void NewtonSolver<Vec,Ops>::Solve ( Vec& a_U,
313313
" and the relative tolerance is " << m_rtol <<
314314
". Absolute norm is " << norm_abs <<
315315
" and the absolute tolerance is " << m_atol;
316-
if (this->m_verbose) { amrex::Print() << convergenceMsg.str() << std::endl; }
316+
if (this->m_verbose) { amrex::Print() << convergenceMsg.str() << "\n"; }
317317
if (m_require_convergence) {
318318
WARPX_ABORT_WITH_MESSAGE(convergenceMsg.str());
319319
} else {

Source/NonlinearSolvers/PicardSolver.H

+1-1
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ void PicardSolver<Vec,Ops>::Solve ( Vec& a_U,
205205
" and the relative tolerance is " << m_rtol <<
206206
". Absolute norm is " << norm_abs <<
207207
" and the absolute tolerance is " << m_atol;
208-
if (this->m_verbose) { amrex::Print() << convergenceMsg.str() << std::endl; }
208+
if (this->m_verbose) { amrex::Print() << convergenceMsg.str() << "\n"; }
209209
if (m_require_convergence) {
210210
WARPX_ABORT_WITH_MESSAGE(convergenceMsg.str());
211211
} else {

Source/Particles/Resampling/VelocityCoincidenceThinning.H

+5-11
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
#include "Utils/Parser/ParserUtils.H"
1515
#include "Utils/ParticleUtils.H"
1616

17+
#include <AMReX_Algorithm.H>
18+
1719
/**
1820
* \brief This class implements a particle merging scheme wherein particles
1921
* are clustered in phase space and particles in the same cluster is merged
@@ -66,14 +68,6 @@ public:
6668
*/
6769
struct HeapSort {
6870

69-
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
70-
void swap(int &a, int &b) const
71-
{
72-
const auto temp = b;
73-
b = a;
74-
a = temp;
75-
}
76-
7771
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
7872
void operator() (int index_array[], const int bin_array[], const int start, const int n) const
7973
{
@@ -84,15 +78,15 @@ public:
8478
// move child through heap if it is bigger than its parent
8579
while (j > 0 && bin_array[index_array[j+start]] > bin_array[index_array[(j - 1)/2 + start]]) {
8680
// swap child and parent until branch is properly ordered
87-
swap(index_array[j+start], index_array[(j - 1)/2 + start]);
81+
amrex::Swap(index_array[j+start], index_array[(j - 1)/2 + start]);
8882
j = (j - 1) / 2;
8983
}
9084
}
9185

9286
for (int i = n - 1; i > 0; i--)
9387
{
9488
// swap value of first (now the largest value) to the new end point
95-
swap(index_array[start], index_array[i+start]);
89+
amrex::Swap(index_array[start], index_array[i+start]);
9690

9791
// remake the max heap
9892
int j = 0, index;
@@ -105,7 +99,7 @@ public:
10599
}
106100
// if parent is smaller than child, swap parent with child having higher value
107101
if (index < i && bin_array[index_array[j+start]] < bin_array[index_array[index+start]]) {
108-
swap(index_array[j+start], index_array[index+start]);
102+
amrex::Swap(index_array[j+start], index_array[index+start]);
109103
}
110104
j = index;
111105
}

Source/Python/callbacks.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ void ExecutePythonCallback ( const std::string& name )
3333
try {
3434
warpx_callback_py_map[name]();
3535
} catch (std::exception &e) {
36-
std::cerr << "Python callback '" << name << "' failed!" << std::endl;
37-
std::cerr << e.what() << std::endl;
36+
std::cerr << "Python callback '" << name << "' failed!" << "\n";
37+
std::cerr << e.what() << "\n";
3838
std::exit(3); // note: NOT amrex::Abort(), to avoid hangs with MPI
3939

4040
// future note:

Source/Python/pyWarpX.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ PYBIND11_MODULE(PYWARPX_MODULE_NAME, m) {
9393
// TODO broken numpy if not at least v1.15.0: raise warning
9494
// auto numpy = py::module::import("numpy");
9595
// auto npversion = numpy.attr("__version__");
96-
// std::cout << "numpy version: " << py::str(npversion) << std::endl;
96+
// std::cout << "numpy version: " << py::str(npversion) << "\n";
9797

9898
m.def("amrex_init",
9999
[](const py::list args) {

Source/ablastr/fields/EffectivePotentialPoissonSolver.H

+1-1
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ computeEffectivePotentialPhi (
260260
}
261261

262262
// Run additional operations, such as calculation of the E field for embedded boundaries
263-
if constexpr (!std::is_same<T_PostPhiCalculationFunctor, std::nullopt_t>::value) {
263+
if constexpr (!std::is_same_v<T_PostPhiCalculationFunctor, std::nullopt_t>) {
264264
if (post_phi_calculation.has_value()) {
265265
post_phi_calculation.value()(mlmg, lev);
266266
}

Source/ablastr/fields/Interpolate.H

-3
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,9 @@
1111
#include <AMReX_IntVect.H>
1212
#include <AMReX_MFInterp_C.H>
1313

14-
#include <ablastr/fields/Interpolate.H>
15-
1614
#include <array>
1715
#include <optional>
1816

19-
2017
namespace ablastr::fields::details {
2118

2219
/** Local interpolation from phi_cp to phi[lev+1]

Source/ablastr/utils/msg_logger/MsgLogger.H

+6-6
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,10 @@ namespace ablastr::utils::msg_logger
7979
* \brief Same as static Msg deserialize(std::vector<char>::const_iterator& it)
8080
* but accepting an rvalue as an argument
8181
*
82-
* @param[in] it iterator of a byte array
82+
* @param[in] rit iterator of a byte array
8383
* @return a Msg struct
8484
*/
85-
static Msg deserialize(std::vector<char>::const_iterator&& it);
85+
static Msg deserialize(std::vector<char>::const_iterator&& rit);
8686
};
8787

8888
/**
@@ -115,10 +115,10 @@ namespace ablastr::utils::msg_logger
115115
* \brief Same as static Msg MsgWithCounter(std::vector<char>::const_iterator& it)
116116
* but accepting an rvalue as an argument
117117
*
118-
* @param[in] it iterator of a byte array
118+
* @param[in] rit iterator of a byte array
119119
* @return a MsgWithCounter struct
120120
*/
121-
static MsgWithCounter deserialize(std::vector<char>::const_iterator&& it);
121+
static MsgWithCounter deserialize(std::vector<char>::const_iterator&& rit);
122122
};
123123

124124
/**
@@ -154,10 +154,10 @@ namespace ablastr::utils::msg_logger
154154
* \brief Same as static Msg MsgWithCounterAndRanks(std::vector<char>::const_iterator& it)
155155
* but accepting an rvalue as an argument
156156
*
157-
* @param[in] it iterator of a byte array
157+
* @param[in] rit iterator of a byte array
158158
* @return a MsgWithCounterAndRanks struct
159159
*/
160-
static MsgWithCounterAndRanks deserialize(std::vector<char>::const_iterator&& it);
160+
static MsgWithCounterAndRanks deserialize(std::vector<char>::const_iterator&& rit);
161161
};
162162

163163
/**

Source/ablastr/utils/msg_logger/MsgLogger.cpp

+9-6
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,10 @@ Msg Msg::deserialize (std::vector<char>::const_iterator& it)
147147
return msg;
148148
}
149149

150-
Msg Msg::deserialize (std::vector<char>::const_iterator&& it)
150+
Msg Msg::deserialize (std::vector<char>::const_iterator&& rit)
151151
{
152-
return Msg::deserialize(it);
152+
auto lit = std::vector<char>::const_iterator{std::move(rit)};
153+
return Msg::deserialize(lit);
153154
}
154155

155156
std::vector<char> MsgWithCounter::serialize() const
@@ -174,9 +175,10 @@ MsgWithCounter MsgWithCounter::deserialize (std::vector<char>::const_iterator& i
174175
return msg_with_counter;
175176
}
176177

177-
MsgWithCounter MsgWithCounter::deserialize (std::vector<char>::const_iterator&& it)
178+
MsgWithCounter MsgWithCounter::deserialize (std::vector<char>::const_iterator&& rit)
178179
{
179-
return MsgWithCounter::deserialize(it);
180+
auto lit = std::vector<char>::const_iterator{std::move(rit)};
181+
return MsgWithCounter::deserialize(lit);
180182
}
181183

182184
std::vector<char> MsgWithCounterAndRanks::serialize() const
@@ -205,9 +207,10 @@ MsgWithCounterAndRanks::deserialize (std::vector<char>::const_iterator& it)
205207
}
206208

207209
MsgWithCounterAndRanks
208-
MsgWithCounterAndRanks::deserialize (std::vector<char>::const_iterator&& it)
210+
MsgWithCounterAndRanks::deserialize (std::vector<char>::const_iterator&& rit)
209211
{
210-
return MsgWithCounterAndRanks::deserialize(it);
212+
auto lit = std::vector<char>::const_iterator{std::move(rit)};
213+
return MsgWithCounterAndRanks::deserialize(lit);
211214
}
212215

213216
Logger::Logger() :

Tools/Linter/runClangTidy.sh

+4-4
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,13 @@ ${CTIDY} --version
5555
echo
5656
echo "This can be overridden by setting the environment"
5757
echo "variables CLANG, CLANGXX, and CLANGTIDY e.g.: "
58-
echo "$ export CLANG=clang-16"
59-
echo "$ export CLANGXX=clang++-16"
60-
echo "$ export CTIDCLANGTIDYY=clang-tidy-16"
58+
echo "$ export CLANG=clang-17"
59+
echo "$ export CLANGXX=clang++-17"
60+
echo "$ export CTIDCLANGTIDYY=clang-tidy-17"
6161
echo "$ ./Tools/Linter/runClangTidy.sh"
6262
echo
6363
echo "******************************************************"
64-
echo "* Warning: clang v16 is currently used in CI tests. *"
64+
echo "* Warning: clang v17 is currently used in CI tests. *"
6565
echo "* It is therefore recommended to use this version. *"
6666
echo "* Otherwise, a newer version may find issues not *"
6767
echo "* currently covered by CI tests while older versions *"

Tools/QedTablesUtils/Source/QedTableCommons.H

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ bool Contains (const ContainerType& container, const ElementType& el)
1212

1313
void AbortWithMessage(const std::string& msg)
1414
{
15-
std::cout << "### ABORT : " << msg << std::endl;
16-
std::cout << "___________________________" << std::endl;
15+
std::cerr << "### ABORT : " << msg << "\n";
16+
std::cerr << "___________________________\n";
1717
exit(1);
1818
}
1919

0 commit comments

Comments
 (0)