workaround gcc compiler bug

There is a regression in gcc since version 12.0 to at least 12.2.1 that
causes gcc to emit incorrect machine code.

Code like

  std::optional<int> o1;
  try {
    o1 = foo(); // foo can throw
  } catch(...) {
    process(o1);
  }

  std::optional<double> o2{o1};
  bar(o2);

may trigger -Wmaybe-uninitialized with -O2 optimization and the call
process(o1) results in the store for variable o1 removed which makes
the valgrind report uninitialized values (see [1]).

Interestingly, we can work around the bug by setting both std::optional
to contain the same type. I prefer altering our code a bit so our code
is compiled correctly by even by gcc versions that contain this
unfortunate regression.

Thanks Petr Gotthard for discovering the possible crash in our code.

[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109434

Bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109434
Change-Id: I29d73533b8a8550aeb7f6f0b92b5287021a4f193
Signed-off-by: Jan Kundrát <jan.kundrat@cesnet.cz>
1 file changed
tree: 16e5d77ffc2368ae5f5fa29963363025f4da43f4
  1. .clang-format
  2. .gitmodules
  3. .zuul.yaml
  4. CMakeLists.txt
  5. Doxyfile.in
  6. LICENSE
  7. README.md
  8. ci/
  9. cmake/
  10. docs/
  11. src/
  12. tests/
README.md

Console interface to NETCONF servers

License Gerrit Zuul CI taiga.io

This program provides an interactive console for working with YANG data. It can connect to NETCONF servers, work as a standalone YANG data editor, or talk to sysrepo locally.

Installation

For building, one needs:

The build process uses CMake. A quick-and-dirty build with no fancy options can be as simple as mkdir build && cd build && cmake .. && make && make install.

Bug Reporting

Issue reporting and feature requests are welcome via Taiga.io.

Development

We are using Gerrit for patch submission, code review and Continuous Integration (CI). A quick introduction is recommended for first-time Gerrit users. Choose CESNET - Sign in with GitHub for login. Development roadmap and planning happens over Taiga.io.

Credits

Copyright © CESNET, https://www.cesnet.cz/ . Portions copyright © Faculty of Information Technology, Czech Technical University in Prague, https://fit.cvut.cz/ . Most of the code was written by Václav Kubernát (CESNET, formerly FIT ČVUT) and Jan Kundrát (CESNET). The project is distributed under the terms of the Apache 2.0 license.