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

            Bug ID: 83720
           Summary: [8 Regression] ICE: in mangle_decl, at
                    cp/mangle.c:3847
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: lto
          Assignee: unassigned at gcc dot gnu.org
          Reporter: doko at gcc dot gnu.org
                CC: marxin at gcc dot gnu.org
  Target Milestone: ---

seen with r256272, building pybind11

$ g++ -c -std=c++14 -g -O2 -flto test_alias_initialization.ii
during IPA pass: *free_lang_data
:13:5: internal compiler error: in mangle_decl, at cp/mangle.c:3847
0x594554 mangle_decl(tree_node*)
        ../../src/gcc/cp/mangle.c:3846
0xda5077 decl_assembler_name(tree_node*)
        ../../src/gcc/tree.c:687
0xda5077 assign_assembler_name_if_needed(tree_node*)
        ../../src/gcc/tree.c:5802
0xda6468 free_lang_data_in_cgraph
        ../../src/gcc/tree.c:5851
0xda6468 free_lang_data
        ../../src/gcc/tree.c:5892
0xda6468 execute
        ../../src/gcc/tree.c:5943
Please submit a full bug report,
with preprocessed source if appropriate.

$ cat test_alias_initialization.ii
# 9 "" 3
namespace b {
class h {
public:
  template <typename ae, typename af> h(ae af::*...) {
    [] {};
  }
};
class ai {};
template <typename> class c {
public:
  template <typename ag> aj(char *, ag f) { h(f, int()); }
};
}
template <typename> class al;
template <typename e> class i {
protected:
  static e g(const) {}
};
template <typename, typename> class j;
template <typename an, typename e, typename... ao>
class j<an(ao...), e> : i<e> {
  typedef i<e> ap;

public:
  static an aq(const &ar, ao... as) { ap::g(ar)(as...); }
};
template <typename an, typename... ao> class al<an(ao...)> {
  template <typename, typename a> using ax = a;

public:
  template <typename e, typename = ax<int, void>, typename = ax<int, void>>
  al(e);
  using ay = an (*)(const &, ao...);
  ay az;
};
template <typename an, typename... ao>
template <typename e, typename, typename>
al<an(ao...)>::al(e) {
  az = j<an(ao...), e>::aq;
}
class k {
public:
  k(al<void(b::ai)>);
} d([](b::ai) {
  struct be {
    virtual f();
  };
  struct bf;
  b::c<bf>().aj("", &be::f);
});

Reply via email to