openbmc / phosphor-state-manager

Apache License 2.0
11 stars 21 forks source link

build error: currentHostState hidden #24

Closed gabonator closed 1 year ago

gabonator commented 1 year ago

Getting errors when trying to compile, related to mismatched declaration of overridden methods:

In file included from ../hypervisor_state_manager.hpp:6,
                 from ../hypervisor_state_manager.cpp:3:
subprojects/phosphor-dbus-interfaces/gen/xyz/openbmc_project/State/Host/server.hpp:77:27: error: ‘virtual sdbusplus::common::xyz::openbmc_project::state::Host::HostState sdbusplus::server::xyz::openbmc_project::state::Host::currentHostState(sdbusplus::common::xyz::openbmc_project::state::Host::HostState, bool)’ was hidden [-Werror=overloaded-virtual=]
   77 |         virtual HostState currentHostState(HostState value,
      |                           ^~~~~~~~~~~~~~~~
../hypervisor_state_manager.hpp:65:29: note:   by ‘phosphor::state::manager::Hypervisor::currentHostState’
   65 |     server::Host::HostState currentHostState();
      |                             ^~~~~~~~~~~~~~~~
subprojects/phosphor-dbus-interfaces/gen/xyz/openbmc_project/State/Host/server.hpp:75:27: error: ‘virtual sdbusplus::common::xyz::openbmc_project::state::Host::HostState sdbusplus::server::xyz::openbmc_project::state::Host::currentHostState() const’ was hidden [-Werror=overloaded-virtual=]
   75 |         virtual HostState currentHostState() const;
      |                           ^~~~~~~~~~~~~~~~
../hypervisor_state_manager.hpp:65:29: note:   by ‘phosphor::state::manager::Hypervisor::currentHostState’
   65 |     server::Host::HostState currentHostState();
      |                             ^~~~~~~~~~~~~~~~

hypervisor_state_manager.hpp is trying to override currentHostState methods:

    /** @brief Set value of CurrentHostState */
    server::Host::HostState
        currentHostState(server::Host::HostState value) override;

    /** @brief Return value of CurrentHostState */
    server::Host::HostState currentHostState();

While the declaration in subprojects/phosphor-dbus-interfaces/gen/xyz/openbmc_project/State/Host/server.hpp looks like this:

        /** Get value of CurrentHostState */
        virtual HostState currentHostState() const;
        /** Set value of CurrentHostState with option to skip sending signal */
        virtual HostState currentHostState(HostState value,
               bool skipSignal);
        /** Set value of CurrentHostState */
        virtual HostState currentHostState(HostState value);

Following patch fixes the issue (note the missing const qualifier):

diff --git a/hypervisor_state_manager.cpp b/hypervisor_state_manager.cpp
index da4d37f..dbad524 100644
--- a/hypervisor_state_manager.cpp
+++ b/hypervisor_state_manager.cpp
@@ -54,7 +54,7 @@ server::Host::HostState Hypervisor::currentHostState(HostState value)
     return server::Host::currentHostState(value);
 }

-server::Host::HostState Hypervisor::currentHostState()
+server::Host::HostState Hypervisor::currentHostState() const
 {
     return server::Host::currentHostState();
 }
diff --git a/hypervisor_state_manager.hpp b/hypervisor_state_manager.hpp
index 6253c38..b1552d3 100644
--- a/hypervisor_state_manager.hpp
+++ b/hypervisor_state_manager.hpp
@@ -62,7 +62,7 @@ class Hypervisor : public HypervisorInherit
         currentHostState(server::Host::HostState value) override;

     /** @brief Return value of CurrentHostState */
-    server::Host::HostState currentHostState();
+    server::Host::HostState currentHostState() const override;

     /** @brief Check if BootProgress change affects hypervisor state
      *
geissonator commented 1 year ago

Thanks for the bug report (and solution). I'm not sure why I don't see this when building in CI or locally but seems like a pretty obvious and easy fix. Change up at https://gerrit.openbmc.org/c/openbmc/phosphor-state-manager/+/66216.