ICE in maybe_record_trace_start, at dwarf2cfi.c:2328 (trunk@243328)
George Spelvin
linux@sciencehorizons.net
Sat Dec 10 20:53:00 GMT 2016
This is avr-gcc compiled from the git mirror commit
fcdd7053da, which says it's SVN trunk@243328.
This code used to work on some earlier GCC, but I don't know which
version.
Host is Debian Linux, i686, compiled with gcc (Debian 6.2.1-5) 6.2.1 20161124.
Configured with: ../gcc/configure --target=avr --enable-languages=c,c++ --enable-shared --with-system-zlib --enable-long-long --disable-nls --disable-libssp --disable-libsanitizer --program-prefix=avr- --with-as=/usr/bin/avr-as --with-ld=/usr/bin/avr-ld
$ avr-gcc -gdwarf-4 -Os -mmcu=at90s8515 -c scanf-nul.i
scanf-nul.i: In function 'main':
scanf-nul.i:130:1: internal compiler error: in maybe_record_trace_start, at dwarf2cfi.c:2328
}
^
0x837b20c maybe_record_trace_start
../../gcc/gcc/dwarf2cfi.c:2328
0x837b502 create_trace_edges
../../gcc/gcc/dwarf2cfi.c:2424
0x837d412 scan_trace
../../gcc/gcc/dwarf2cfi.c:2638
0x837def9 create_cfi_notes
../../gcc/gcc/dwarf2cfi.c:2664
0x837def9 execute_dwarf2_frame
../../gcc/gcc/dwarf2cfi.c:3022
0x837def9 execute
../../gcc/gcc/dwarf2cfi.c:3502
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
The code is straight out of the avr-libc test suite.
The version below has the header spam stripped out.
== scanf-nul.i ==
typedef unsigned int uint8_t __attribute__((__mode__(__QI__)));
typedef unsigned int uint16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int size_t;
struct __file {
char *buf;
unsigned char unget;
uint8_t flags;
int size;
int len;
int (*put)(char, struct __file *);
int (*get)(struct __file *);
void *udata;
};
typedef struct __file FILE;
extern FILE *fdevopen(int (*__put)(char, FILE*), int (*__get)(FILE*));
extern int fclose(FILE *__stream);
extern int fscanf(FILE *__stream, const char *__fmt, ...);
extern void exit(int __status) __attribute__((__noreturn__));
extern void *memset(void *, int, size_t);
extern int memcmp(const void *, const void *, size_t) __attribute__((__pure__));
int vrslt = 1;
struct {
int i;
int j;
char s[8];
char t[8];
} v = { 1, 1, {1}, {1} };
const char *getpnt, *getend;
int ugetc(FILE *fp)
{
(void)fp;
if (getpnt == getend)
return -2;
return *getpnt++;
}
int uread(void *cookie, char *buf, size_t size)
{
size_t n;
for (n = 0; n < size; n++) {
int i = ugetc(cookie);
if (i < 0) break;
*buf++ = i;
}
return n;
}
int uclose (void *cookie)
{
(void)cookie;
return 0;
}
static FILE * uopen(const char *buf, int size)
{
static FILE *fp;
if (fp)
fclose(fp);
fp = fdevopen(0, ugetc);
if (!fp)
exit(117);
getpnt = buf;
getend = buf + size;
return fp;
}
int main()
{
FILE *fp;
int i;
memset(&v, ~0, sizeof v);
fp = uopen("A\000B", 3);
vrslt = fscanf(fp, "%c%c%c", v.s, v.s + 1, v.s + 2);
if (vrslt != 3)
exit(133);
if(memcmp(v.s, "A\000B", 3))
exit(134);
memset(&v, ~0, sizeof v);
fp = uopen("\t \000", 3);
i = fscanf(fp, " %c", v.s);
if (i != 1) exit(140);
if (v.s[0]) exit(141);
memset(&v, ~0, sizeof v);
fp = uopen("123\000456", 7);
i = fscanf(fp, "%d%c%d", &v.i, v.s, &v.j);
if (i != 3) exit(147);
if (v.i != 123 || v.s[0] || v.j != 456)
exit(148);
memset(&v, ~0, sizeof v);
fp = uopen("A\000BC", 4);
i = fscanf(fp, "%s%s", v.s, v.t);
if (i != 1) exit(154);
if (memcmp(v.s, "A\000BC", 4))
exit(155);
return 0;
}
More information about the Gcc-bugs
mailing list