From 2231261937c28ce5b2954fce8658df02d10f3c2b Mon Sep 17 00:00:00 2001
From: Achim Gsell <achim.gsell@psi.ch>
Date: Sat, 4 May 2024 09:40:30 +0200
Subject: [PATCH] fixes for macOS 14.4 and Clang 15

---
 CMakeLists.txt                                |  3 +++
 optimizer/Expression/Parser/ast.hpp           |  4 ++--
 src/Classic/AbsBeamline/Component.h           |  2 +-
 src/Classic/AbsBeamline/OutputPlane.h         | 12 +++++------
 .../AbsBeamline/OutputPlaneTest.cpp           | 20 +++++++++----------
 .../AbsBeamline/ScalingFFAMagnetTest.cpp      |  2 +-
 6 files changed, 23 insertions(+), 20 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index b3deadaaf..abeb99cbd 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -99,6 +99,9 @@ elseif (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
     # is using this visibility setting.
     add_compile_options (-fvisibility=hidden)
     add_compile_options (-fvisibility-inlines-hidden)
+    add_compile_options (-Wno-deprecated-declarations)
+    add_compile_options (-Wno-deprecated-builtins)
+    add_compile_options (-Wno-deprecated-copy)
     if (ENABLE_OpenMP)
         if (CMAKE_HOST_APPLE)
             message(FATAL_ERROR "Apple Clang does not support OpenMP!")
diff --git a/optimizer/Expression/Parser/ast.hpp b/optimizer/Expression/Parser/ast.hpp
index d7b9d7c78..0e6198874 100644
--- a/optimizer/Expression/Parser/ast.hpp
+++ b/optimizer/Expression/Parser/ast.hpp
@@ -100,13 +100,13 @@ namespace client { namespace ast
         operand first;
         std::list<operation> rest;
     };
-
+#if 0
     // print functions for debugging
     inline std::ostream& operator<<(std::ostream& out, nil)
     {
         out << "nil"; return out;
     }
-
+#endif
     inline std::ostream& operator<<(std::ostream& out, identifier const& id)
     {
         out << id.name; return out;
diff --git a/src/Classic/AbsBeamline/Component.h b/src/Classic/AbsBeamline/Component.h
index c70d0a42e..9126f0ba8 100644
--- a/src/Classic/AbsBeamline/Component.h
+++ b/src/Classic/AbsBeamline/Component.h
@@ -159,7 +159,7 @@ public:
 
     virtual void getDimensions(double &zBegin, double &zEnd) const = 0;
 
-    virtual ElementType getType() const;
+    virtual ElementType getType() const override;
 
     /// Return design element.
     //  If this method returns a pointer to this component.
diff --git a/src/Classic/AbsBeamline/OutputPlane.h b/src/Classic/AbsBeamline/OutputPlane.h
index 28bc5a87d..8b78a2519 100644
--- a/src/Classic/AbsBeamline/OutputPlane.h
+++ b/src/Classic/AbsBeamline/OutputPlane.h
@@ -185,14 +185,14 @@ public:
                   double& t, Vector_t& R, Vector_t& P);
 
     /** Returns empty field */
-    NullField& getField() {return nullfield_m;}
+    NullField& getField() override {return nullfield_m;}
     /** Returns empty field */
-    const NullField& getField() const {return nullfield_m;}
+    const NullField& getField() const override {return nullfield_m;}
 
     /** Returns empty geometry */
-    StraightGeometry& getGeometry() {return geom_m;}
+    StraightGeometry& getGeometry() override {return geom_m;}
     /** Returns empty geometry */
-    const StraightGeometry& getGeometry() const {return geom_m;}
+    const StraightGeometry& getGeometry() const override {return geom_m;}
     /** Make an RK4Step
      *  @li tstep: time step [s]
      *  @li chargeToMass: chargeToMass ratio [m^2/s^2/GV]
@@ -209,13 +209,13 @@ public:
     void operator=(const OutputPlane&) = delete;
     
     //ElementBase::ElementType getType() const;
-    ElementType getType() const;
+    ElementType getType() const override;
     void recentre(Vector_t R, Vector_t P);
 
 
 private:
     /// Initialise peakfinder file
-    virtual void doInitialise(PartBunchBase<double, 3>* /*bunch*/);
+    virtual void doInitialise(PartBunchBase<double, 3>* /*bunch*/) override;
 
     /// Record probe hits when bunch particles pass
     inline bool doPreCheck(PartBunchBase<double, 3> *bunch) override;
diff --git a/tests/classic_src/AbsBeamline/OutputPlaneTest.cpp b/tests/classic_src/AbsBeamline/OutputPlaneTest.cpp
index a0a6b80e3..ffce876db 100644
--- a/tests/classic_src/AbsBeamline/OutputPlaneTest.cpp
+++ b/tests/classic_src/AbsBeamline/OutputPlaneTest.cpp
@@ -27,16 +27,16 @@
 class MockDipole : public Component {
 public:
     MockDipole(const std::string /*&name*/) : bfield_m(0, 1, 0), efield_m() {}
-    NullField &getField() {return nullfield_m;}
-    const NullField &getField() const {return nullfield_m;}
-    void accept(BeamlineVisitor& /*&visitor*/) const {}
-    void initialise(PartBunchBase<double, 3>* /*bunch*/, double& /*start*/, double& /*end*/) {}
-    void finalise() {}
-    bool bends() const {return true;}
-    void getDimensions(double& /*zBegin*/, double& /*zEnd*/) const {}
-    StraightGeometry& getGeometry() {return geom_m;}
-    const StraightGeometry& getGeometry() const {return geom_m;}
-    ElementBase* clone() const {return NULL;}
+    NullField &getField() override {return nullfield_m;}
+    const NullField &getField() const override {return nullfield_m;}
+    void accept(BeamlineVisitor& /*&visitor*/) const override {}
+    void initialise(PartBunchBase<double, 3>* /*bunch*/, double& /*start*/, double& /*end*/) override {}
+    void finalise() override {}
+    bool bends() const override {return true;}
+    void getDimensions(double& /*zBegin*/, double& /*zEnd*/) const override {}
+    StraightGeometry& getGeometry() override {return geom_m;}
+    const StraightGeometry& getGeometry() const override {return geom_m;}
+    ElementBase* clone() const override {return NULL;}
 
     void setField(Vector_t bfield, Vector_t efield) {bfield_m = bfield; efield_m = efield;}
 
diff --git a/tests/classic_src/AbsBeamline/ScalingFFAMagnetTest.cpp b/tests/classic_src/AbsBeamline/ScalingFFAMagnetTest.cpp
index 8b07e5808..74f3155e1 100644
--- a/tests/classic_src/AbsBeamline/ScalingFFAMagnetTest.cpp
+++ b/tests/classic_src/AbsBeamline/ScalingFFAMagnetTest.cpp
@@ -67,7 +67,7 @@ public:
 
     Vector_t getB(Vector_t pos) {
         Vector_t mom, B, E;
-        double t;
+        double t = 0.0;
         sector_m->apply(pos, mom, t, E, B);
         return B;
     }
-- 
GitLab