New test.
From-SVN: r62174
This commit is contained in:
parent
7abec5bec9
commit
f22d830827
1 changed files with 109 additions and 0 deletions
109
gcc/testsuite/gcc.dg/uninit-10.c
Normal file
109
gcc/testsuite/gcc.dg/uninit-10.c
Normal file
|
@ -0,0 +1,109 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -Wall" } */
|
||||
/* On Alpha EV4, dead code elimination and cfg simplification conspired
|
||||
to leave the register containing 'C' marked live, though all references
|
||||
to the variable had been removed. */
|
||||
|
||||
struct operand_data
|
||||
{
|
||||
struct operand_data *next;
|
||||
int index;
|
||||
const char *predicate;
|
||||
const char *constraint;
|
||||
int mode;
|
||||
unsigned char n_alternatives;
|
||||
char address_p;
|
||||
char strict_low;
|
||||
char eliminable;
|
||||
char seen;
|
||||
};
|
||||
|
||||
struct data
|
||||
{
|
||||
struct data *next;
|
||||
const char *name;
|
||||
const char *template;
|
||||
int code_number;
|
||||
int index_number;
|
||||
int lineno;
|
||||
int n_operands;
|
||||
int n_dups;
|
||||
int n_alternatives;
|
||||
int operand_number;
|
||||
int output_format;
|
||||
struct operand_data operand[40];
|
||||
};
|
||||
|
||||
extern void message_with_line (int, const char *, ...)
|
||||
__attribute__ ((__format__ (__printf__, 2, 3)));
|
||||
extern int have_error;
|
||||
|
||||
extern char *strchr (__const char *__s, int __c) __attribute__ ((__pure__));
|
||||
|
||||
void
|
||||
validate_insn_alternatives (d)
|
||||
struct data *d;
|
||||
{
|
||||
int n = 0, start;
|
||||
|
||||
for (start = 0; start < d->n_operands; start++)
|
||||
if (d->operand[start].n_alternatives > 0)
|
||||
{
|
||||
int len, i;
|
||||
const char *p;
|
||||
char c; /* { dg-bogus "used uninitialized" "uninitialized variable warning" } */
|
||||
int which_alternative = 0;
|
||||
int alternative_count_unsure = 0;
|
||||
|
||||
for (p = d->operand[start].constraint; (c = *p); p += len)
|
||||
{
|
||||
len = 1;
|
||||
|
||||
if (len < 1 || (len > 1 && strchr (",#*+=&%!0123456789", c)))
|
||||
{
|
||||
message_with_line (d->lineno,
|
||||
"invalid length %d for char '%c' in alternative %d of operand %d",
|
||||
len, c, which_alternative, start);
|
||||
len = 1;
|
||||
have_error = 1;
|
||||
}
|
||||
|
||||
if (c == ',')
|
||||
{
|
||||
which_alternative++;
|
||||
continue;
|
||||
}
|
||||
|
||||
for (i = 1; i < len; i++)
|
||||
if (p[i] == '\0')
|
||||
{
|
||||
message_with_line (d->lineno,
|
||||
"NUL in alternative %d of operand %d",
|
||||
which_alternative, start);
|
||||
alternative_count_unsure = 1;
|
||||
break;
|
||||
}
|
||||
else if (strchr (",#*", p[i]))
|
||||
{
|
||||
message_with_line (d->lineno,
|
||||
"'%c' in alternative %d of operand %d",
|
||||
p[i], which_alternative, start);
|
||||
alternative_count_unsure = 1;
|
||||
}
|
||||
}
|
||||
if (alternative_count_unsure)
|
||||
have_error = 1;
|
||||
else if (n == 0)
|
||||
n = d->operand[start].n_alternatives;
|
||||
else if (n != d->operand[start].n_alternatives)
|
||||
{
|
||||
message_with_line (d->lineno,
|
||||
"wrong number of alternatives in operand %d",
|
||||
start);
|
||||
have_error = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
d->n_alternatives = n;
|
||||
}
|
Loading…
Add table
Reference in a new issue