NTNU-IHB / FMI4cpp

FMI 2.0 implementation written in modern C++.
MIT License
96 stars 36 forks source link

failure to compile with clang and many warnings due to overusing std::move #121

Closed prudhomm closed 2 years ago

prudhomm commented 2 years ago

fmi4cpp fails to compile with clang where as g++ let it pass

/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/model_variables.cpp:10:18: error: defaulting this default constructor would delete it after its first declaration
model_variables::model_variables() = default;
                 ^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/xml/model_variables.hpp:18:40: note: default constructor of 'model_variables' is implicitly deleted because field 'variables_' of const-qualified type 'const std::vector<scalar_variable>' would not be initialized
    const std::vector<scalar_variable> variables_;
                                       ^
1 error generated.

here are the warnings with clang which are mainly due to overusing std::move (prevents from using copy ellision) but not only I would suggest to include ubuntu-20.04 and more recent gcc compilers including clang

make
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmu_resource.cpp.o
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/fmu.cpp.o
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/fmu.cpp:2:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/fmu.hpp:6:
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/me_fmu.hpp:29:34: warning: 'new_instance' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
    std::unique_ptr<me_instance> new_instance(bool visible = false, bool loggingOn = false);
                                 ^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmu_base.hpp:58:42: note: overridden virtual function is here
    virtual std::unique_ptr<me_instance> new_instance(bool visible, bool loggingOn) = 0;
                                         ^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/fmu.cpp:37:25: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]
    modelDescription_ = std::move(parse_model_description(resource_->model_description_path()));
                        ^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/fmu.cpp:37:25: note: remove std::move call here
    modelDescription_ = std::move(parse_model_description(resource_->model_description_path()));
                        ^~~~~~~~~~                                                            ~
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/fmu.cpp:62:54: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]
    std::shared_ptr<const cs_model_description> cs = std::move(modelDescription_->as_cs_description());
                                                     ^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/fmu.cpp:62:54: note: remove std::move call here
    std::shared_ptr<const cs_model_description> cs = std::move(modelDescription_->as_cs_description());
                                                     ^~~~~~~~~~                                      ~
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/fmu.cpp:68:54: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]
    std::shared_ptr<const me_model_description> me = std::move(modelDescription_->as_me_description());
                                                     ^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/fmu.cpp:68:54: note: remove std::move call here
    std::shared_ptr<const me_model_description> me = std::move(modelDescription_->as_me_description());
                                                     ^~~~~~~~~~                                      ~
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/fmu.cpp:2:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/fmu.hpp:5:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/cs_fmu.hpp:5:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/cs_library.hpp:5:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/fmi2_library.hpp:7:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmu_resource.hpp:5:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fs_portability.hpp:6:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/filesystem:45:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/fs_path.h:37:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/locale:43:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/locale_conv.h:41:
/usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unique_ptr.h:85:2: warning: delete called on non-final 'fmi4cpp::fmi2::cs_fmu' that has virtual functions but non-virtual destructor [-Wdelete-non-abstract-non-virtual-dtor]
        delete __ptr;
        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unique_ptr.h:361:4: note: in instantiation of member function 'std::default_delete<fmi4cpp::fmi2::cs_fmu>::operator()' requested here
          get_deleter()(std::move(__ptr));
          ^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/fmu.cpp:63:12: note: in instantiation of member function 'std::unique_ptr<fmi4cpp::fmi2::cs_fmu, std::default_delete<fmi4cpp::fmi2::cs_fmu> >::~unique_ptr' requested here
    return std::make_unique<cs_fmu>(resource_, cs);
           ^
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/fmu.cpp:2:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/fmu.hpp:5:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/cs_fmu.hpp:5:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/cs_library.hpp:5:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/fmi2_library.hpp:7:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmu_resource.hpp:5:
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fs_portability.hpp:6:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/filesystem:45:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/fs_path.h:37:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/locale:43:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/locale_conv.h:41:
/usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unique_ptr.h:85:2: warning: delete called on non-final 'fmi4cpp::fmi2::me_fmu' that has virtual functions but non-virtual destructor [-Wdelete-non-abstract-non-virtual-dtor]
        delete __ptr;
        ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unique_ptr.h:361:4: note: in instantiation of member function 'std::default_delete<fmi4cpp::fmi2::me_fmu>::operator()' requested here
          get_deleter()(std::move(__ptr));
          ^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/fmu.cpp:69:12: note: in instantiation of member function 'std::unique_ptr<fmi4cpp::fmi2::me_fmu, std::default_delete<fmi4cpp::fmi2::me_fmu> >::~unique_ptr' requested here
    return std::make_unique<me_fmu>(resource_, me);
           ^
6 warnings generated.
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/fmi2_library.cpp.o
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/cs_fmu.cpp.o
        Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/me_fmu.cpp.o
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/me_fmu.cpp:2:
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/me_fmu.hpp:29:34: warning: 'new_instance' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
    std::unique_ptr<me_instance> new_instance(bool visible = false, bool loggingOn = false);
                                 ^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmu_base.hpp:58:42: note: overridden virtual function is here
    virtual std::unique_ptr<me_instance> new_instance(bool visible, bool loggingOn) = 0;
                                         ^
1 warning generated.
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/cs_library.cpp.o
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/cs_slave.cpp.o
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/me_library.cpp.o
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/me_instance.cpp.o
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/xml/enums.cpp.o
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/xml/model_description.cpp.o
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/xml/model_description_parser.cpp.o
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/model_description_parser.cpp:288:36: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]
            base.model_variables = std::move(parse_model_variables(v.second));
                                   ^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/model_description_parser.cpp:288:36: note: remove std::move call here
            base.model_variables = std::move(parse_model_variables(v.second));
                                   ^~~~~~~~~~                               ~
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/model_description_parser.cpp:290:36: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]
            base.model_structure = std::move(parse_model_structure(v.second));
                                   ^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/model_description_parser.cpp:290:36: note: remove std::move call here
            base.model_structure = std::move(parse_model_structure(v.second));
                                   ^~~~~~~~~~                               ~
2 warnings generated.
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/xml/model_variables.cpp.o
Building CXX object _deps/fmi4cpp-build/src/CMakeFiles/fmi4cpp.dir/fmi4cpp/fmi2/xml/scalar_variable.cpp.o
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/scalar_variable.cpp:3:
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/xml/typed_scalar_variable.hpp:29:11: warning: field 'variable_' will be initialized after field 'attribute_' [-Wreorder-ctor]
        : variable_(std::move(variable))
          ^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/xml/typed_scalar_variable.hpp:90:11: note: in instantiation of member function 'fmi4cpp::fmi2::typed_scalar_variable<int, fmi4cpp::fmi2::integer_attribute>::typed_scalar_variable' requested here
        : typed_scalar_variable<T, U>(variable, attribute)
          ^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/scalar_variable.cpp:115:7: note: in instantiation of member function 'fmi4cpp::fmi2::bounded_scalar_variable<int, fmi4cpp::fmi2::integer_attribute>::bounded_scalar_variable' requested here
    : bounded_scalar_variable(variable, attribute)
      ^
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/scalar_variable.cpp:3:
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/xml/typed_scalar_variable.hpp:29:11: warning: field 'variable_' will be initialized after field 'attribute_' [-Wreorder-ctor]
        : variable_(std::move(variable))
          ^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/xml/typed_scalar_variable.hpp:90:11: note: in instantiation of member function 'fmi4cpp::fmi2::typed_scalar_variable<double, fmi4cpp::fmi2::real_attribute>::typed_scalar_variable' requested here
        : typed_scalar_variable<T, U>(variable, attribute)
          ^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/scalar_variable.cpp:122:7: note: in instantiation of member function 'fmi4cpp::fmi2::bounded_scalar_variable<double, fmi4cpp::fmi2::real_attribute>::bounded_scalar_variable' requested here
    : bounded_scalar_variable(variable, attribute)
      ^
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/scalar_variable.cpp:3:
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/xml/typed_scalar_variable.hpp:29:11: warning: field 'variable_' will be initialized after field 'attribute_' [-Wreorder-ctor]
        : variable_(std::move(variable))
          ^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/scalar_variable.cpp:164:7: note: in instantiation of member function 'fmi4cpp::fmi2::typed_scalar_variable<std::__cxx11::basic_string<char>, fmi4cpp::fmi2::string_attribute>::typed_scalar_variable' requested here
    : typed_scalar_variable(variable, attribute)
      ^
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/scalar_variable.cpp:3:
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/xml/typed_scalar_variable.hpp:29:11: warning: field 'variable_' will be initialized after field 'attribute_' [-Wreorder-ctor]
        : variable_(std::move(variable))
          ^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/scalar_variable.cpp:171:7: note: in instantiation of member function 'fmi4cpp::fmi2::typed_scalar_variable<bool, fmi4cpp::fmi2::boolean_attribute>::typed_scalar_variable' requested here
    : typed_scalar_variable(variable, attribute)
      ^
In file included from /home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/scalar_variable.cpp:3:
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/../include/fmi4cpp/fmi2/xml/typed_scalar_variable.hpp:29:11: warning: field 'variable_' will be initialized after field 'attribute_' [-Wreorder-ctor]
        : variable_(std::move(variable))
          ^
/home/prudhomm/Devel/feelpp/feelpp/contrib/fmi4cpp/src/fmi4cpp/fmi2/xml/scalar_variable.cpp:178:7: note: in instantiation of member function 'fmi4cpp::fmi2::typed_scalar_variable<int, fmi4cpp::fmi2::enumeration_attribute>::typed_scalar_variable' requested here
    : typed_scalar_variable(variable, attribute)
      ^
5 warnings generated.
markaren commented 2 years ago

Will consider upgrading/add runners in the future