https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96863

            Bug ID: 96863
           Summary: [11 Regression] ICE: in
                    output_constructor_regular_field, at varasm.c:5223
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gcc-bugs at marehr dot dialup.fu-berlin.de
  Target Milestone: ---

Hi gcc-team,

the following code ices:

```c++
#include <tuple>
namespace seqan3 {
template <typename, typename = void> struct pipeable_config_element;
template <typename derived_t>
struct pipeable_config_element<derived_t, void> {};
template <typename, typename value_t> struct pipeable_config_element {
  value_t value;
};
struct gap_scheme {
  int gap = 1;
};
template <typename... configs_t>
struct configuration : std::tuple<configs_t...> {
  template <typename derived_t, typename value_t>
  constexpr configuration(pipeable_config_element<derived_t, value_t> const) {}
  template <typename...> constexpr configuration(std::tuple<> const) {}
  template <typename config_element_t>
  constexpr auto push_back(config_element_t) const {
    return configuration<configs_t..., config_element_t>{std::tuple{}};
  }
};
template <typename derived_t, typename value_t>
configuration(pipeable_config_element<derived_t, value_t> const)
    -> configuration<derived_t>;
} // namespace seqan3
namespace seqan3::align_cfg {
template <typename gap_scheme_t>
struct gap : pipeable_config_element<gap<gap_scheme_t>, gap_scheme_t> {
  gap() = default;
  constexpr gap(gap_scheme_t const)
      : pipeable_config_element<gap, gap_scheme_t>() {}
};
} // namespace seqan3::align_cfg
namespace seqan3::detail {
struct method_local_tag : pipeable_config_element<method_local_tag> {};
} // namespace seqan3::detail
namespace seqan3::align_cfg {
seqan3::detail::method_local_tag method_local;
template <typename scoring_scheme_t>
struct scoring_scheme : pipeable_config_element<int, void> {
  scoring_scheme() = default;
  constexpr scoring_scheme(scoring_scheme_t) {};
};
struct aminoacid_scoring_scheme {};
template <typename config_t> struct alignment_fixture { config_t config; };
template <typename config_t>
alignment_fixture(config_t) -> alignment_fixture<config_t>;
inline constexpr auto align_config =
    seqan3::configuration{seqan3::align_cfg::method_local}.push_back(
        seqan3::align_cfg::gap{seqan3::gap_scheme{}});
static auto aa27_02 = [] {
  return alignment_fixture{align_config.push_back(
      seqan3::align_cfg::scoring_scheme{aminoacid_scoring_scheme{}})};
}();
} // namespace seqan3::align_cfg

```

https://godbolt.org/z/M4Mh1f

with

> g++-git -std=c++2a

error:

```
ice.cpp:55:1: internal compiler error: in output_constructor_regular_field, at
varasm.c:5223
   55 | } // namespace seqan3::align_cfg
      | ^
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://bugs.archlinux.org/> for instructions.
```

Reply via email to