Skip to content

maybe-uninitialized when built under TSAN #474

Description

@danth

Description

When the whole codebase is compiled under TSAN (not just the tests), there is a compiler warning about a value being used uninitialized.

Analysis results

No response

Solution

No response

Error Occurrence Rate

Reproducible

How to reproduce

bazel build //score/... --config=x86_64-linux --config=tsan

Supporting Information

https://github.com/eclipse-score/lifecycle/actions/runs/31793467286/job/94745294931

In file included from bazel-out/k8-fastbuild-tsan/bin/external/score_baselibs+/score/static_reflection_with_serialization/visitor/_virtual_includes/visitor/static_reflection_with_serialization/visitor/visit_as_struct.h:23,
                 from external/score_baselibs+/score/mw/log/detail/logging_identifier.h:18,
                 from external/score_baselibs+/score/mw/log/log_stream.h:19,
                 from external/score_baselibs+/score/mw/log/logger.h:16,
                 from bazel-out/k8-fastbuild-tsan/bin/score/launch_manager/src/daemon/src/common/_virtual_includes/log/score/mw/launch_manager/common/log.hpp:25,
                 from ./score/launch_manager/src/daemon/src/configuration/details/flatbuffer_type_converters.hpp:21,
                 from score/launch_manager/src/daemon/src/configuration/details/flatbuffer_type_converters.cpp:14:
external/score_baselibs+/score/quality/compiler_warnings/deprecation.h:22:26: warning: 'using score_deprecated_macro_def___COUNTER__ = int' is deprecated: STRUCT_VISITABLE is deprecated, use SCORE_STRUCT_VISITABLE instead. [-Wdeprecated-declarations]
   22 |     static_assert(sizeof(score_deprecated_macro_def_##ID) > 0, "")
      |                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~
external/score_baselibs+/score/quality/compiler_warnings/deprecation.h:19:44: note: in expansion of macro 'SCORE_DEPRECATE_MACRO_USE_IMPL'
   19 | #define SCORE_DEPRECATE_MACRO_USE(MESSAGE) SCORE_DEPRECATE_MACRO_USE_IMPL(MESSAGE, __COUNTER__)
      |                                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bazel-out/k8-fastbuild-tsan/bin/external/score_baselibs+/score/static_reflection_with_serialization/visitor/_virtual_includes/visitor/static_reflection_with_serialization/visitor/visit_as_struct.h:853:5: note: in expansion of macro 'SCORE_DEPRECATE_MACRO_USE'
  853 |     SCORE_DEPRECATE_MACRO_USE("STRUCT_VISITABLE is deprecated, use SCORE_STRUCT_VISITABLE instead.");             \
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~
external/score_baselibs+/score/mw/log/detail/logging_identifier.h:84:1: note: in expansion of macro 'STRUCT_VISITABLE'
   84 | STRUCT_VISITABLE(LoggingIdentifier, data)
      | ^~~~~~~~~~~~~~~~
external/score_baselibs+/score/quality/compiler_warnings/deprecation.h:21:11: note: declared here
   21 |     using score_deprecated_macro_def_##ID [[deprecated(MESSAGE)]] = int;                               \
      |           ^~~~~~~~~~~~~~~~~~~~~~~~~~~
external/score_baselibs+/score/quality/compiler_warnings/deprecation.h:19:44: note: in expansion of macro 'SCORE_DEPRECATE_MACRO_USE_IMPL'
   19 | #define SCORE_DEPRECATE_MACRO_USE(MESSAGE) SCORE_DEPRECATE_MACRO_USE_IMPL(MESSAGE, __COUNTER__)
      |                                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bazel-out/k8-fastbuild-tsan/bin/external/score_baselibs+/score/static_reflection_with_serialization/visitor/_virtual_includes/visitor/static_reflection_with_serialization/visitor/visit_as_struct.h:853:5: note: in expansion of macro 'SCORE_DEPRECATE_MACRO_USE'
  853 |     SCORE_DEPRECATE_MACRO_USE("STRUCT_VISITABLE is deprecated, use SCORE_STRUCT_VISITABLE instead.");             \
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~
external/score_baselibs+/score/mw/log/detail/logging_identifier.h:84:1: note: in expansion of macro 'STRUCT_VISITABLE'
   84 | STRUCT_VISITABLE(LoggingIdentifier, data)
      | ^~~~~~~~~~~~~~~~
In file included from bazel-out/k8-fastbuild-tsan/bin/score/launch_manager/src/daemon/src/configuration/_virtual_includes/config_loader/score/mw/launch_manager/configuration/config_loader.hpp:20,
                 from ./score/launch_manager/src/daemon/src/configuration/details/flatbuffer_type_converters.hpp:17:
In constructor 'constexpr score::cpp::expected<T, E>::expected(U&&) [with U = std::optional<score::mw::lifecycle::internal::configuration::RestartAction>; <template-parameter-2-2> = void; <template-parameter-2-3> = void; T = std::optional<score::mw::lifecycle::internal::configuration::RestartAction>; E = score::mw::lifecycle::internal::configuration::IConfigLoader::Error]',
    inlined from 'score::cpp::expected<std::optional<score::mw::lifecycle::internal::configuration::RestartAction>, score::mw::lifecycle::internal::configuration::IConfigLoader::Error> score::mw::lifecycle::internal::configuration::details::convertRestartAction(const score::mw::lifecycle::internal::configuration::fb::RestartAction*)' at score/launch_manager/src/daemon/src/configuration/details/flatbuffer_type_converters.cpp:194:57:
external/score_baselibs+/score/language/futurecpp/include/score/expected.hpp:464:9: error: '*(uint32_t*)((char*)&<unnamed> + offsetof(score::cpp::expected<std::optional<score::mw::lifecycle::internal::configuration::RestartAction>, score::mw::lifecycle::internal::configuration::IConfigLoader::Error>,score::cpp::expected<std::optional<score::mw::lifecycle::internal::configuration::RestartAction>, score::mw::lifecycle::internal::configuration::IConfigLoader::Error>::<unnamed>.score::cpp::detail::expected::move_assign_base<std::optional<score::mw::lifecycle::internal::configuration::RestartAction>, score::mw::lifecycle::internal::configuration::IConfigLoader::Error, true>::<unnamed>.score::cpp::detail::expected::move_base<std::optional<score::mw::lifecycle::internal::configuration::RestartAction>, score::mw::lifecycle::internal::configuration::IConfigLoader::Error, true>::<unnamed>.score::cpp::detail::expected::copy_assign_base<std::optional<score::mw::lifecycle::internal::configuration::RestartAction>, score::mw::lifecycle::internal::configuration::IConfigLoader::Error, true>::<unnamed>.score::cpp::detail::expected::copy_base<std::optional<score::mw::lifecycle::internal::configuration::RestartAction>, score::mw::lifecycle::internal::configuration::IConfigLoader::Error, true>::<unnamed>.score::cpp::detail::expected::destructor_base<std::optional<score::mw::lifecycle::internal::configuration::RestartAction>, score::mw::lifecycle::internal::configuration::IConfigLoader::Error, true>::<unnamed>))' may be used uninitialized [-Werror=maybe-uninitialized]
  464 |         static_cast<void>(::new (&this->value_) T{std::forward<U>(rhs)});
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
score/launch_manager/src/daemon/src/configuration/details/flatbuffer_type_converters.cpp: In function 'score::cpp::expected<std::optional<score::mw::lifecycle::internal::configuration::RestartAction>, score::mw::lifecycle::internal::configuration::IConfigLoader::Error> score::mw::lifecycle::internal::configuration::details::convertRestartAction(const score::mw::lifecycle::internal::configuration::fb::RestartAction*)':
score/launch_manager/src/daemon/src/configuration/details/flatbuffer_type_converters.cpp:194:21: note: '<anonymous>' declared here
  194 |         return std::optional<RestartAction>{std::nullopt};
      |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In constructor 'constexpr score::cpp::expected<T, E>::expected(U&&) [with U = std::optional<score::mw::lifecycle::internal::configuration::RestartAction>; <template-parameter-2-2> = void; <template-parameter-2-3> = void; T = std::optional<score::mw::lifecycle::internal::configuration::RestartAction>; E = score::mw::lifecycle::internal::configuration::IConfigLoader::Error]',
    inlined from 'score::cpp::expected<std::optional<score::mw::lifecycle::internal::configuration::RestartAction>, score::mw::lifecycle::internal::configuration::IConfigLoader::Error> score::mw::lifecycle::internal::configuration::details::convertRestartAction(const score::mw::lifecycle::internal::configuration::fb::RestartAction*)' at score/launch_manager/src/daemon/src/configuration/details/flatbuffer_type_converters.cpp:194:57:
external/score_baselibs+/score/language/futurecpp/include/score/expected.hpp:464:9: error: '((uint32_t*)((char*)&<unnamed> + offsetof(score::cpp::expected<std::optional<score::mw::lifecycle::internal::configuration::RestartAction>, score::mw::lifecycle::internal::configuration::IConfigLoader::Error>,score::cpp::expected<std::optional<score::mw::lifecycle::internal::configuration::RestartAction>, score::mw::lifecycle::internal::configuration::IConfigLoader::Error>::<unnamed>.score::cpp::detail::expected::move_assign_base<std::optional<score::mw::lifecycle::internal::configuration::RestartAction>, score::mw::lifecycle::internal::configuration::IConfigLoader::Error, true>::<unnamed>.score::cpp::detail::expected::move_base<std::optional<score::mw::lifecycle::internal::configuration::RestartAction>, score::mw::lifecycle::internal::configuration::IConfigLoader::Error, true>::<unnamed>.score::cpp::detail::expected::copy_assign_base<std::optional<score::mw::lifecycle::internal::configuration::RestartAction>, score::mw::lifecycle::internal::configuration::IConfigLoader::Error, true>::<unnamed>.score::cpp::detail::expected::copy_base<std::optional<score::mw::lifecycle::internal::configuration::RestartAction>, score::mw::lifecycle::internal::configuration::IConfigLoader::Error, true>::<unnamed>.score::cpp::detail::expected::destructor_base<std::optional<score::mw::lifecycle::internal::configuration::RestartAction>, score::mw::lifecycle::internal::configuration::IConfigLoader::Error, true>::<unnamed>)))[1]' may be used uninitialized [-Werror=maybe-uninitialized]
  464 |         static_cast<void>(::new (&this->value_) T{std::forward<U>(rhs)});
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
score/launch_manager/src/daemon/src/configuration/details/flatbuffer_type_converters.cpp: In function 'score::cpp::expected<std::optional<score::mw::lifecycle::internal::configuration::RestartAction>, score::mw::lifecycle::internal::configuration::IConfigLoader::Error> score::mw::lifecycle::internal::configuration::details::convertRestartAction(const score::mw::lifecycle::internal::configuration::fb::RestartAction*)':
score/launch_manager/src/daemon/src/configuration/details/flatbuffer_type_converters.cpp:194:21: note: '<anonymous>' declared here
  194 |         return std::optional<RestartAction>{std::nullopt};
      |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1plus: all warnings being treated as errors

Classification

Minor

First Affected Release

not released (main)

Last Affected Release

not released (main)

Expected Fixed Release

before release (main)

Category

  • Safety Relevant
  • Security Relevant

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    Status
    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions