OSDN Git Service

Fix nits
[pf3gnuchains/gcc-fork.git] / gcc / genextract.c
index 2631e2a..c414891 100644 (file)
@@ -1,6 +1,6 @@
 /* Generate code from machine description to extract operands from insn as rtl.
    Copyright (C) 1987, 1991, 1992, 1993, 1997, 1998, 1999, 2000, 2003,
-   2004, 2005, 2007
+   2004, 2005, 2007, 2008
    Free Software Foundation, Inc.
 
 This file is part of GCC.
@@ -80,6 +80,8 @@ struct accum_extract
   VEC(char,heap)   *pathstr;
 };
 
+int line_no;
+
 /* Forward declarations.  */
 static void walk_rtx (rtx, struct accum_extract *);
 
@@ -152,7 +154,7 @@ gen_insn (rtx insn, int insn_code_number)
   /* Otherwise, make a new extraction method.  We stash the arrays
      after the extraction structure in memory.  */
 
-  p = xmalloc (sizeof (struct extraction)
+  p = XNEWVAR (struct extraction, sizeof (struct extraction)
               + op_count*sizeof (char *)
               + dup_count*sizeof (char *)
               + dup_count*sizeof (int));
@@ -187,8 +189,13 @@ VEC_safe_set_locstr (VEC(locstr,heap) **vp, unsigned int ix, char *str)
 {
   if (ix < VEC_length (locstr, *vp))
     {
-      gcc_assert (VEC_index (locstr, *vp, ix) == 0);
-      VEC_replace (locstr, *vp, ix, str);
+      if (VEC_index (locstr, *vp, ix))
+       {
+         message_with_line (line_no, "repeated operand number %d", ix);
+         have_error = 1;
+       }
+      else
+        VEC_replace (locstr, *vp, ix, str);
     }
   else
     {
@@ -399,7 +406,6 @@ main (int argc, char **argv)
   struct code_ptr *link;
   const char *name;
   int insn_code_number;
-  int line_no;
 
   progname = "genextract";
 
@@ -423,6 +429,9 @@ main (int argc, char **argv)
        }
     }
 
+  if (have_error)
+    return FATAL_EXIT_CODE;
+
   print_header ();
 
   /* Write out code to handle peepholes and the insn_codes that it should