Fix -Wsubobject-linkage warning (#6243)

* Fix -Wsubobject-linkage warning

Having tk::spline header-only implementation included from
SmallAreaInfillFlowCompensator.hpp makes
SmallAreaInfillFlowCompensator::flowModel have separate (albeit the
same) implementation in each translation unit.

In order to fix this issue, SmallAreaInfillFlowCompensator::flowModel
converted to opaque 'pimpl'

* spline: remove anonymous namespace

Remove outer anonymous namespace from splice.h to make
forward declaration for tk::spline possible.
This commit is contained in:
Dima Buzdyk 2024-08-04 08:48:24 +06:00 committed by GitHub
parent 9ff0e9335f
commit e6ed93f0c6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 9 additions and 21 deletions

View file

@ -15,6 +15,7 @@
#include "../PrintConfig.hpp" #include "../PrintConfig.hpp"
#include "SmallAreaInfillFlowCompensator.hpp" #include "SmallAreaInfillFlowCompensator.hpp"
#include "spline/spline.h"
#include <boost/log/trivial.hpp> #include <boost/log/trivial.hpp>
namespace Slic3r { namespace Slic3r {
@ -79,6 +80,9 @@ SmallAreaInfillFlowCompensator::SmallAreaInfillFlowCompensator(const Slic3r::GCo
BOOST_LOG_TRIVIAL(error) << "Error parsing small area infill compensation model: " << e.what(); BOOST_LOG_TRIVIAL(error) << "Error parsing small area infill compensation model: " << e.what();
} }
} }
SmallAreaInfillFlowCompensator::~SmallAreaInfillFlowCompensator() = default;
double SmallAreaInfillFlowCompensator::flow_comp_model(const double line_length) double SmallAreaInfillFlowCompensator::flow_comp_model(const double line_length)
{ {
if(flowModel == nullptr) if(flowModel == nullptr)

View file

@ -4,25 +4,20 @@
#include "../libslic3r.h" #include "../libslic3r.h"
#include "../PrintConfig.hpp" #include "../PrintConfig.hpp"
#include "../ExtrusionEntity.hpp" #include "../ExtrusionEntity.hpp"
#include "spline/spline.h"
#include <memory> #include <memory>
namespace Slic3r { namespace tk {
class spline;
} // namespace tk
#ifndef _WIN32 namespace Slic3r {
// Currently on Linux/macOS, this class spits out large amounts of subobject linkage
// warnings because of the flowModel field. tk::spline is in an anonymous namespace which
// causes this issue. Until the issue can be solved, this is a temporary solution.
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wsubobject-linkage"
#endif
class SmallAreaInfillFlowCompensator class SmallAreaInfillFlowCompensator
{ {
public: public:
SmallAreaInfillFlowCompensator() = delete; SmallAreaInfillFlowCompensator() = delete;
explicit SmallAreaInfillFlowCompensator(const Slic3r::GCodeConfig& config); explicit SmallAreaInfillFlowCompensator(const Slic3r::GCodeConfig& config);
~SmallAreaInfillFlowCompensator() = default; ~SmallAreaInfillFlowCompensator();
double modify_flow(const double line_length, const double dE, const ExtrusionRole role); double modify_flow(const double line_length, const double dE, const ExtrusionRole role);
@ -39,10 +34,6 @@ private:
double max_modified_length() { return eLengths.back(); } double max_modified_length() { return eLengths.back(); }
}; };
#ifndef _WIN32
#pragma GCC diagnostic pop
#endif
} // namespace Slic3r } // namespace Slic3r
#endif /* slic3r_GCode_SmallAreaInfillFlowCompensator_hpp_ */ #endif /* slic3r_GCode_SmallAreaInfillFlowCompensator_hpp_ */

View file

@ -46,11 +46,6 @@
#pragma GCC diagnostic ignored "-Wunused-function" #pragma GCC diagnostic ignored "-Wunused-function"
#endif #endif
// unnamed namespace only because the implementation is in this
// header file and we don't want to export symbols to the obj files
namespace
{
namespace tk namespace tk
{ {
@ -942,8 +937,6 @@ std::vector<double> solve_cubic(double a, double b, double c, double d,
} // namespace tk } // namespace tk
} // namespace
#if !defined(_MSC_VER) #if !defined(_MSC_VER)
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
#endif #endif