ICE compiling glibc on i686 with current CVS version

Andreas Jaeger aj@suse.de
Tue Dec 7 01:56:00 GMT 1999


Since a week or so, I get an ICE running make check in the current
glibc development version.

I've made a smaller testcase out of it.  Compiling the file gives:
/opt/gcc-2.96/bin/gcc tester2.i -c -O2    -o tester.o -Wall
tester2.i: In function `test_stpcpy':
tester2.i:34: Unrecognizable insn:
(insn 222 220 224 (parallel[ 
            (set (reg:SI 92)
                (neg:SI (symbol_ref:SI ("one"))))
            (clobber (reg:CC 17 flags))
        ] ) -1 (nil)
    (expr_list:REG_UNUSED (reg:CC 17 flags)
        (nil)))
tester2.i:34: Internal compiler error in `extract_insn', at recog.c:2043
Please submit a full bug report.
See <URL: http://www.gnu.org/software/gcc/faq.html#bugreport > for instructions.

I'm running:
GNU C version 2.96 19991206 (experimental) (i686-pc-linux-gnu)
compiled by GNU C version 2.96 19991206 (experimental).
on i686, Linux 2.2.13, glibc 2.1.2.
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
typedef unsigned short int __uint16_t;
typedef unsigned int __uint32_t;
typedef unsigned int size_t;

extern char *__stpcpy (char *__restrict __dest, __const char *__restrict __src);

extern char *__stpcpy_small (char *, __uint16_t, __uint16_t,
			     __uint32_t, __uint32_t, size_t);

extern void *__mempcpy_small (void *, char, char, char, char,
			      __uint16_t, __uint16_t, __uint32_t,
			      __uint32_t, size_t);

extern void *__mempcpy (void *__restrict __dest,
			__const void *__restrict __src, size_t __n)  ;

      
extern void check (int thing, int number);

extern void equal (const char *a, const char *b, int number);

char one[50];

void
test_stpcpy (void)
{
  check (((__extension__ (__builtin_constant_p (    "abcdefghi"  )	? (((size_t)(const void *)((     "abcdefghi"   ) + 1) - (size_t)(const void *)(     "abcdefghi"   ) == 1)  && strlen (    "abcdefghi"  ) + 1 <= 8	? __stpcpy_small (  one  , __extension__ (((__const unsigned char *) (__const char *) (      "abcdefghi"    ))[  0  + 1] << 8	| ((__const unsigned char *) (__const char *) (      "abcdefghi"    ))[  0 ]) ,	__extension__ (((__const unsigned char *) (__const char *) (      "abcdefghi"    ))[  4  + 1] << 8	| ((__const unsigned char *) (__const char *) (      "abcdefghi"    ))[  4 ]) ,	__extension__ (((((__const unsigned char *) (__const char *) (      "abcdefghi"    ))[  0  + 3] << 8 | ((__const unsigned char *) (__const char *) (      "abcdefghi"    ))[  0  + 2]) << 8 | ((__const unsigned char *) (__const char *) (      "abcdefghi"    ))[  0  + 1]) << 8 | ((__const unsigned char *) (__const char *) (      "abcdefghi"    ))[  0 ]) ,	__extension__ (((((__const unsigned ch!
ar *) (__const char *) (      "abcdefghi"    ))[  4  + 3] << 8 | ((__const unsigned char *) (__const char *) (      "abcdefghi"    ))[  4  + 2]) << 8 | ((__const unsigned char *) (__const char *) (      "abcdefghi"    ))[  4  + 1]) << 8 | ((__const unsigned char *) (__const char *) (      "abcdefghi"    ))[  4 ])  ,	strlen (    "abcdefghi"  ) + 1)	: ((char *) (__extension__ (__builtin_constant_p (      "abcdefghi"   ) && __builtin_constant_p (  strlen (    "abcdefghi"  ) + 1 ) && ((size_t)(const void *)((       "abcdefghi"    ) + 1) - (size_t)(const void *)(       "abcdefghi"    ) == 1)  &&   strlen (    "abcdefghi"  ) + 1  <= 8	? __mempcpy_small (   one   , ((char *) (       "abcdefghi"    ))[0], ((char *) (       "abcdefghi"    ))[2], ((char *) (       "abcdefghi"    ))[4],	((char *) (       "abcdefghi"    ))[6],	__extension__ (((__const unsigned char *) (__const char *) (        "abcdefghi"     ))[  0  + 1] << 8	| ((__const unsigned char *) (__const char *) (        "abcdef!
ghi"     ))[  0 ]) ,	__extension__ (((__const unsigned char *) (__const char *) (        "abcdefghi"     ))[  4  + 1] << 8	| ((__const unsigned char *) (__const char *) (        "abcdefghi"     ))[  4 ]) ,	__extension__ (((((__const unsigned char *) (__const char *) (        "abcdefghi"     ))[  0  + 3] << 8 | ((__const unsigned char *) (__const char *) (        "abcdefghi"     ))[  0  + 2]) << 8 | ((__const unsigned char *) (__const char *) (        "abcdefghi"     ))[  0  + 1]) << 8 | ((__const unsigned char *) (__const char *) (        "abcdefghi"     ))[  0 ]) ,	__extension__ (((((__const unsigned char *) (__const char *) (        "abcdefghi"     ))[  4  + 3] << 8 | ((__const unsigned char *) (__const char *) (        "abcdefghi"     ))[  4  + 2]) << 8 | ((__const unsigned char *) (__const char *) (        "abcdefghi"     ))[  4  + 1]) << 8 | ((__const unsigned char *) (__const char *) (        "abcdefghi"     ))[  4 ])  ,   strlen (    "abcdefghi"  ) + 1 )	: __mempcpy (  !
 one   ,       "abcdefghi"   ,   strlen (    "abcdefghi"  ) + 1 )))  - 1))	: __stpcpy (  one  ,     "abcdefghi"  )))   - one) == 9, 17);
  equal (one, "abcdefghi", 18);

  check (((__extension__ (__builtin_constant_p (    "x"  )	? (((size_t)(const void *)((     "x"   ) + 1) - (size_t)(const void *)(     "x"   ) == 1)  && strlen (    "x"  ) + 1 <= 8	? __stpcpy_small (  one  , __extension__ (((__const unsigned char *) (__const char *) (      "x"    ))[  0  + 1] << 8	| ((__const unsigned char *) (__const char *) (      "x"    ))[  0 ]) ,	__extension__ (((__const unsigned char *) (__const char *) (      "x"    ))[  4  + 1] << 8	| ((__const unsigned char *) (__const char *) (      "x"    ))[  4 ]) ,	__extension__ (((((__const unsigned char *) (__const char *) (      "x"    ))[  0  + 3] << 8 | ((__const unsigned char *) (__const char *) (      "x"    ))[  0  + 2]) << 8 | ((__const unsigned char *) (__const char *) (      "x"    ))[  0  + 1]) << 8 | ((__const unsigned char *) (__const char *) (      "x"    ))[  0 ]) ,	__extension__ (((((__const unsigned char *) (__const char *) (      "x"    ))[  4  + 3] << 8 | ((__const unsigned char *) (__const cha!
r *) (      "x"    ))[  4  + 2]) << 8 | ((__const unsigned char *) (__const char *) (      "x"    ))[  4  + 1]) << 8 | ((__const unsigned char *) (__const char *) (      "x"    ))[  4 ])  ,	strlen (    "x"  ) + 1)	: ((char *) (__extension__ (__builtin_constant_p (      "x"   ) && __builtin_constant_p (  strlen (    "x"  ) + 1 ) && ((size_t)(const void *)((       "x"    ) + 1) - (size_t)(const void *)(       "x"    ) == 1)  &&   strlen (    "x"  ) + 1  <= 8	? __mempcpy_small (   one   , ((char *) (       "x"    ))[0], ((char *) (       "x"    ))[2], ((char *) (       "x"    ))[4],	((char *) (       "x"    ))[6],	__extension__ (((__const unsigned char *) (__const char *) (        "x"     ))[  0  + 1] << 8	| ((__const unsigned char *) (__const char *) (        "x"     ))[  0 ]) ,	__extension__ (((__const unsigned char *) (__const char *) (        "x"     ))[  4  + 1] << 8	| ((__const unsigned char *) (__const char *) (        "x"     ))[  4 ]) ,	__extension__ (((((__const unsigne!
d char *) (__const char *) (        "x"     ))[  0  + 3] << 8 | ((__const unsigned char *) (__const char *) (        "x"     ))[  0  + 2]) << 8 | ((__const unsigned char *) (__const char *) (        "x"     ))[  0  + 1]) << 8 | ((__const unsigned char *) (__const char *) (        "x"     ))[  0 ]) ,	__extension__ (((((__const unsigned char *) (__const char *) (        "x"     ))[  4  + 3] << 8 | ((__const unsigned char *) (__const char *) (        "x"     ))[  4  + 2]) << 8 | ((__const unsigned char *) (__const char *) (        "x"     ))[  4  + 1]) << 8 | ((__const unsigned char *) (__const char *) (        "x"     ))[  4 ])  ,   strlen (    "x"  ) + 1 )	: __mempcpy (   one   ,       "x"   ,   strlen (    "x"  ) + 1 )))  - 1))	: __stpcpy (  one  ,     "x"  )))   - one) == 1, 19);
  equal (one, "x", 20);			 
  equal (one+2, "cdefghi", 21);		 

}
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Jan, is this a problem of one of your ix86 patches?

Andreas
-- 
 Andreas Jaeger
  SuSE Labs aj@suse.de
   private aj@arthur.rhein-neckar.de


More information about the Gcc-bugs mailing list