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:;
    }
}

Reply via email to