OSDN Git Service

New test.
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 31 Jan 2003 06:57:51 +0000 (06:57 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 31 Jan 2003 06:57:51 +0000 (06:57 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@62174 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/gcc.dg/uninit-10.c [new file with mode: 0644]

diff --git a/gcc/testsuite/gcc.dg/uninit-10.c b/gcc/testsuite/gcc.dg/uninit-10.c
new file mode 100644 (file)
index 0000000..0d62020
--- /dev/null
@@ -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;
+}