https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90756
Bug ID: 90756 Summary: [8/9 Regressions] g++ ICE in convert_move, at expr.c:218 on i686 and s390x Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: doko at debian dot org Target Milestone: --- [forwarded from https://bugs.debian.org/930012] this might be the same as PR90327, but here it is seen on the gcc-8 branch as well, both i686 and s390x. seen building firefox 68.0~b6-2 on i686 and s390x. $ g++ -c -O1 -fPIC -Wall -Wno-narrowing -Wno-psabi skcms.ii during RTL pass: expand skcms.ii: In function 'void ck()': skcms.ii:65:6: internal compiler error: in convert_move, at expr.c:218 void ck() { ^~ Please submit a full bug report, with preprocessed source if appropriate. $ cat skcms.ii typedef enum { a, c, d, e, f, g, h, i, j, k, l, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bj, bk, bl, bm, bn, bo, m, bp, bq, br, bs } bt; template <int bi, typename bu> struct p { typedef bu __attribute__((vector_size(bi * sizeof(bu)))) bw; }; template <int bi, typename bu> using bx = typename p<bi, bu>::bw; using by = bx<4, float>; using bz = bx<4, unsigned long long>; using ca = bx<4, short>; by cb; template <typename bu, typename cc> void cd(cc, bu); template <typename ce, typename cf> ce cast(cf); ca cg(by); template <typename bu, typename cc> bu ch(cc); bt ci; void ck() { by n = cb, b = cb; while (true) switch (ci) { case a: case c: case e: case f: case g: case h: case d: case i: case j: case k: case l: case ah: case ai: case aj: case ak: case al: n = ch<by>(c); case am: { by o = n; n = b; b = o; } case an: case ao: case ap: case aq: case ar: case as: case at: case au: case av: case aw: case ax: case ay: case az: case ba: case bb: case bc: case bd: case be: case bf: case bg: case bh: case bj: case bk: case bl: case bm: case bn: case bo: case m: case bp: case bq: { ca cm = cg(b); __attribute__((__vector_size__( 4 * sizeof(long long)))) unsigned long long cn = cast<bz>(cm); cd(ck, cn); } case br: case bs:; } }