Skip to content

ACLiC on Fedora 44 and GCC 16 in debug mode triggers uninitialized warning in RVec #22467

@vepadulano

Description

@vepadulano

Check duplicate issues.

  • Checked for duplicates

Description

The following investigation has been triggered by https://github.com/root-project/root/actions/runs/26832493714/job/79117385578?pr=22461

On Fedora 44 and GCC 16 ACLiC is triggering a very obscure uninitialized warning in RVec, the reproducer is simple (see below), but it must include both the usage of RVec<bool> and ACLiC directly. The equivalent code with a direct dictionary generation via rootcling followed by the creation of the corresponding shared library doesn't trigger the warning.

The following warnings are triggered:

In file included from /github/home/ROOT-CI/src/roottest/root/dataframe/mytest.cpp:1,
                 from /github/home/ROOT-CI/src/roottest/root/dataframe/mytest_cpp_ACLiC_dict.cxx:41:
/github/home/ROOT-CI/build/include/ROOT/RVec.hxx: In constructor ‘ROOT::Internal::VecOps::SmallVectorTemplateCommon<T>::SmallVectorTemplateCommon(size_t) [with T = bool]’:
/github/home/ROOT-CI/build/include/ROOT/RVec.hxx:222:68: warning: ‘<unknown>’ may be used uninitialized [-Wmaybe-uninitialized]
  222 |    SmallVectorTemplateCommon(size_t Size) : Base(getFirstEl(), Size) {}
      |                                                                    ^
/github/home/ROOT-CI/build/include/ROOT/RVec.hxx:214:10: note: by argument 1 of type ‘const ROOT::Internal::VecOps::SmallVectorTemplateCommon<bool>*’ to ‘void* ROOT::Internal::VecOps::SmallVectorTemplateCommon<T>::getFirstEl() const [with T = bool]’ declared here
  214 |    void *getFirstEl() const
      |          ^~~~~~~~~~
In file included from /github/home/ROOT-CI/src/roottest/root/dataframe/mytest.cpp:1,
                 from /github/home/ROOT-CI/src/roottest/root/dataframe/mytest_cpp_ACLiC_dict.cxx:41:
/github/home/ROOT-CI/build/include/ROOT/RVec.hxx: In constructor ‘ROOT::Internal::VecOps::SmallVectorTemplateCommon<T>::SmallVectorTemplateCommon(size_t) [with T = bool]’:
/github/home/ROOT-CI/build/include/ROOT/RVec.hxx:222:68: warning: ‘<unknown>’ may be used uninitialized [-Wmaybe-uninitialized]
  222 |    SmallVectorTemplateCommon(size_t Size) : Base(getFirstEl(), Size) {}
      |                                                                    ^
/github/home/ROOT-CI/build/include/ROOT/RVec.hxx:214:10: note: by argument 1 of type ‘const ROOT::Internal::VecOps::SmallVectorTemplateCommon<bool>*’ to ‘void* ROOT::Internal::VecOps::SmallVectorTemplateCommon<T>::getFirstEl() const [with T = bool]’ declared here
  214 |    void *getFirstEl() const
      |          ^~~~~~~~~~

Reproducer

$: cat mytest.cpp
#include <ROOT/RVec.hxx>

struct S{
  ROOT::RVec<bool> v;
};
$: root
root [0] gSystem->CompileMacro("mytest.cpp");

ROOT version

master

Installation method

Built from source

Operating system

Fedora 44

Additional context

No response

Metadata

Metadata

Assignees

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions