[Bug tree-optimization/108667] Spurious "may be used uninitialized [-Wmaybe-uninitialized]" warning

2023-02-06 Thread alvaro.begue at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108667

--- Comment #4 from Alvaro Begue  ---
Original code:

#include 
#include 
#include 

template 
class Signal {
public:
  using Slot = std::function;
  using FoldingFunction = std::function;

  Signal(FoldingFunction fold, ReturnType initial)
: fold(fold), initial(initial) {}

  void connect(Slot slot) {
slots.push_back(slot);
  }

  ReturnType operator() (ArgumentTypes... arguments) {
ReturnType result = initial;

for (const auto  : slots)
  result = fold(result, slot(arguments...));

return result;
  }

private:
  std::vector slots;
  FoldingFunction fold;
  ReturnType initial;
};


int four() { return 4; }

int five() { return 5; }

int main() {
  Signal get_total([](int cumulative_value, int new_term){
return cumulative_value + new_term;
  }, 0);
  get_total.connect(four);
  get_total.connect(five);
  std::cout << get_total() << '\n';
}

[Bug tree-optimization/108667] Spurious "may be used uninitialized [-Wmaybe-uninitialized]" warning

2023-02-03 Thread alvaro.begue at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108667

--- Comment #2 from Alvaro Begue  ---
Yes, this is a reduction of real code. I'm writing a signal class and I wrote a
small test for it. It worked fine when compiling unoptimized, but the optimized
version gave me this odd warning.

Would it be interesting to see the original code? It's only around 50 lines of
code.

[Bug c++/108667] New: Spurious "maybe used uninitialized [-Wmaybe-uninitialized]" warning

2023-02-03 Thread alvaro.begue at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108667

Bug ID: 108667
   Summary: Spurious "maybe used uninitialized
[-Wmaybe-uninitialized]" warning
   Product: gcc
   Version: unknown
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
  Assignee: unassigned at gcc dot gnu.org
  Reporter: alvaro.begue at gmail dot com
  Target Milestone: ---

I am using g++-12.1.0 on x86-64, but g++-12.2.0 in godbolt.org shows the same
problem

The options are -O3 -Wmaybe-uninitialized .

The code:

#include 

struct S {
S(std::function f) : f(f) {}

std::function g;
std::function f;
};

int main() {
S s([](){});
s.f();
}

Compiler output (from godbolt.org):
In file included from
/opt/compiler-explorer/gcc-12.2.0/include/c++/12.2.0/functional:59,
 from :1:
In copy constructor 'std::function<_Res(_ArgTypes ...)>::function(const
std::function<_Res(_ArgTypes ...)>&) [with _Res = void; _ArgTypes = {}]',
inlined from 'S::S(std::function)' at :4:34,
inlined from 'int main()' at :11:15:
/opt/compiler-explorer/gcc-12.2.0/include/c++/12.2.0/bits/std_function.h:391:17:
warning: '' may be used uninitialized [-Wmaybe-uninitialized]
  391 | __x._M_manager(_M_functor, __x._M_functor,
__clone_functor);
  | ^~
/opt/compiler-explorer/gcc-12.2.0/include/c++/12.2.0/bits/std_function.h: In
function 'int main()':
/opt/compiler-explorer/gcc-12.2.0/include/c++/12.2.0/bits/std_function.h:267:7:
note: by argument 2 of type 'const std::_Any_data&' to 'static bool
std::_Function_handler<_Res(_ArgTypes ...),
_Functor>::_M_manager(std::_Any_data&, const std::_Any_data&,
std::_Manager_operation) [with _Res = void; _Functor = main()::;
_ArgTypes = {}]' declared here
  267 |   _M_manager(_Any_data& __dest, const _Any_data& __source,
  |   ^~
:11:15: note: '' declared here
   11 | S s([](){});
  |   ^
Compiler returned: 0