c-aux-info.c (gen_type): Use gcc_assert or gcc_unreachable.
authorNathan Sidwell <nathan@codesourcery.com>
Tue, 7 Sep 2004 10:19:00 +0000 (10:19 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Tue, 7 Sep 2004 10:19:00 +0000 (10:19 +0000)
* c-aux-info.c (gen_type): Use gcc_assert or gcc_unreachable.
* c-common.c (c_type_hash, c_common_nodes_and_builtins,
c_expand_expr, boolean_increment, nonnull_check_p,
check_function_arguments_recurse, fold_offsetof_1): Likewise.
* c-cppbuiltin.c (define__GNUC__, builtin_define_stdint_macros,
builtin_define_type_max): Likewise.
* c-decl.c (bind, pop_scope, merge_decls, pushdecl_top_level,
implicit_decl_warning, builtin_function, build_compound_literal,
complete_array_type, grokdeclarator, get_parm_info,
start_function, store_parm_decls_oldstyle,
c_write_global_declarations): Likewise.
* c-format.c (get_constant, decode_format_attr,
maybe_read_dollar_number, get_flag_spec, check_format_arg,
check_format_types, format_type_warning,
find_char_info_specifier_index, init_dynamic_asm_fprintf_info,
init_dynamic_diag_info, handle_format_attribute): Likewise.
* c-gimplify.c (push_context, pop_context, finish_bc_block):
* c-lex.c (c_lex_with_flags, lex_string): Likewise.
* c-objc-common.c (c_tree_printer): Likewise.
* c-pch.c (pch_init): Likewise.
* c-pragma.c (maybe_apply_pragma_weak): Likewise.
* c-pretty-print.c (pp_c_tree_decl_identifier): Likewise.
* c-typeck.c (c_incomplete_type_error, composite_type,
common_pointer_type, common_type, same_translation_unit_p,
tagged_types_tu_compatible_p, finish_init, pop_init_level,
set_designator, set_nonincremental_init_from_string,
process_init_element, c_finish_if_stmt): Likewise.
* caller-save.c (init_caller_save, save_call_clobbered_regs,
insert_restore, insert_save, insert_one_insn): Likewise.
* calls.c (emit_call_1, compute_argument_block_size,
precompute_arguments, expand_call, emit_library_call_value_1,
store_one_arg): Likewise.

From-SVN: r87140

15 files changed:
gcc/ChangeLog
gcc/c-aux-info.c
gcc/c-common.c
gcc/c-cppbuiltin.c
gcc/c-decl.c
gcc/c-format.c
gcc/c-gimplify.c
gcc/c-lex.c
gcc/c-objc-common.c
gcc/c-pch.c
gcc/c-pragma.c
gcc/c-pretty-print.c
gcc/c-typeck.c
gcc/caller-save.c
gcc/calls.c

index 4aeba215d0240d127028b88d7590669d2ad2b203..bc6075e9540b3a1adc8313a79a1c82c35dcb1283 100644 (file)
@@ -1,3 +1,38 @@
+2004-09-07  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * c-aux-info.c (gen_type): Use gcc_assert or gcc_unreachable.
+       * c-common.c (c_type_hash, c_common_nodes_and_builtins,
+       c_expand_expr, boolean_increment, nonnull_check_p,
+       check_function_arguments_recurse, fold_offsetof_1): Likewise.
+       * c-cppbuiltin.c (define__GNUC__, builtin_define_stdint_macros,
+       builtin_define_type_max): Likewise.
+       * c-decl.c (bind, pop_scope, merge_decls, pushdecl_top_level,
+       implicit_decl_warning, builtin_function, build_compound_literal,
+       complete_array_type, grokdeclarator, get_parm_info,
+       start_function, store_parm_decls_oldstyle,
+       c_write_global_declarations): Likewise.
+       * c-format.c (get_constant, decode_format_attr,
+       maybe_read_dollar_number, get_flag_spec, check_format_arg,
+       check_format_types, format_type_warning,
+       find_char_info_specifier_index, init_dynamic_asm_fprintf_info,
+       init_dynamic_diag_info, handle_format_attribute): Likewise.
+       * c-gimplify.c (push_context, pop_context, finish_bc_block): 
+       * c-lex.c (c_lex_with_flags, lex_string): Likewise.
+       * c-objc-common.c (c_tree_printer): Likewise.
+       * c-pch.c (pch_init): Likewise.
+       * c-pragma.c (maybe_apply_pragma_weak): Likewise.
+       * c-pretty-print.c (pp_c_tree_decl_identifier): Likewise.
+       * c-typeck.c (c_incomplete_type_error, composite_type,
+       common_pointer_type, common_type, same_translation_unit_p,
+       tagged_types_tu_compatible_p, finish_init, pop_init_level,
+       set_designator, set_nonincremental_init_from_string,
+       process_init_element, c_finish_if_stmt): Likewise.
+       * caller-save.c (init_caller_save, save_call_clobbered_regs,
+       insert_restore, insert_save, insert_one_insn): Likewise.
+       * calls.c (emit_call_1, compute_argument_block_size,
+       precompute_arguments, expand_call, emit_library_call_value_1,
+       store_one_arg): Likewise.
+
 2004-09-07  Nathan Sidwell  <nathan@codesourcery.com>
 
        * configure.ac (enable-checking): Add release option. Reorganize
index 8d457836c756dd70a6ca0fe657bfb455f5daf173..b42adce9a80d9a8ef2b87b55901c78105c6ed052 100644 (file)
@@ -447,7 +447,7 @@ gen_type (const char *ret_val, tree t, formals_style style)
          break;
 
         default:
-          abort ();
+          gcc_unreachable ();
         }
     }
   if (TYPE_READONLY (t))
index e1fa8e497cde466640039f2aded72f0b4aebadd8..b7aa389cbfa3df91b1d102ed520462f90b0245c3 100644 (file)
@@ -2578,7 +2578,7 @@ c_type_hash (const void *p)
       t2 = TYPE_FIELDS (t);
       break;
     default:
-      abort ();
+      gcc_unreachable ();
     }
   for (; t2; t2 = TREE_CHAIN (t2))
     i++;
@@ -3188,8 +3188,8 @@ c_common_nodes_and_builtins (void)
     {                                                                  \
       tree decl;                                                       \
                                                                        \
-      if (strncmp (NAME, "__builtin_", strlen ("__builtin_")) != 0)    \
-       abort ();                                                       \
+      gcc_assert (!strncmp (NAME, "__builtin_",                                \
+                           strlen ("__builtin_")));                    \
                                                                        \
       if (!BOTH_P)                                                     \
        decl = lang_hooks.builtin_function (NAME, builtin_types[TYPE],  \
@@ -3830,7 +3830,7 @@ c_expand_expr (tree exp, rtx target, enum machine_mode tmode,
       }
 
     default:
-      abort ();
+      gcc_unreachable ();
     }
 }
 
@@ -3878,7 +3878,7 @@ boolean_increment (enum tree_code code, tree arg)
       val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
       break;
     default:
-      abort ();
+      gcc_unreachable ();
     }
   TREE_SIDE_EFFECTS (val) = 1;
   return val;
@@ -5111,8 +5111,9 @@ nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
 
   for (; args; args = TREE_CHAIN (args))
     {
-      if (! get_nonnull_operand (TREE_VALUE (args), &arg_num))
-       abort ();
+      bool found = get_nonnull_operand (TREE_VALUE (args), &arg_num);
+
+      gcc_assert (found);
 
       if (arg_num == param_num)
        return true;
@@ -5356,9 +5357,8 @@ check_function_arguments_recurse (void (*callback)
                   || TREE_CODE (format_num_expr) == NON_LVALUE_EXPR)
              format_num_expr = TREE_OPERAND (format_num_expr, 0);
 
-           if (TREE_CODE (format_num_expr) != INTEGER_CST
-               || TREE_INT_CST_HIGH (format_num_expr) != 0)
-             abort ();
+           gcc_assert (TREE_CODE (format_num_expr) == INTEGER_CST
+                       && !TREE_INT_CST_HIGH (format_num_expr));
 
            format_num = TREE_INT_CST_LOW (format_num_expr);
 
@@ -5619,7 +5619,7 @@ fold_offsetof_1 (tree expr)
       break;
 
     default:
-      abort ();
+      gcc_unreachable ();
     }
 
   return size_binop (code, base, off);
index f6a1805f0b8425f3f0b80e5292bc863495b205b6..c20e987e83ae213571f49437de54e14a525b45d5 100644 (file)
@@ -261,8 +261,7 @@ define__GNUC__ (void)
 
   while (*v && ! ISDIGIT (*v))
     v++;
-  if (!*v || (v > version_string && v[-1] != '-'))
-    abort ();
+  gcc_assert (*v && (v <= version_string || v[-1] == '-'));
 
   q = v;
   while (ISDIGIT (*v))
@@ -271,8 +270,8 @@ define__GNUC__ (void)
   if (c_dialect_cxx ())
     builtin_define_with_value_n ("__GNUG__", q, v - q);
 
-  if (*v != '.' || !ISDIGIT (v[1]))
-    abort ();
+  gcc_assert (*v == '.' || ISDIGIT (v[1]));
+  
   q = ++v;
   while (ISDIGIT (*v))
     v++;
@@ -280,8 +279,7 @@ define__GNUC__ (void)
 
   if (*v == '.')
     {
-      if (!ISDIGIT (v[1]))
-       abort ();
+      gcc_assert (ISDIGIT (v[1]));
       q = ++v;
       while (ISDIGIT (*v))
        v++;
@@ -290,8 +288,7 @@ define__GNUC__ (void)
   else
     builtin_define_with_value_n ("__GNUC_PATCHLEVEL__", "0", 1);
 
-  if (*v && *v != ' ' && *v != '-')
-    abort ();
+  gcc_assert (!*v || *v == ' ' || *v == '-');
 }
 
 /* Define macros used by <stdint.h>.  Currently only defines limits
@@ -307,7 +304,7 @@ builtin_define_stdint_macros (void)
   else if (intmax_type_node == integer_type_node)
     intmax_long = 0;
   else
-    abort ();
+    gcc_unreachable ();
   builtin_define_type_max ("__INTMAX_MAX__", intmax_type_node, intmax_long);
 }
 
@@ -617,7 +614,7 @@ builtin_define_type_max (const char *macro, tree type, int is_long)
     case 32:   idx = 4; break;
     case 64:   idx = 6; break;
     case 128:  idx = 8; break;
-    default:    abort ();
+    default:    gcc_unreachable ();
     }
 
   value = values[idx + TYPE_UNSIGNED (type)];
index f5c74f35aa661006e639cf8a5376765fdb8ee185..aad75640ca9a429a7f3261c63ce721e88a44cb66 100644 (file)
@@ -477,7 +477,7 @@ bind (tree name, tree decl, struct c_scope *scope, bool invisible, bool nested)
     case ERROR_MARK:     here = &I_SYMBOL_BINDING (name);  break;
 
     default:
-      abort ();
+      gcc_unreachable ();
     }
 
   /* Locate the appropriate place in the chain of shadowed decls
@@ -731,10 +731,7 @@ pop_scope (void)
          /* Labels go in BLOCK_VARS.  */
          TREE_CHAIN (p) = BLOCK_VARS (block);
          BLOCK_VARS (block) = p;
-
-#ifdef ENABLE_CHECKING
-         if (I_LABEL_BINDING (b->id) != b) abort ();
-#endif
+         gcc_assert (I_LABEL_BINDING (b->id) == b);
          I_LABEL_BINDING (b->id) = b->shadowed;
          break;
 
@@ -747,9 +744,7 @@ pop_scope (void)
             appears in the bindings list with b->id NULL.  */
          if (b->id)
            {
-#ifdef ENABLE_CHECKING
-             if (I_TAG_BINDING (b->id) != b) abort ();
-#endif
+             gcc_assert (I_TAG_BINDING (b->id) == b);
              I_TAG_BINDING (b->id) = b->shadowed;
            }
          break;
@@ -819,9 +814,7 @@ pop_scope (void)
             here with b->id NULL in this case.  */
          if (b->id)
            {
-#ifdef ENABLE_CHECKING
-             if (I_SYMBOL_BINDING (b->id) != b) abort ();
-#endif
+             gcc_assert (I_SYMBOL_BINDING (b->id) == b);
              I_SYMBOL_BINDING (b->id) = b->shadowed;
              if (b->shadowed && b->shadowed->type)
                TREE_TYPE (b->shadowed->decl) = b->shadowed->type;
@@ -829,7 +822,7 @@ pop_scope (void)
          break;
 
        default:
-         abort ();
+         gcc_unreachable ();
        }
     }
 
@@ -1527,7 +1520,7 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
       for (here = &current_scope->bindings; *here; here = &(*here)->prev)
        if ((*here)->decl == olddecl)
          goto found;
-      abort ();
+      gcc_unreachable ();
 
     found:
       b = *here;
@@ -2124,13 +2117,11 @@ pushdecl_top_level (tree x)
   tree name;
   bool nested = false;
 
-  if (TREE_CODE (x) != VAR_DECL)
-    abort ();
+  gcc_assert (TREE_CODE (x) == VAR_DECL);
 
   name = DECL_NAME (x);
 
-  if (I_SYMBOL_BINDING (name))
-    abort ();
+  gcc_assert (!I_SYMBOL_BINDING (name));
 
   if (TREE_PUBLIC (x))
     {
@@ -2152,7 +2143,7 @@ implicit_decl_warning (tree id, tree olddecl)
     case 0: return;
     case 1: diag = warning; break;
     case 2: diag = error;   break;
-    default: abort ();
+    default: gcc_unreachable ();
     }
 
   diag (N_("implicit declaration of function '%E'"), id);
@@ -2644,8 +2635,7 @@ builtin_function (const char *name, tree type, int function_code,
     SET_DECL_ASSEMBLER_NAME (decl, get_identifier (library_name));
 
   /* Should never be called on a symbol with a preexisting meaning.  */
-  if (I_SYMBOL_BINDING (id))
-    abort ();
+  gcc_assert (!I_SYMBOL_BINDING (id));
 
   bind (id, decl, external_scope, /*invisible=*/true, /*nested=*/false);
 
@@ -3439,8 +3429,8 @@ build_compound_literal (tree type, tree init)
   if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type))
     {
       int failure = complete_array_type (type, DECL_INITIAL (decl), 1);
-      if (failure)
-       abort ();
+      
+      gcc_assert (!failure);
     }
 
   type = TREE_TYPE (decl);
@@ -3529,8 +3519,8 @@ complete_array_type (tree type, tree initial_value, int do_default)
   if (maxindex)
     {
       TYPE_DOMAIN (type) = build_index_type (maxindex);
-      if (!TREE_TYPE (maxindex))
-       abort ();
+      
+      gcc_assert (TREE_TYPE (maxindex));
     }
 
   /* Lay out the type now that we can get the real answer.  */
@@ -3737,7 +3727,7 @@ grokdeclarator (tree declarator, tree declspecs,
          break;
 
        default:
-         abort ();
+         gcc_unreachable ();
        }
     orig_name = name;
     if (name == 0)
@@ -4211,333 +4201,341 @@ grokdeclarator (tree declarator, tree declspecs,
          array_parm_static = 0;
        }
 
-      if (TREE_CODE (declarator) == TREE_LIST)
-       {
-         /* We encode a declarator with embedded attributes using
-            a TREE_LIST.  */
-         tree attrs = TREE_PURPOSE (declarator);
-         tree inner_decl;
-         int attr_flags = 0;
-         declarator = TREE_VALUE (declarator);
-         inner_decl = declarator;
-         while (inner_decl != NULL_TREE
-                && TREE_CODE (inner_decl) == TREE_LIST)
-           inner_decl = TREE_VALUE (inner_decl);
-         if (inner_decl == NULL_TREE
-             || TREE_CODE (inner_decl) == IDENTIFIER_NODE)
-           attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
-         else if (TREE_CODE (inner_decl) == CALL_EXPR)
-           attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
-         else if (TREE_CODE (inner_decl) == ARRAY_REF)
-           attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
-         returned_attrs = decl_attributes (&type,
-                                           chainon (returned_attrs, attrs),
-                                           attr_flags);
-       }
-      else if (TREE_CODE (declarator) == ARRAY_REF)
+      switch (TREE_CODE (declarator))
        {
-         tree itype = NULL_TREE;
-         tree size = TREE_OPERAND (declarator, 1);
-         /* The index is a signed object `sizetype' bits wide.  */
-         tree index_type = c_common_signed_type (sizetype);
-
-         array_ptr_quals = TREE_TYPE (declarator);
-         array_parm_static = TREE_STATIC (declarator);
-
-         declarator = TREE_OPERAND (declarator, 0);
-
-         /* Check for some types that there cannot be arrays of.  */
-
-         if (VOID_TYPE_P (type))
-           {
-             error ("declaration of `%s' as array of voids", name);
-             type = error_mark_node;
-           }
-
-         if (TREE_CODE (type) == FUNCTION_TYPE)
-           {
-             error ("declaration of `%s' as array of functions", name);
+       case TREE_LIST:
+         {
+           /* We encode a declarator with embedded attributes using a
+              TREE_LIST.  */
+           tree attrs = TREE_PURPOSE (declarator);
+           tree inner_decl;
+           int attr_flags = 0;
+           declarator = TREE_VALUE (declarator);
+           inner_decl = declarator;
+           while (inner_decl != NULL_TREE
+                  && TREE_CODE (inner_decl) == TREE_LIST)
+             inner_decl = TREE_VALUE (inner_decl);
+           if (inner_decl == NULL_TREE
+               || TREE_CODE (inner_decl) == IDENTIFIER_NODE)
+             attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
+           else if (TREE_CODE (inner_decl) == CALL_EXPR)
+             attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
+           else if (TREE_CODE (inner_decl) == ARRAY_REF)
+             attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
+           returned_attrs = decl_attributes (&type,
+                                             chainon (returned_attrs, attrs),
+                                             attr_flags);
+           break;
+         }
+       case ARRAY_REF:
+         {
+           tree itype = NULL_TREE;
+           tree size = TREE_OPERAND (declarator, 1);
+           /* The index is a signed object `sizetype' bits wide.  */
+           tree index_type = c_common_signed_type (sizetype);
+
+           array_ptr_quals = TREE_TYPE (declarator);
+           array_parm_static = TREE_STATIC (declarator);
+           
+           declarator = TREE_OPERAND (declarator, 0);
+
+           /* Check for some types that there cannot be arrays of.  */
+           
+           if (VOID_TYPE_P (type))
+             {
+               error ("declaration of `%s' as array of voids", name);
+               type = error_mark_node;
+             }
+           
+           if (TREE_CODE (type) == FUNCTION_TYPE)
+             {
+               error ("declaration of `%s' as array of functions", name);
+               type = error_mark_node;
+             }
+           
+           if (pedantic && !in_system_header && flexible_array_type_p (type))
+             pedwarn ("invalid use of structure with flexible array member");
+           
+           if (size == error_mark_node)
              type = error_mark_node;
-           }
-
-         if (pedantic && !in_system_header && flexible_array_type_p (type))
-           pedwarn ("invalid use of structure with flexible array member");
-
-         if (size == error_mark_node)
-           type = error_mark_node;
-
-         if (type == error_mark_node)
-           continue;
-
-         /* If size was specified, set ITYPE to a range-type for that size.
-            Otherwise, ITYPE remains null.  finish_decl may figure it out
-            from an initial value.  */
-
-         if (size)
-           {
-             /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue.  */
-             STRIP_TYPE_NOPS (size);
-
-             if (! INTEGRAL_TYPE_P (TREE_TYPE (size)))
-               {
-                 error ("size of array `%s' has non-integer type", name);
-                 size = integer_one_node;
-               }
-
-             if (pedantic && integer_zerop (size))
-               pedwarn ("ISO C forbids zero-size array `%s'", name);
-
-             if (TREE_CODE (size) == INTEGER_CST)
-               {
-                 constant_expression_warning (size);
-                 if (tree_int_cst_sgn (size) < 0)
-                   {
-                     error ("size of array `%s' is negative", name);
-                     size = integer_one_node;
-                   }
-               }
-             else
-               {
-                 /* Make sure the array size remains visibly nonconstant
-                    even if it is (eg) a const variable with known value.  */
-                 size_varies = 1;
-
-                 if (!flag_isoc99 && pedantic)
-                   {
-                     if (TREE_CONSTANT (size))
-                       pedwarn ("ISO C90 forbids array `%s' whose size can't be evaluated",
-                                name);
-                     else
-                       pedwarn ("ISO C90 forbids variable-size array `%s'",
-                                name);
-                   }
-               }
-
-             if (integer_zerop (size))
-               {
-                 /* A zero-length array cannot be represented with an
-                    unsigned index type, which is what we'll get with
-                    build_index_type.  Create an open-ended range instead.  */
-                 itype = build_range_type (sizetype, size, NULL_TREE);
-               }
-             else
-               {
-                 /* Compute the maximum valid index, that is, size - 1.
-                    Do the calculation in index_type, so that if it is
-                    a variable the computations will be done in the
-                    proper mode.  */
-                 itype = fold (build2 (MINUS_EXPR, index_type,
-                                       convert (index_type, size),
-                                       convert (index_type, size_one_node)));
-
-                 /* If that overflowed, the array is too big.
-                    ??? While a size of INT_MAX+1 technically shouldn't
-                    cause an overflow (because we subtract 1), the overflow
-                    is recorded during the conversion to index_type, before
-                    the subtraction.  Handling this case seems like an
-                    unnecessary complication.  */
-                 if (TREE_OVERFLOW (itype))
-                   {
-                     error ("size of array `%s' is too large", name);
-                     type = error_mark_node;
-                     continue;
-                   }
+           
+           if (type == error_mark_node)
+             continue;
 
-                 if (size_varies)
-                   itype = variable_size (itype);
-                 itype = build_index_type (itype);
-               }
-           }
-         else if (decl_context == FIELD)
-           {
-             if (pedantic && !flag_isoc99 && !in_system_header)
-               pedwarn ("ISO C90 does not support flexible array members");
+           /* If size was specified, set ITYPE to a range-type for
+              that size.  Otherwise, ITYPE remains null.  finish_decl
+              may figure it out from an initial value.  */
 
-             /* ISO C99 Flexible array members are effectively identical
-                to GCC's zero-length array extension.  */
-             itype = build_range_type (sizetype, size_zero_node, NULL_TREE);
-           }
+           if (size)
+             {
+               /* Strip NON_LVALUE_EXPRs since we aren't using as an
+                  lvalue.  */
+               STRIP_TYPE_NOPS (size);
+               
+               if (! INTEGRAL_TYPE_P (TREE_TYPE (size)))
+                 {
+                   error ("size of array `%s' has non-integer type", name);
+                   size = integer_one_node;
+                 }
+               
+               if (pedantic && integer_zerop (size))
+                 pedwarn ("ISO C forbids zero-size array `%s'", name);
+               
+               if (TREE_CODE (size) == INTEGER_CST)
+                 {
+                   constant_expression_warning (size);
+                   if (tree_int_cst_sgn (size) < 0)
+                     {
+                       error ("size of array `%s' is negative", name);
+                       size = integer_one_node;
+                     }
+                 }
+               else
+                 {
+                   /* Make sure the array size remains visibly
+                      nonconstant even if it is (eg) a const variable
+                      with known value.  */
+                   size_varies = 1;
+                   
+                   if (!flag_isoc99 && pedantic)
+                     {
+                       if (TREE_CONSTANT (size))
+                         pedwarn ("ISO C90 forbids array `%s' whose size can't be evaluated",
+                                  name);
+                       else
+                         pedwarn ("ISO C90 forbids variable-size array `%s'",
+                                  name);
+                     }
+                 }
 
-         /* If pedantic, complain about arrays of incomplete types.  */
+               if (integer_zerop (size))
+                 {
+                   /*  A zero-length array cannot be represented with
+                       an unsigned index type, which is what we'll
+                       get with build_index_type.  Create an
+                       open-ended range instead.  */
+                   itype = build_range_type (sizetype, size, NULL_TREE);
+                 }
+               else
+                 {
+                   /* Compute the maximum valid index, that is, size
+                      - 1.  Do the calculation in index_type, so that
+                      if it is a variable the computations will be
+                      done in the proper mode.  */
+                   itype = fold (build2 (MINUS_EXPR, index_type,
+                                         convert (index_type, size),
+                                         convert (index_type,
+                                                  size_one_node)));
+
+                   /* If that overflowed, the array is too big.  ??? 
+                      While a size of INT_MAX+1 technically shouldn't
+                      cause an overflow (because we subtract 1), the
+                      overflow is recorded during the conversion to
+                      index_type, before the subtraction.  Handling
+                      this case seems like an unnecessary
+                      complication.  */
+                   if (TREE_OVERFLOW (itype))
+                     {
+                       error ("size of array `%s' is too large", name);
+                       type = error_mark_node;
+                       continue;
+                     }
+                   
+                   if (size_varies)
+                     itype = variable_size (itype);
+                   itype = build_index_type (itype);
+                 }
+             }
+           else if (decl_context == FIELD)
+             {
+               if (pedantic && !flag_isoc99 && !in_system_header)
+                 pedwarn ("ISO C90 does not support flexible array members");
 
-         if (pedantic && !COMPLETE_TYPE_P (type))
-           pedwarn ("array type has incomplete element type");
+               /* ISO C99 Flexible array members are effectively
+                  identical to GCC's zero-length array extension.  */
+               itype = build_range_type (sizetype, size_zero_node, NULL_TREE);
+             }
 
-         /* Build the array type itself, then merge any constancy or
-            volatility into the target type.  We must do it in this order
-            to ensure that the TYPE_MAIN_VARIANT field of the array type
-            is set correctly.  */
+           /* If pedantic, complain about arrays of incomplete types.  */
+           if (pedantic && !COMPLETE_TYPE_P (type))
+             pedwarn ("array type has incomplete element type");
 
-         type = build_array_type (type, itype);
-         if (type_quals)
-           type = c_build_qualified_type (type, type_quals);
+           /* Build the array type itself, then merge any constancy
+              or volatility into the target type.  We must do it in
+              this order to ensure that the TYPE_MAIN_VARIANT field
+              of the array type is set correctly.  */
+           type = build_array_type (type, itype);
+           if (type_quals)
+             type = c_build_qualified_type (type, type_quals);
 
-         if (size_varies)
-           C_TYPE_VARIABLE_SIZE (type) = 1;
+           if (size_varies)
+             C_TYPE_VARIABLE_SIZE (type) = 1;
 
-         /* The GCC extension for zero-length arrays differs from
-            ISO flexible array members in that sizeof yields zero.  */
-         if (size && integer_zerop (size))
-           {
+           /* The GCC extension for zero-length arrays differs from
+              ISO flexible array members in that sizeof yields
+              zero.  */
+           if (size && integer_zerop (size))
+             {
+               layout_type (type);
+               TYPE_SIZE (type) = bitsize_zero_node;
+               TYPE_SIZE_UNIT (type) = size_zero_node;
+             }
+           else if (declarator && TREE_CODE (declarator) == INDIRECT_REF)
+             /* We can never complete an array type which is the
+                target of a pointer, so go ahead and lay it out.  */
              layout_type (type);
-             TYPE_SIZE (type) = bitsize_zero_node;
-             TYPE_SIZE_UNIT (type) = size_zero_node;
-           }
-         else if (declarator && TREE_CODE (declarator) == INDIRECT_REF)
-           /* We can never complete an array type which is the target of a
-              pointer, so go ahead and lay it out.  */
-           layout_type (type);
-
-         if (decl_context != PARM
-             && (array_ptr_quals != NULL_TREE || array_parm_static))
-           {
-             error ("static or type qualifiers in non-parameter array declarator");
-             array_ptr_quals = NULL_TREE;
-             array_parm_static = 0;
-           }
-       }
-      else if (TREE_CODE (declarator) == CALL_EXPR)
-       {
-         /* Say it's a definition only for the declarator closest to
-            the identifier, apart possibly from some attributes.  */
-         bool really_funcdef = false;
-         tree arg_types;
-         if (funcdef_flag)
-           {
-             tree t = TREE_OPERAND (declarator, 0);
-             while (TREE_CODE (t) == TREE_LIST)
-               t = TREE_VALUE (t);
-             really_funcdef = (TREE_CODE (t) == IDENTIFIER_NODE);
-           }
 
-         /* Declaring a function type.
-            Make sure we have a valid type for the function to return.  */
-         if (type == error_mark_node)
-           continue;
-
-         size_varies = 0;
+           if (decl_context != PARM
+               && (array_ptr_quals != NULL_TREE || array_parm_static))
+             {
+               error ("static or type qualifiers in non-parameter array declarator");
+               array_ptr_quals = NULL_TREE;
+               array_parm_static = 0;
+             }
+           break;
+         }
+       case CALL_EXPR:
+         {
+           /* Say it's a definition only for the declarator closest
+              to the identifier, apart possibly from some
+              attributes.  */
+           bool really_funcdef = false;
+           tree arg_types;
+           if (funcdef_flag)
+             {
+               tree t = TREE_OPERAND (declarator, 0);
+               while (TREE_CODE (t) == TREE_LIST)
+                 t = TREE_VALUE (t);
+               really_funcdef = (TREE_CODE (t) == IDENTIFIER_NODE);
+             }
 
-         /* Warn about some types functions can't return.  */
+           /* Declaring a function type.  Make sure we have a valid
+              type for the function to return.  */
+           if (type == error_mark_node)
+             continue;
+           
+           size_varies = 0;
 
-         if (TREE_CODE (type) == FUNCTION_TYPE)
-           {
-             error ("`%s' declared as function returning a function", name);
-             type = integer_type_node;
-           }
-         if (TREE_CODE (type) == ARRAY_TYPE)
-           {
-             error ("`%s' declared as function returning an array", name);
-             type = integer_type_node;
-           }
+           /* Warn about some types functions can't return.  */
+           if (TREE_CODE (type) == FUNCTION_TYPE)
+             {
+               error ("`%s' declared as function returning a function", name);
+               type = integer_type_node;
+             }
+           if (TREE_CODE (type) == ARRAY_TYPE)
+             {
+               error ("`%s' declared as function returning an array", name);
+               type = integer_type_node;
+             }
 
-         /* Construct the function type and go to the next
-            inner layer of declarator.  */
-         arg_info = TREE_OPERAND (declarator, 1);
-         arg_types = grokparms (arg_info, really_funcdef);
+           /* Construct the function type and go to the next
+              inner layer of declarator.  */
+           arg_info = TREE_OPERAND (declarator, 1);
+           arg_types = grokparms (arg_info, really_funcdef);
 
-         /* Type qualifiers before the return type of the function
-            qualify the return type, not the function type.  */
-         if (type_quals)
+           /* Type qualifiers before the return type of the function
+              qualify the return type, not the function type.  */
+           if (type_quals)
+             {
+               /* Type qualifiers on a function return type are
+                  normally permitted by the standard but have no
+                  effect, so give a warning at -Wreturn-type.
+                  Qualifiers on a void return type are banned on
+                  function definitions in ISO C; GCC used to used
+                  them for noreturn functions.  */
+               if (VOID_TYPE_P (type) && really_funcdef)
+                 pedwarn ("function definition has qualified void return type");
+               else if (warn_return_type)
+                 warning ("type qualifiers ignored on function return type");
+               
+               type = c_build_qualified_type (type, type_quals);
+             }
+           type_quals = TYPE_UNQUALIFIED;
+           
+           type = build_function_type (type, arg_types);
+           declarator = TREE_OPERAND (declarator, 0);
+           
+           /* Set the TYPE_CONTEXTs for each tagged type which is local to
+              the formal parameter list of this FUNCTION_TYPE to point to
+              the FUNCTION_TYPE node itself.  */
            {
-             /* Type qualifiers on a function return type are
-                normally permitted by the standard but have no
-                effect, so give a warning at -Wreturn-type.
-                Qualifiers on a void return type are banned on
-                function definitions in ISO C; GCC used to used them
-                for noreturn functions.  */
-             if (VOID_TYPE_P (type) && really_funcdef)
-               pedwarn ("function definition has qualified void return type");
-             else if (warn_return_type)
-               warning ("type qualifiers ignored on function return type");
-
-             type = c_build_qualified_type (type, type_quals);
+             tree link;
+             
+             for (link = ARG_INFO_TAGS (arg_info);
+                  link;
+                  link = TREE_CHAIN (link))
+               TYPE_CONTEXT (TREE_VALUE (link)) = type;
            }
-         type_quals = TYPE_UNQUALIFIED;
-
-         type = build_function_type (type, arg_types);
-         declarator = TREE_OPERAND (declarator, 0);
-
-         /* Set the TYPE_CONTEXTs for each tagged type which is local to
-            the formal parameter list of this FUNCTION_TYPE to point to
-            the FUNCTION_TYPE node itself.  */
-
+           break;
+         }
+       case INDIRECT_REF:
          {
-           tree link;
+           /* Merge any constancy or volatility into the target type
+              for the pointer.  */
 
-           for (link = ARG_INFO_TAGS (arg_info);
-                link;
-                link = TREE_CHAIN (link))
-             TYPE_CONTEXT (TREE_VALUE (link)) = type;
+           if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
+               && type_quals)
+             pedwarn ("ISO C forbids qualified function types");
+           if (type_quals)
+             type = c_build_qualified_type (type, type_quals);
+           type_quals = TYPE_UNQUALIFIED;
+           size_varies = 0;
+           
+           type = build_pointer_type (type);
+           
+           /* Process a list of type modifier keywords (such as const
+              or volatile) that were given inside the `*'.  */
+           if (TREE_TYPE (declarator))
+             {
+               tree typemodlist;
+               int erred = 0;
+               
+               constp = 0;
+               volatilep = 0;
+               restrictp = 0;
+               for (typemodlist = TREE_TYPE (declarator); typemodlist;
+                    typemodlist = TREE_CHAIN (typemodlist))
+                 {
+                   tree qualifier = TREE_VALUE (typemodlist);
+                   
+                   if (C_IS_RESERVED_WORD (qualifier))
+                     {
+                       if (C_RID_CODE (qualifier) == RID_CONST)
+                         constp++;
+                       else if (C_RID_CODE (qualifier) == RID_VOLATILE)
+                         volatilep++;
+                       else if (C_RID_CODE (qualifier) == RID_RESTRICT)
+                         restrictp++;
+                       else
+                         erred++;
+                     }
+                   else
+                     erred++;
+                 }
+               
+               if (erred)
+                 error ("invalid type modifier within pointer declarator");
+               if (pedantic && !flag_isoc99)
+                 {
+                   if (constp > 1)
+                     pedwarn ("duplicate `const'");
+                   if (volatilep > 1)
+                     pedwarn ("duplicate `volatile'");
+                   if (restrictp > 1)
+                     pedwarn ("duplicate `restrict'");
+                 }
+               
+               type_quals = ((constp ? TYPE_QUAL_CONST : 0)
+                             | (restrictp ? TYPE_QUAL_RESTRICT : 0)
+                             | (volatilep ? TYPE_QUAL_VOLATILE : 0));
+             }
+           
+           declarator = TREE_OPERAND (declarator, 0);
+           break;
          }
+       default:
+         gcc_unreachable ();
        }
-      else if (TREE_CODE (declarator) == INDIRECT_REF)
-       {
-         /* Merge any constancy or volatility into the target type
-            for the pointer.  */
-
-         if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
-             && type_quals)
-           pedwarn ("ISO C forbids qualified function types");
-         if (type_quals)
-           type = c_build_qualified_type (type, type_quals);
-         type_quals = TYPE_UNQUALIFIED;
-         size_varies = 0;
-
-         type = build_pointer_type (type);
-
-         /* Process a list of type modifier keywords
-            (such as const or volatile) that were given inside the `*'.  */
-
-         if (TREE_TYPE (declarator))
-           {
-             tree typemodlist;
-             int erred = 0;
-
-             constp = 0;
-             volatilep = 0;
-             restrictp = 0;
-             for (typemodlist = TREE_TYPE (declarator); typemodlist;
-                  typemodlist = TREE_CHAIN (typemodlist))
-               {
-                 tree qualifier = TREE_VALUE (typemodlist);
-
-                 if (C_IS_RESERVED_WORD (qualifier))
-                   {
-                     if (C_RID_CODE (qualifier) == RID_CONST)
-                       constp++;
-                     else if (C_RID_CODE (qualifier) == RID_VOLATILE)
-                       volatilep++;
-                     else if (C_RID_CODE (qualifier) == RID_RESTRICT)
-                       restrictp++;
-                     else
-                       erred++;
-                   }
-                 else
-                   erred++;
-               }
-
-             if (erred)
-               error ("invalid type modifier within pointer declarator");
-             if (pedantic && !flag_isoc99)
-               {
-                 if (constp > 1)
-                   pedwarn ("duplicate `const'");
-                 if (volatilep > 1)
-                   pedwarn ("duplicate `volatile'");
-                 if (restrictp > 1)
-                   pedwarn ("duplicate `restrict'");
-               }
-
-             type_quals = ((constp ? TYPE_QUAL_CONST : 0)
-                           | (restrictp ? TYPE_QUAL_RESTRICT : 0)
-                           | (volatilep ? TYPE_QUAL_VOLATILE : 0));
-           }
-
-         declarator = TREE_OPERAND (declarator, 0);
-       }
-      else
-       abort ();
-
     }
 
   /* Now TYPE has the actual type.  */
@@ -4930,12 +4928,9 @@ grokdeclarator (tree declarator, tree declspecs,
        C_DECL_REGISTER (decl) = was_reg;
       }
 
-#ifdef ENABLE_CHECKING
   /* This is the earliest point at which we might know the assembler
      name of a variable.  Thus, if it's known before this, die horribly.  */
-  if (DECL_ASSEMBLER_NAME_SET_P (decl))
-    abort ();
-#endif
+    gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl));
 
     decl_attributes (&decl, returned_attrs, 0);
 
@@ -5059,10 +5054,7 @@ get_parm_info (bool ellipsis)
 
   /* This function is only called if there was *something* on the
      parameter list.  */
-#ifdef ENABLE_CHECKING
-  if (b == 0)
-    abort ();
-#endif
+  gcc_assert (b);
 
   /* A parameter list consisting solely of 'void' indicates that the
      function takes no arguments.  But if the 'void' is qualified
@@ -5103,9 +5095,7 @@ get_parm_info (bool ellipsis)
        case PARM_DECL:
          if (b->id)
            {
-#ifdef ENABLE_CHECKING
-             if (I_SYMBOL_BINDING (b->id) != b) abort ();
-#endif
+             gcc_assert (I_SYMBOL_BINDING (b->id) == b);
              I_SYMBOL_BINDING (b->id) = b->shadowed;
            }
 
@@ -5143,9 +5133,7 @@ get_parm_info (bool ellipsis)
             appears in the bindings list with b->id NULL.  */
          if (b->id)
            {
-#ifdef ENABLE_CHECKING
-             if (I_TAG_BINDING (b->id) != b) abort ();
-#endif
+             gcc_assert (I_TAG_BINDING (b->id) == b);
              I_TAG_BINDING (b->id) = b->shadowed;
            }
 
@@ -5192,9 +5180,7 @@ get_parm_info (bool ellipsis)
             variable.  Just throw it away.  */
          if (b->id)
            {
-#ifdef ENABLE_CHECKING
-             if (I_SYMBOL_BINDING (b->id) != b) abort ();
-#endif
+             gcc_assert (I_SYMBOL_BINDING (b->id) == b);
              I_SYMBOL_BINDING (b->id) = b->shadowed;
            }
          break;
@@ -5204,7 +5190,7 @@ get_parm_info (bool ellipsis)
        case FUNCTION_DECL:
        case VAR_DECL:
        default:
-         abort ();
+         gcc_unreachable ();
        }
 
       b = free_binding_and_advance (b);
@@ -6054,12 +6040,9 @@ start_function (tree declspecs, tree declarator, tree attributes)
   if (current_function_decl != 0)
     TREE_PUBLIC (decl1) = 0;
 
-#ifdef ENABLE_CHECKING
   /* This is the earliest point at which we might know the assembler
      name of the function.  Thus, if it's set before this, die horribly.  */
-  if (DECL_ASSEMBLER_NAME_SET_P (decl1))
-    abort ();
-#endif
+  gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl1));
 
   /* If #pragma weak was used, mark the decl weak now.  */
   if (current_scope == file_scope)
@@ -6229,8 +6212,7 @@ store_parm_decls_oldstyle (tree fndecl, tree arg_info)
      seen already, since it is not used on PARM_DECL.  */
 #ifdef ENABLE_CHECKING
   for (b = current_scope->bindings; b; b = b->prev)
-    if (TREE_CODE (b->decl) == PARM_DECL && DECL_WEAK (b->decl))
-      abort ();
+    gcc_assert (TREE_CODE (b->decl) != PARM_DECL || !DECL_WEAK (b->decl));
 #endif
 
   if (warn_old_style_definition && !in_system_header)
@@ -6991,8 +6973,7 @@ c_write_global_declarations (void)
   /* Close the external scope.  */
   ext_block = pop_scope ();
   external_scope = 0;
-  if (current_scope)
-    abort ();
+  gcc_assert (!current_scope);
 
   /* Process all file scopes in this compilation, and the external_scope,
      through wrapup_global_declarations and check_global_declarations.  */
index 019b91a733952305f5c1100b99b2487002fd6412..9524746568e25e5a5b7e5a1d57b4a3033a3ca1b1 100644 (file)
@@ -151,7 +151,7 @@ check_format_string (tree argument, unsigned HOST_WIDE_INT format_num,
    and store its value. If validated_p is true, abort on errors.
    Returns true on success, false otherwise.  */
 static bool
-get_constant(tree expr, unsigned HOST_WIDE_INT *value, int validated_p)
+get_constant (tree expr, unsigned HOST_WIDE_INT *value, int validated_p)
 {
   while (TREE_CODE (expr) == NOP_EXPR
         || TREE_CODE (expr) == CONVERT_EXPR
@@ -160,8 +160,7 @@ get_constant(tree expr, unsigned HOST_WIDE_INT *value, int validated_p)
 
   if (TREE_CODE (expr) != INTEGER_CST || TREE_INT_CST_HIGH (expr) != 0)
     {
-      if (validated_p)
-       abort ();
+      gcc_assert (!validated_p);
       return false;
     }
 
@@ -187,8 +186,7 @@ decode_format_attr (tree args, function_format_info *info, int validated_p)
 
   if (TREE_CODE (format_type_id) != IDENTIFIER_NODE)
     {
-      if (validated_p)
-       abort ();
+      gcc_assert (!validated_p);
       error ("unrecognized format specifier");
       return false;
     }
@@ -200,8 +198,7 @@ decode_format_attr (tree args, function_format_info *info, int validated_p)
 
       if (info->format_type == format_type_error)
        {
-         if (validated_p)
-           abort ();
+         gcc_assert (!validated_p);
          warning ("%qs is an unrecognized format function type", p);
          return false;
        }
@@ -221,8 +218,7 @@ decode_format_attr (tree args, function_format_info *info, int validated_p)
 
   if (info->first_arg_num != 0 && info->first_arg_num <= info->format_num)
     {
-      if (validated_p)
-       abort ();
+      gcc_assert (!validated_p);
       error ("format string arg follows the args to be formatted");
       return false;
     }
@@ -1004,11 +1000,8 @@ maybe_read_dollar_number (const char **format,
       for (i = 1; i < argnum && *param_ptr != 0; i++)
        *param_ptr = TREE_CHAIN (*param_ptr);
 
-      if (*param_ptr == 0)
-       {
-         /* This case shouldn't be caught here.  */
-         abort ();
-       }
+      /* This case shouldn't be caught here.  */
+      gcc_assert (*param_ptr);
     }
   else
     *param_ptr = 0;
@@ -1096,10 +1089,8 @@ get_flag_spec (const format_flag_spec *spec, int flag, const char *predicates)
       else if (spec[i].predicate == 0)
        return &spec[i];
     }
-  if (predicates == NULL)
-    abort ();
-  else
-    return NULL;
+  gcc_assert (predicates);
+  return NULL;
 }
 
 
@@ -1299,8 +1290,8 @@ check_format_arg (void *ctx, tree format_tree,
   if (array_size != 0)
     {
       /* Variable length arrays can't be initialized.  */
-      if (TREE_CODE (array_size) != INTEGER_CST)
-       abort ();
+      gcc_assert (TREE_CODE (array_size) == INTEGER_CST);
+      
       if (host_integerp (array_size, 0))
        {
          HOST_WIDE_INT array_size_value = TREE_INT_CST_LOW (array_size);
@@ -2053,10 +2044,8 @@ check_format_types (format_wanted_type *types, const char *format_start,
       arg_num = types->arg_num;
 
       /* The following should not occur here.  */
-      if (wanted_type == 0)
-       abort ();
-      if (wanted_type == void_type_node && types->pointer_count == 0)
-       abort ();
+      gcc_assert (wanted_type);
+      gcc_assert (wanted_type != void_type_node || types->pointer_count);
 
       if (types->pointer_count == 0)
        wanted_type = lang_hooks.types.type_promotes_to (wanted_type);
@@ -2253,17 +2242,14 @@ format_type_warning (const char *descr, const char *format_start,
 static unsigned int
 find_char_info_specifier_index (const format_char_info *fci, int c)
 {
-  unsigned int i = 0;
-  
-  while (fci->format_chars)
-    {
-      if (strchr (fci->format_chars, c))
-       return i;
-      i++; fci++;
-    }
+  unsigned i;
+
+  for (i = 0; fci->format_chars; i++, fci++)
+    if (strchr (fci->format_chars, c))
+      return i;
   
   /* We shouldn't be looking for a non-existent specifier.  */
-  abort ();
+  gcc_unreachable ();
 }
 
 /* Given a format_length_info array FLI, and a character C, this
@@ -2273,17 +2259,14 @@ find_char_info_specifier_index (const format_char_info *fci, int c)
 static unsigned int
 find_length_info_modifier_index (const format_length_info *fli, int c)
 {
-  unsigned int i = 0;
-  
-  while (fli->name)
-    {
-      if (strchr (fli->name, c))
-       return i;
-      i++; fli++;
-    }
+  unsigned i;
+
+  for (i = 0; fli->name; i++, fli++)
+    if (strchr (fli->name, c))
+      return i;
   
   /* We shouldn't be looking for a non-existent modifier.  */
-  abort ();
+  gcc_unreachable ();
 }
 
 /* Determine the type of HOST_WIDE_INT in the code being compiled for
@@ -2293,7 +2276,7 @@ static void
 init_dynamic_asm_fprintf_info (void)
 {
   static tree hwi;
-      
+
   if (!hwi)
     {
       format_length_info *new_asm_fprintf_length_specs;
@@ -2303,9 +2286,10 @@ init_dynamic_asm_fprintf_info (void)
         length modifier to work, one must have issued: "typedef
         HOST_WIDE_INT __gcc_host_wide_int__;" in one's source code
         prior to using that modifier.  */
-      if (!(hwi = maybe_get_identifier ("__gcc_host_wide_int__"))
-         || !(hwi = DECL_ORIGINAL_TYPE (identifier_global_value (hwi))))
-       abort ();
+      hwi = maybe_get_identifier ("__gcc_host_wide_int__");
+      gcc_assert (hwi);
+      hwi = DECL_ORIGINAL_TYPE (identifier_global_value (hwi));
+      gcc_assert (hwi);
 
       /* Create a new (writable) copy of asm_fprintf_length_specs.  */
       new_asm_fprintf_length_specs = (format_length_info *)
@@ -2320,7 +2304,7 @@ init_dynamic_asm_fprintf_info (void)
       else if (hwi == long_long_integer_type_node)
        new_asm_fprintf_length_specs[i].index = FMT_LEN_ll;
       else
-       abort ();
+       gcc_unreachable ();
 
       /* Assign the new data for use.  */
       dynamic_format_types[asm_fprintf_format_type].length_char_specs =
@@ -2383,7 +2367,7 @@ init_dynamic_diag_info (void)
          else if (hwi == long_long_integer_type_node)
            diag_ls[i].index = FMT_LEN_ll;
          else
-           abort ();
+           gcc_unreachable ();
        }
 
       /* Handle the __gcc_diag__ format specifics.  */
@@ -2551,7 +2535,7 @@ handle_format_attribute (tree *node, tree ARG_UNUSED (name), tree args,
               || info.format_type == gcc_cxxdiag_format_type)
        init_dynamic_diag_info();
       else
-       abort();
+       gcc_unreachable();
     }
 
   return NULL_TREE;
index 404ea71f0fcd6c5bdf699daf2494844d28d195a2..d77d75c2f77ce23571fccb92197d1b610e4c10aa 100644 (file)
@@ -84,8 +84,7 @@ static struct c_gimplify_ctx
 static void
 push_context (void)
 {
-  if (ctxp)
-    abort ();
+  gcc_assert (!ctxp);
   ctxp = (struct c_gimplify_ctx *) xcalloc (1, sizeof (struct c_gimplify_ctx));
   ctxp->bc_id[bc_continue] = get_identifier ("continue");
   ctxp->bc_id[bc_break] = get_identifier ("break");
@@ -94,8 +93,7 @@ push_context (void)
 static void
 pop_context (void)
 {
-  if (!ctxp || ctxp->current_bc_label)
-    abort ();
+  gcc_assert (ctxp && !ctxp->current_bc_label);
   free (ctxp);
   ctxp = NULL;
 }
@@ -275,8 +273,7 @@ begin_bc_block (enum bc_t bc)
 static tree
 finish_bc_block (tree label, tree body)
 {
-  if (label != ctxp->current_bc_label)
-    abort ();
+  gcc_assert (label == ctxp->current_bc_label);
 
   if (TREE_USED (label))
     {
index 4b875618420e197218b325827ffa886e4f4ba38a..6334885f0a326943dd0c0f4ed7ce79a614097212 100644 (file)
@@ -373,7 +373,7 @@ c_lex_with_flags (tree *value, unsigned char *cpp_flags)
            break;
 
          default:
-           abort ();
+           gcc_unreachable ();
          }
       }
       break;
@@ -435,7 +435,7 @@ c_lex_with_flags (tree *value, unsigned char *cpp_flags)
     case CPP_HEADER_NAME:
     case CPP_COMMENT:
     case CPP_MACRO_ARG:
-      abort ();
+      gcc_unreachable ();
 
     default:
       *value = NULL_TREE;
@@ -737,12 +737,11 @@ lex_string (const cpp_token *tok, tree *valp, bool objc_string)
 
       if (c_lex_string_translate == -1)
        {
-         if (!cpp_interpret_string_notranslate (parse_in, strs, count,
-                                                &istr, wide))
-           /* Assume that, if we managed to translate the string
-              above, then the untranslated parsing will always
-              succeed.  */
-           abort ();
+         int xlated = cpp_interpret_string_notranslate (parse_in, strs, count,
+                                                        &istr, wide);
+         /* Assume that, if we managed to translate the string above,
+            then the untranslated parsing will always succeed.  */
+         gcc_assert (xlated);
          
          if (TREE_STRING_LENGTH (value) != (int)istr.len
              || 0 != strncmp (TREE_STRING_POINTER (value), (char *)istr.text,
index a4bb683ca937ca0c9a1cfbddd088e6bed977dc8e..9d05a6d97bfcd3499516d450fc5af4af2c366f59 100644 (file)
@@ -213,10 +213,9 @@ c_tree_printer (pretty_printer *pp, text_info *text)
       break;
 
     case 'T':
-      if (TYPE_P (t))
-       name = TYPE_NAME (t);
-      else
-       abort ();
+      gcc_assert (TYPE_P (t));
+      name = TYPE_NAME (t);
+      
       if (name && TREE_CODE (name) == TYPE_DECL)
        {
          if (DECL_NAME (name))
index 21c3135b1102b0f4d0e2e791c3769913d5d87a13..6352d37fb3d995b8720a905ff60a30f84219cf63 100644 (file)
@@ -129,10 +129,10 @@ pch_init (void)
   if (f == NULL)
     fatal_error ("can't create precompiled header %s: %m", pch_file);
   pch_outfile = f;
-  
-  if (strlen (host_machine) > 255 || strlen (target_machine) > 255
-      || strlen (version_string) > 255)
-    abort ();
+
+  gcc_assert (strlen (host_machine) < 256
+             && strlen (target_machine) < 256
+             && strlen (version_string) < 256);
   
   v.host_machine_length = strlen (host_machine);
   v.target_machine_length = strlen (target_machine);
@@ -143,8 +143,7 @@ pch_init (void)
     for (i = 0; i < MATCH_SIZE; i++)
       {
        v.match[i] = *pch_matching[i].flag_var;
-       if (v.match[i] != *pch_matching[i].flag_var)
-         abort ();
+       gcc_assert (v.match[i] == *pch_matching[i].flag_var);
       }
   }
   v.pch_init = &pch_init;
index cb518e0347513fd7441593812ce6a4134eb31161..fe9f17ab569f7e6448ec014c64fab7e40e7b6151 100644 (file)
@@ -279,7 +279,7 @@ maybe_apply_pragma_weak (tree decl)
     return;
   /* If it's not a function or a variable, it can't be weak.
      FIXME: what kinds of things are visible outside this file but
-     aren't functions or variables?   Should this be an abort() instead?  */
+     aren't functions or variables?   Should this be an assert instead?  */
   if (TREE_CODE (decl) != FUNCTION_DECL && TREE_CODE (decl) != VAR_DECL)
     return;
 
index 43bc1deaec58b4a02bbef6a8a9967be95f29bf7b..7b741244bbf0508ab6ed06b92e9a9f1f90105b71 100644 (file)
@@ -2139,8 +2139,7 @@ pp_c_tree_decl_identifier (c_pretty_printer *pp, tree t)
 {
   const char *name;
 
-  if (!DECL_P (t))
-    abort ();
+  gcc_assert (DECL_P (t));
 
   if (DECL_NAME (t))
     name = IDENTIFIER_POINTER (DECL_NAME (t));
index 33c19da6d0a041241b0d9d88ae2351b7b5ae67f3..c776c7874bf826f66aeffd5bfa5e6687dea17c70 100644 (file)
@@ -157,7 +157,7 @@ c_incomplete_type_error (tree value, tree type)
          return;
 
        default:
-         abort ();
+         gcc_unreachable ();
        }
 
       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
@@ -240,8 +240,7 @@ composite_type (tree t1, tree t2)
   if (code2 == ENUMERAL_TYPE && code1 == INTEGER_TYPE)
     return t2;
 
-  if (code1 != code2)
-    abort ();
+  gcc_assert (code1 == code2);
 
   switch (code1)
     {
@@ -261,8 +260,7 @@ composite_type (tree t1, tree t2)
        tree elt = composite_type (TREE_TYPE (t1), TREE_TYPE (t2));
        
        /* We should not have any type quals on arrays at all.  */
-       if (TYPE_QUALS (t1) || TYPE_QUALS (t2))
-         abort ();
+       gcc_assert (!TYPE_QUALS (t1) && !TYPE_QUALS (t2));
        
        /* Save space: see if the result is identical to one of the args.  */
        if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
@@ -412,8 +410,8 @@ common_pointer_type (tree t1, tree t2)
   if (t2 == error_mark_node)
     return t1;
 
-  if (TREE_CODE (t1) != POINTER_TYPE || TREE_CODE (t2) != POINTER_TYPE)
-    abort ();
+  gcc_assert (TREE_CODE (t1) == POINTER_TYPE
+             && TREE_CODE (t2) == POINTER_TYPE);
 
   /* Merge the attributes.  */
   attributes = targetm.merge_type_attributes (t1, t2);
@@ -470,13 +468,10 @@ common_type (tree t1, tree t2)
   code1 = TREE_CODE (t1);
   code2 = TREE_CODE (t2);
 
-  if (code1 != VECTOR_TYPE && code1 != COMPLEX_TYPE
-      && code1 != REAL_TYPE && code1 != INTEGER_TYPE)
-    abort ();
-
-  if (code2 != VECTOR_TYPE && code2 != COMPLEX_TYPE
-      && code2 != REAL_TYPE && code2 != INTEGER_TYPE)
-    abort ();
+  gcc_assert (code1 == VECTOR_TYPE || code1 == COMPLEX_TYPE
+             || code1 == REAL_TYPE || code1 == INTEGER_TYPE);
+  gcc_assert (code2 == VECTOR_TYPE || code2 == COMPLEX_TYPE
+             || code2 == REAL_TYPE || code2 == INTEGER_TYPE);
 
   /* If one type is a vector type, return that type.  (How the usual
      arithmetic conversions apply to the vector types extension is not
@@ -744,7 +739,7 @@ same_translation_unit_p (tree t1, tree t2)
       case 'd': t1 = DECL_CONTEXT (t1); break;
       case 't': t1 = TYPE_CONTEXT (t1); break;
       case 'x': t1 = BLOCK_SUPERCONTEXT (t1); break;  /* assume block */
-      default: abort ();
+      default: gcc_unreachable ();
       }
 
   while (t2 && TREE_CODE (t2) != TRANSLATION_UNIT_DECL)
@@ -753,7 +748,7 @@ same_translation_unit_p (tree t1, tree t2)
       case 'd': t2 = DECL_CONTEXT (t2); break;
       case 't': t2 = TYPE_CONTEXT (t2); break;
       case 'x': t2 = BLOCK_SUPERCONTEXT (t2); break;  /* assume block */
-      default: abort ();
+      default: gcc_unreachable ();
       }
 
   return t1 == t2;
@@ -935,7 +930,7 @@ tagged_types_tu_compatible_p (tree t1, tree t2)
       }
 
     default:
-      abort ();
+      gcc_unreachable ();
     }
 }
 
@@ -4371,8 +4366,7 @@ finish_init (void)
       free (q);
     }
 
-  if (constructor_range_stack)
-    abort ();
+  gcc_assert (!constructor_range_stack);
 
   /* Pop back to the data of the outer initializer (if any).  */
   free (spelling_base);
@@ -4716,8 +4710,7 @@ pop_init_level (int implicit)
       while (constructor_stack->implicit)
        process_init_element (pop_init_level (1));
 
-      if (constructor_range_stack)
-       abort ();
+      gcc_assert (!constructor_range_stack);
     }
 
   /* Now output all pending elements.  */
@@ -4737,8 +4730,10 @@ pop_init_level (int implicit)
         already have pedwarned for empty brackets.  */
       if (integer_zerop (constructor_unfilled_index))
        constructor_type = NULL_TREE;
-      else if (! TYPE_SIZE (constructor_type))
+      else
        {
+         gcc_assert (!TYPE_SIZE (constructor_type));
+         
          if (constructor_depth > 2)
            error_init ("initialization of flexible array member in a nested context");
          else if (pedantic)
@@ -4750,10 +4745,6 @@ pop_init_level (int implicit)
          if (TREE_CHAIN (constructor_fields) != NULL_TREE)
            constructor_type = NULL_TREE;
        }
-      else
-       /* Zero-length arrays are no longer special, so we should no longer
-          get here.  */
-       abort ();
     }
 
   /* Warn when some struct elements are implicitly initialized to zero.  */
@@ -4869,14 +4860,14 @@ set_designator (int array)
   if (constructor_type == 0)
     return 1;
 
-  /* If there were errors in this designator list already, bail out silently.  */
+  /* If there were errors in this designator list already, bail out
+     silently.  */
   if (designator_errorneous)
     return 1;
 
   if (!designator_depth)
     {
-      if (constructor_range_stack)
-       abort ();
+      gcc_assert (!constructor_range_stack);
 
       /* Designator list starts at the level of closest explicit
         braces.  */
@@ -4892,19 +4883,20 @@ set_designator (int array)
       return 1;
     }
 
-  if (TREE_CODE (constructor_type) == RECORD_TYPE
-      || TREE_CODE (constructor_type) == UNION_TYPE)
+  switch (TREE_CODE (constructor_type))
     {
+    case  RECORD_TYPE:
+    case  UNION_TYPE:
       subtype = TREE_TYPE (constructor_fields);
       if (subtype != error_mark_node)
        subtype = TYPE_MAIN_VARIANT (subtype);
-    }
-  else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
-    {
+      break;
+    case ARRAY_TYPE:
       subtype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
+      break;
+    default:
+      gcc_unreachable ();
     }
-  else
-    abort ();
 
   subcode = TREE_CODE (subtype);
   if (array && subcode != ARRAY_TYPE)
@@ -5324,18 +5316,17 @@ set_nonincremental_init_from_string (tree str)
   const char *p, *end;
   int byte, wchar_bytes, charwidth, bitpos;
 
-  if (TREE_CODE (constructor_type) != ARRAY_TYPE)
-    abort ();
+  gcc_assert (TREE_CODE (constructor_type) == ARRAY_TYPE);
 
   if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
       == TYPE_PRECISION (char_type_node))
     wchar_bytes = 1;
-  else if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
-          == TYPE_PRECISION (wchar_type_node))
-    wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
   else
-    abort ();
-
+    {
+      gcc_assert (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
+                 == TYPE_PRECISION (wchar_type_node));
+      wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
+    }
   charwidth = TYPE_PRECISION (char_type_node);
   type = TREE_TYPE (constructor_type);
   p = TREE_STRING_POINTER (str);
@@ -6077,16 +6068,14 @@ process_init_element (struct c_expr value)
          constructor_range_stack = 0;
          while (constructor_stack != range_stack->stack)
            {
-             if (!constructor_stack->implicit)
-               abort ();
+             gcc_assert (constructor_stack->implicit);
              process_init_element (pop_init_level (1));
            }
          for (p = range_stack;
               !p->range_end || tree_int_cst_equal (p->index, p->range_end);
               p = p->prev)
            {
-             if (!constructor_stack->implicit)
-               abort ();
+             gcc_assert (constructor_stack->implicit);
              process_init_element (pop_init_level (1));
            }
 
@@ -6471,7 +6460,7 @@ c_finish_if_stmt (location_t if_locus, tree cond, tree then_block,
            inner_if = TREE_OPERAND (inner_if, 0);
            break;
          default:
-           abort ();
+           gcc_unreachable ();
          }
     found:
 
index aa9b5845a41e7b40e36f3368a4b796d59a3ba1e3..53446f38ec3101f47b02c20d2a9141dfb91fa36d 100644 (file)
@@ -160,8 +160,7 @@ init_caller_save (void)
         [(int) MODE_BASE_REG_CLASS (regno_save_mode [i][1])], i))
       break;
 
-  if (i == FIRST_PSEUDO_REGISTER)
-    abort ();
+  gcc_assert (i < FIRST_PSEUDO_REGISTER);
 
   addr_reg = gen_rtx_REG (Pmode, i);
 
@@ -381,8 +380,7 @@ save_call_clobbered_regs (void)
 
       next = chain->next;
 
-      if (chain->is_caller_save_insn)
-       abort ();
+      gcc_assert (!chain->is_caller_save_insn);
 
       if (INSN_P (insn))
        {
@@ -431,22 +429,17 @@ save_call_clobbered_regs (void)
                 {
                   int r = reg_renumber[regno];
                   int nregs;
-
-                  if (r >= 0)
-                    {
-                      enum machine_mode mode;
-
-                      nregs = hard_regno_nregs[r][PSEUDO_REGNO_MODE (regno)];
-                      mode = HARD_REGNO_CALLER_SAVE_MODE
-                               (r, nregs, PSEUDO_REGNO_MODE (regno));
-                      if (GET_MODE_BITSIZE (mode)
-                          > GET_MODE_BITSIZE (save_mode[r]))
-                        save_mode[r] = mode;
-                      while (nregs-- > 0)
-                        SET_HARD_REG_BIT (hard_regs_to_save, r + nregs);
-                    }
-                  else
-                    abort ();
+                  enum machine_mode mode;
+
+                  gcc_assert (r >= 0);
+                  nregs = hard_regno_nregs[r][PSEUDO_REGNO_MODE (regno)];
+                  mode = HARD_REGNO_CALLER_SAVE_MODE
+                    (r, nregs, PSEUDO_REGNO_MODE (regno));
+                  if (GET_MODE_BITSIZE (mode)
+                      > GET_MODE_BITSIZE (save_mode[r]))
+                    save_mode[r] = mode;
+                  while (nregs-- > 0)
+                    SET_HARD_REG_BIT (hard_regs_to_save, r + nregs);
                 });
 
              /* Record all registers set in this call insn.  These don't need
@@ -650,9 +643,7 @@ insert_restore (struct insn_chain *chain, int before_p, int regno,
      or SET_SRC.  Instead of doing so and causing a crash later, check
      for this common case and abort here instead.  This will remove one
      step in debugging such problems.  */
-
-  if (regno_save_mem[regno][1] == 0)
-    abort ();
+  gcc_assert (regno_save_mem[regno][1]);
 
   /* Get the pattern to emit and update our status.
 
@@ -725,9 +716,7 @@ insert_save (struct insn_chain *chain, int before_p, int regno,
      or SET_SRC.  Instead of doing so and causing a crash later, check
      for this common case and abort here instead.  This will remove one
      step in debugging such problems.  */
-
-  if (regno_save_mem[regno][1] == 0)
-    abort ();
+  gcc_assert (regno_save_mem[regno][1]);
 
   /* Get the pattern to emit and update our status.
 
@@ -824,9 +813,7 @@ insert_one_insn (struct insn_chain *chain, int before_p, int code, rtx pat)
              rtx reg = XEXP (link, 0);
              int regno, i;
 
-             if (!REG_P (reg))
-               abort ();
-
+             gcc_assert (REG_P (reg));
              regno = REGNO (reg);
              if (regno >= FIRST_PSEUDO_REGISTER)
                regno = reg_renumber[regno];
index e350a3fed14ac42f525f66b5e0cd00e46019d840..eea4146e16bdb8a2f2b04aea89538ed0e023d94a 100644 (file)
@@ -349,7 +349,7 @@ emit_call_1 (rtx funexp, tree fntree, tree fndecl ATTRIBUTE_UNUSED,
     }
   else
 #endif
-    abort ();
+    gcc_unreachable ();
 
   /* Find the call we just emitted.  */
   call_insn = last_call_insn ();
@@ -1158,8 +1158,7 @@ compute_argument_block_size (int reg_parm_stack_space,
          /* We don't handle this case yet.  To handle it correctly we have
             to add the delta, round and subtract the delta.
             Currently no machine description requires this support.  */
-         if (stack_pointer_delta & (preferred_stack_boundary - 1))
-           abort ();
+         gcc_assert (!(stack_pointer_delta & (preferred_stack_boundary - 1)));
          args_size->var = round_up (args_size->var, preferred_stack_boundary);
        }
 
@@ -1225,8 +1224,7 @@ precompute_arguments (int flags, int num_actuals, struct arg_data *args)
       enum machine_mode mode;
 
       /* If this is an addressable type, we cannot pre-evaluate it.  */
-      if (TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value)))
-       abort ();
+      gcc_assert (!TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value)));
 
       args[i].initial_value = args[i].value
        = expand_expr (args[i].tree_value, NULL_RTX, VOIDmode, 0);
@@ -1999,8 +1997,7 @@ expand_call (tree exp, rtx target, int ignore)
 
   /* Operand 0 is a pointer-to-function; get the type of the function.  */
   funtype = TREE_TYPE (addr);
-  if (! POINTER_TYPE_P (funtype))
-    abort ();
+  gcc_assert (POINTER_TYPE_P (funtype));
   funtype = TREE_TYPE (funtype);
 
   /* Munge the tree to split complex arguments into their imaginary
@@ -2641,8 +2638,8 @@ expand_call (tree exp, rtx target, int ignore)
         now!  */
 
       /* Stack must be properly aligned now.  */
-      if (pass && stack_pointer_delta % preferred_unit_stack_boundary)
-       abort ();
+      gcc_assert (!pass
+                 || !(stack_pointer_delta % preferred_unit_stack_boundary));
 
       /* Generate the actual call instruction.  */
       emit_call_1 (funexp, exp, fndecl, funtype, unadjusted_args_size,
@@ -2754,8 +2751,7 @@ expand_call (tree exp, rtx target, int ignore)
            {
              last = PREV_INSN (last);
              /* There was no CALL_INSN?  */
-             if (last == before_call)
-               abort ();
+             gcc_assert (last != before_call);
            }
 
          emit_barrier_after (last);
@@ -2855,36 +2851,36 @@ expand_call (tree exp, rtx target, int ignore)
 
       if (targetm.calls.promote_function_return(funtype))
        {
-      /* If we promoted this return value, make the proper SUBREG.  TARGET
-        might be const0_rtx here, so be careful.  */
-      if (REG_P (target)
-         && TYPE_MODE (TREE_TYPE (exp)) != BLKmode
-         && GET_MODE (target) != TYPE_MODE (TREE_TYPE (exp)))
-       {
-         tree type = TREE_TYPE (exp);
-         int unsignedp = TYPE_UNSIGNED (type);
-         int offset = 0;
-
-         /* If we don't promote as expected, something is wrong.  */
-         if (GET_MODE (target)
-             != promote_mode (type, TYPE_MODE (type), &unsignedp, 1))
-           abort ();
-
-       if ((WORDS_BIG_ENDIAN || BYTES_BIG_ENDIAN)
-           && GET_MODE_SIZE (GET_MODE (target))
-              > GET_MODE_SIZE (TYPE_MODE (type)))
-         {
-           offset = GET_MODE_SIZE (GET_MODE (target))
-                    - GET_MODE_SIZE (TYPE_MODE (type));
-           if (! BYTES_BIG_ENDIAN)
-             offset = (offset / UNITS_PER_WORD) * UNITS_PER_WORD;
-           else if (! WORDS_BIG_ENDIAN)
-             offset %= UNITS_PER_WORD;
-         }
-         target = gen_rtx_SUBREG (TYPE_MODE (type), target, offset);
-         SUBREG_PROMOTED_VAR_P (target) = 1;
-         SUBREG_PROMOTED_UNSIGNED_SET (target, unsignedp);
-       }
+         /* If we promoted this return value, make the proper SUBREG.
+            TARGET might be const0_rtx here, so be careful.  */
+         if (REG_P (target)
+             && TYPE_MODE (TREE_TYPE (exp)) != BLKmode
+             && GET_MODE (target) != TYPE_MODE (TREE_TYPE (exp)))
+           {
+             tree type = TREE_TYPE (exp);
+             int unsignedp = TYPE_UNSIGNED (type);
+             int offset = 0;
+             enum machine_mode pmode;
+             
+             pmode = promote_mode (type, TYPE_MODE (type), &unsignedp, 1);
+             /* If we don't promote as expected, something is wrong.  */
+             gcc_assert (GET_MODE (target) == pmode);
+             
+             if ((WORDS_BIG_ENDIAN || BYTES_BIG_ENDIAN)
+                 && (GET_MODE_SIZE (GET_MODE (target))
+                     > GET_MODE_SIZE (TYPE_MODE (type))))
+               {
+                 offset = GET_MODE_SIZE (GET_MODE (target))
+                   - GET_MODE_SIZE (TYPE_MODE (type));
+                 if (! BYTES_BIG_ENDIAN)
+                   offset = (offset / UNITS_PER_WORD) * UNITS_PER_WORD;
+                 else if (! WORDS_BIG_ENDIAN)
+                   offset %= UNITS_PER_WORD;
+               }
+             target = gen_rtx_SUBREG (TYPE_MODE (type), target, offset);
+             SUBREG_PROMOTED_VAR_P (target) = 1;
+             SUBREG_PROMOTED_UNSIGNED_SET (target, unsignedp);
+           }
        }
 
       /* If size of args is variable or this was a constructor call for a stack
@@ -2971,10 +2967,9 @@ expand_call (tree exp, rtx target, int ignore)
          normal_call_insns = insns;
 
          /* Verify that we've deallocated all the stack we used.  */
-         if (! (flags & (ECF_NORETURN | ECF_LONGJMP))
-             && old_stack_allocated != stack_pointer_delta
-                                       - pending_stack_adjust)
-           abort ();
+         gcc_assert ((flags & (ECF_NORETURN | ECF_LONGJMP))
+                     || (old_stack_allocated
+                         == stack_pointer_delta - pending_stack_adjust));
        }
 
       /* If something prevents making this a sibling call,
@@ -3286,6 +3281,8 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
   if (mem_value && struct_value == 0 && ! pcc_struct_value)
     {
       rtx addr = XEXP (mem_value, 0);
+      int partial;
+      
       nargs++;
 
       /* Make sure it is a reasonable operand for a move or push insn.  */
@@ -3298,8 +3295,8 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
       argvec[count].partial = 0;
 
       argvec[count].reg = FUNCTION_ARG (args_so_far, Pmode, NULL_TREE, 1);
-      if (FUNCTION_ARG_PARTIAL_NREGS (args_so_far, Pmode, NULL_TREE, 1))
-       abort ();
+      partial = FUNCTION_ARG_PARTIAL_NREGS (args_so_far, Pmode, NULL_TREE, 1);
+      gcc_assert (!partial);
 
       locate_and_pad_parm (Pmode, NULL_TREE,
 #ifdef STACK_PARMS_IN_REG_PARM_AREA
@@ -3325,9 +3322,8 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
 
       /* We cannot convert the arg value to the mode the library wants here;
         must do it earlier where we know the signedness of the arg.  */
-      if (mode == BLKmode
-         || (GET_MODE (val) != mode && GET_MODE (val) != VOIDmode))
-       abort ();
+      gcc_assert (mode != BLKmode
+                 && (GET_MODE (val) == mode || GET_MODE (val) == VOIDmode));
 
       /* Make sure it is a reasonable operand for a move or push insn.  */
       if (!REG_P (val) && !MEM_P (val)
@@ -3397,8 +3393,7 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
                           argvec[count].partial,
                           NULL_TREE, &args_size, &argvec[count].locate);
 
-      if (argvec[count].locate.size.var)
-       abort ();
+      gcc_assert (!argvec[count].locate.size.var);
 
       if (argvec[count].reg == 0 || argvec[count].partial != 0
          || reg_parm_stack_space > 0)
@@ -3662,8 +3657,8 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
            ? hard_libcall_value (outmode) : NULL_RTX);
 
   /* Stack must be properly aligned now.  */
-  if (stack_pointer_delta & (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT - 1))
-    abort ();
+  gcc_assert (!(stack_pointer_delta
+               & (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT - 1)));
 
   before_call = get_last_insn ();
 
@@ -3698,8 +3693,7 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
        {
          last = PREV_INSN (last);
          /* There was no CALL_INSN?  */
-         if (last == before_call)
-           abort ();
+         gcc_assert (last != before_call);
        }
 
       emit_barrier_after (last);
@@ -3975,11 +3969,10 @@ store_one_arg (struct arg_data *arg, rtx argblock, int flags,
       partial = arg->partial;
     }
 
-  if (reg != 0 && partial == 0)
-    /* Being passed entirely in a register.  We shouldn't be called in
-       this case.  */
-    abort ();
-
+  /* Being passed entirely in a register.  We shouldn't be called in
+     this case.  */
+  gcc_assert (reg == 0 || partial != 0);
+  
   /* If this arg needs special alignment, don't load the registers
      here.  */
   if (arg->n_aligned_regs != 0)
@@ -4151,8 +4144,8 @@ store_one_arg (struct arg_data *arg, rtx argblock, int flags,
                i = INTVAL (XEXP (XEXP (x, 0), 1));
 
              /* expand_call should ensure this.  */
-             if (arg->locate.offset.var || GET_CODE (size_rtx) != CONST_INT)
-               abort ();
+             gcc_assert (!arg->locate.offset.var
+                         && GET_CODE (size_rtx) == CONST_INT);
 
              if (arg->locate.offset.constant > i)
                {