]> git.saurik.com Git - bison.git/commitdiff
Be a bit more systematic about using 'abort'.
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 21 Jan 2006 04:35:09 +0000 (04:35 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Sat, 21 Jan 2006 04:35:09 +0000 (04:35 +0000)
* lib/abitset.c (abitset_test): Remove ATTRIBUTE_UNUSED; not needed.
* lib/bitset.c (bitset_bytes, bitset_init, bitset_op4_cmp):
Put 'default: abort ();' before some other case, to satisfy older
pedantic compilers.
* lib/bitset_stats.c (bitset_stats_init): Likewise.
* lib/ebitset.c (ebitset_elt_find, ebitset_op3_cmp): Likewise.
* lib/lbitset.c (lbitset_elt_find, lbitset_op3_cmp): Likewise.
* src/conflicts.c (resolve_sr_conflict): Likewise.
* src/vcg.c (get_color_str, get_textmode_str, get_shape_str):
(get_decision_str, get_orientation_str, get_node_alignment_str):
(get_arrow_mode_str, get_crossing_type_str, get_view_str):
(get_linestyle_str, get_arrowstyle_str): Likewise.
* src/conflicts.c (resolve_sr_conflict):
Use a default case rather than one for the one remaining enum
value, to catch invalid enum values as well.
* src/lalr.c (set_goto_map, map_goto):
Prefer "assert (FOO);" to "if (!FOO) abort ();".
* src/nullable.c (nullable_compute, token_definitions_output):
Likewise.
* src/reader.c (packgram, reader): Likewise.
* src/state.c (transitions_to, state_new, state_reduction_find):
Likewise.
* src/symtab.c (symbol_user_token_number_set, symbol_make_alias):
(symbol_pack): Likewise.
* src/tables.c (conflict_row, pack_vector): Likewise.
* src/scan-skel.l (QPUTS): Remove unnecessary parens.
(BASE_QPUTS, "@output ".*\n): Remove unnecessary asserts.
* src/system.h: Don't include <assert.h>.
(assert): New macro.

17 files changed:
ChangeLog
lib/abitset.c
lib/bitset.c
lib/bitset_stats.c
lib/ebitset.c
lib/lbitset.c
src/conflicts.c
src/lalr.c
src/nullable.c
src/output.c
src/reader.c
src/scan-skel.l
src/state.c
src/symtab.c
src/system.h
src/tables.c
src/vcg.c

index d13a6be7fadbd5c81737982408c555f58be4aa10..10d105af7265e610f7503c9918d83346dfaa062f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,5 @@
 2006-01-20  Paul Eggert  <eggert@cs.ucla.edu>
 
-       * doc/bison.texinfo (Prologue, Rules, Actions, Union Decl, Action Decl):
-       (Destructor Decl, Parser Function, Pure Calling):
-       Describe rules for braces inside C code more carefully.
-
        Be a bit more systematic about using 'abort'.
        * lib/abitset.c (abitset_test): Remove ATTRIBUTE_UNUSED; not needed.
        * lib/bitset.c (bitset_bytes, bitset_init, bitset_op4_cmp):
        * lib/ebitset.c (ebitset_elt_find, ebitset_op3_cmp): Likewise.
        * lib/lbitset.c (lbitset_elt_find, lbitset_op3_cmp): Likewise.
        * src/conflicts.c (resolve_sr_conflict): Likewise.
-       * src/LR0.c (save_reductions): Use "if (!FOO) abort ();" rather than
-       "assert (FOO);".
-       * src/state.c (state_transitions_set, state_reductions_set): Likewise.
+       * src/vcg.c (get_color_str, get_textmode_str, get_shape_str):
+       (get_decision_str, get_orientation_str, get_node_alignment_str):
+       (get_arrow_mode_str, get_crossing_type_str, get_view_str):
+       (get_linestyle_str, get_arrowstyle_str): Likewise.
+       * src/conflicts.c (resolve_sr_conflict):
+       Use a default case rather than one for the one remaining enum
+       value, to catch invalid enum values as well.
+       * src/lalr.c (set_goto_map, map_goto):
+       Prefer "assert (FOO);" to "if (!FOO) abort ();".
+       * src/nullable.c (nullable_compute, token_definitions_output):
+       Likewise.
+       * src/reader.c (packgram, reader): Likewise.
+       * src/state.c (transitions_to, state_new, state_reduction_find):
+       Likewise.
+       * src/symtab.c (symbol_user_token_number_set, symbol_make_alias):
+       (symbol_pack): Likewise.
+       * src/tables.c (conflict_row, pack_vector): Likewise.
        * src/scan-skel.l (QPUTS): Remove unnecessary parens.
        (BASE_QPUTS, "@output ".*\n): Remove unnecessary asserts.
+       * src/system.h: Don't include <assert.h>.
+       (assert): New macro.
+
+       * doc/bison.texinfo (Prologue, Rules, Actions, Union Decl, Action Decl):
+       (Destructor Decl, Parser Function, Pure Calling):
+       Describe rules for braces inside C code more carefully.
 
 2006-01-19  Paul Eggert  <eggert@cs.ucla.edu>
 
index c573f34aeee7913147a7fc7911aaa1176a0a4571..7eb85e0b2531a3a09723d1ffed1d9440fd0e7340 100644 (file)
@@ -34,8 +34,7 @@
 
 
 static bitset_bindex
-abitset_resize (bitset src ATTRIBUTE_UNUSED,
-               bitset_bindex size ATTRIBUTE_UNUSED)
+abitset_resize (bitset src, bitset_bindex size)
 {
     /* These bitsets have a fixed size.  */
     if (BITSET_SIZE_ (src) != size)
index ddbef843668f3cc797abb32e38777a095eefbc88..5470c5a906e4108dfcd70468daaaea68661af545 100644 (file)
@@ -1,5 +1,5 @@
 /* General bitsets.
-   Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
    This program is free software; you can redistribute it and/or modify
@@ -45,6 +45,9 @@ bitset_bytes (enum bitset_type type, bitset_bindex n_bits)
 
   switch (type)
     {
+    default:
+      abort ();
+
     case BITSET_ARRAY:
       bytes = abitset_bytes (n_bits);
       break;
@@ -60,9 +63,6 @@ bitset_bytes (enum bitset_type type, bitset_bindex n_bits)
     case BITSET_VARRAY:
       bytes = vbitset_bytes (n_bits);
       break;
-
-    default:
-      abort ();
     }
 
   return bytes;
@@ -78,6 +78,9 @@ bitset_init (bitset bset, bitset_bindex n_bits, enum bitset_type type)
 
   switch (type)
     {
+    default:
+      abort ();
+
     case BITSET_ARRAY:
       return abitset_init (bset, n_bits);
 
@@ -89,9 +92,6 @@ bitset_init (bitset bset, bitset_bindex n_bits, enum bitset_type type)
 
     case BITSET_VARRAY:
       return vbitset_init (bset, n_bits);
-
-    default:
-      abort ();
     }
 }
 
@@ -421,6 +421,9 @@ bitset_op4_cmp (bitset dst, bitset src1, bitset src2, bitset src3,
 
   switch (op)
     {
+    default:
+      abort ();
+
     case BITSET_OP_OR_AND:
       bitset_or (tmp, src1, src2);
       changed = bitset_and_cmp (dst, src3, tmp);
@@ -435,9 +438,6 @@ bitset_op4_cmp (bitset dst, bitset src1, bitset src2, bitset src3,
       bitset_andn (tmp, src1, src2);
       changed = bitset_or_cmp (dst, src3, tmp);
       break;
-
-    default:
-      abort ();
     }
 
   bitset_free (tmp);
index 0b59865d7f34d08c4cfea112bf4034d53a758b95..eb879979f4056398d59850bd27645b3f6cfdc17b 100644 (file)
@@ -1,5 +1,5 @@
 /* Bitset statistics.
-   Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
    This program is free software; you can redistribute it and/or modify
@@ -696,6 +696,9 @@ bitset_stats_init (bitset bset, bitset_bindex n_bits, enum bitset_type type)
      we are a wrapper over.  */
   switch (type)
     {
+    default:
+      abort ();
+
     case BITSET_ARRAY:
       bytes = abitset_bytes (n_bits);
       sbset = xcalloc (1, bytes);
@@ -719,9 +722,6 @@ bitset_stats_init (bitset bset, bitset_bindex n_bits, enum bitset_type type)
       sbset = xcalloc (1, bytes);
       vbitset_init (sbset, n_bits);
       break;
-
-    default:
-      abort ();
     }
 
   bset->s.bset = sbset;
index 9ac85a2c1b574f1c9f402c7e201896e3dc99d4cc..34d1b6ca50bf50aba3416b274c4830dfae61b678 100644 (file)
@@ -1,5 +1,5 @@
 /* Functions to support expandable bitsets.
-   Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
    This program is free software; you can redistribute it and/or modify
@@ -322,6 +322,9 @@ ebitset_elt_find (bitset bset, bitset_bindex bindex,
 
   switch (mode)
     {
+    default:
+      abort ();
+
     case EBITSET_FIND:
       return 0;
 
@@ -337,9 +340,6 @@ ebitset_elt_find (bitset bset, bitset_bindex bindex,
 
     case EBITSET_SUBST:
       return &ebitset_zero_elts[0];
-
-    default:
-      abort ();
     }
 }
 
@@ -1090,6 +1090,9 @@ ebitset_op3_cmp (bitset dst, bitset src1, bitset src2, enum bitset_ops op)
       dstp = EBITSET_WORDS (delt);
       switch (op)
        {
+       default:
+         abort ();
+
        case BITSET_OP_OR:
          for (i = 0; i < EBITSET_ELT_WORDS; i++, dstp++)
            {
@@ -1141,9 +1144,6 @@ ebitset_op3_cmp (bitset dst, bitset src1, bitset src2, enum bitset_ops op)
                }
            }
          break;
-
-       default:
-         abort ();
        }
 
       if (!ebitset_elt_zero_p (delt))
index 9d3d95734221df11505d9422fd9ad61f5014dffb..55b9d7e4927742fa754bc466ee1778a2cea65b45 100644 (file)
@@ -1,5 +1,5 @@
 /* Functions to support link list bitsets.
-   Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
    This program is free software; you can redistribute it and/or modify
@@ -363,6 +363,9 @@ lbitset_elt_find (bitset bset, bitset_windex windex,
 
   switch (mode)
     {
+    default:
+      abort ();
+
     case LBITSET_FIND:
       return 0;
 
@@ -376,9 +379,6 @@ lbitset_elt_find (bitset bset, bitset_windex windex,
 
     case LBITSET_SUBST:
       return &lbitset_zero_elts[0];
-
-    default:
-      abort ();
     }
 }
 
@@ -1117,6 +1117,9 @@ lbitset_op3_cmp (bitset dst, bitset src1, bitset src2, enum bitset_ops op)
       dstp = dtmp->words;
       switch (op)
        {
+       default:
+         abort ();
+
        case BITSET_OP_OR:
          for (i = 0; i < LBITSET_ELT_WORDS; i++, dstp++)
            {
@@ -1168,9 +1171,6 @@ lbitset_op3_cmp (bitset dst, bitset src1, bitset src2, enum bitset_ops op)
                }
            }
          break;
-
-       default:
-         abort ();
        }
 
       if (!lbitset_elt_zero_p (dtmp))
index a0296d6735b33acb93c7ae4fc7f4fe63a66f89cd..e2e9855f513d44197b52ce8411bfbcd19c13635b 100644 (file)
@@ -1,6 +1,6 @@
 /* Find and resolve or report look-ahead conflicts for bison,
 
-   Copyright (C) 1984, 1989, 1992, 2000, 2001, 2002, 2003, 2004, 2005
+   Copyright (C) 1984, 1989, 1992, 2000, 2001, 2002, 2003, 2004, 2005, 2006
    Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
@@ -216,6 +216,9 @@ resolve_sr_conflict (state *s, int ruleno, symbol **errors)
 
          switch (symbols[i]->assoc)
            {
+           default:
+             abort ();
+
            case right_assoc:
              log_resolution (redrule, i, right_resolution);
              flush_reduce (look_ahead_tokens, i);
@@ -233,9 +236,6 @@ resolve_sr_conflict (state *s, int ruleno, symbol **errors)
              /* Record an explicit error for this token.  */
              errors[nerrs++] = symbols[i];
              break;
-
-           case undef_assoc:
-             abort ();
            }
       }
 
index 5c162b50d35f606cffb968d680f66bcfb291c399..65c55ab7c8807ac826cd0fdcb2493ad070eb1196 100644 (file)
@@ -94,8 +94,7 @@ set_goto_map (void)
          ngotos++;
 
          /* Abort if (ngotos + 1) would overflow.  */
-         if (ngotos == GOTO_NUMBER_MAXIMUM)
-           abort ();
+         assert (ngotos != GOTO_NUMBER_MAXIMUM);
 
          goto_map[TRANSITION_SYMBOL (sp, i) - ntokens]++;
        }
@@ -154,8 +153,7 @@ map_goto (state_number s0, symbol_number sym)
 
   for (;;)
     {
-      if (high < low)
-       abort ();
+      assert (low <= high);
       middle = (low + high) / 2;
       s = from_state[middle];
       if (s == s0)
index ef65ef46af481826b19ab90c4614b1c11551b562..83a90e9556636d827aee54d5c8d0a300ad849ff1 100644 (file)
@@ -1,7 +1,7 @@
 /* Calculate which nonterminals can expand into the null string for Bison.
 
-   Copyright (C) 1984, 1989, 2000, 2001, 2002, 2003, 2004, 2005 Free
-   Software Foundation, Inc.
+   Copyright (C) 1984, 1989, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -104,8 +104,8 @@ nullable_compute (void)
        else
          {
            /* This rule has an empty RHS. */
-           if (item_number_as_rule_number (rules_ruleno->rhs[0]) != ruleno)
-             abort ();
+           assert (item_number_as_rule_number (rules_ruleno->rhs[0])
+                   == ruleno);
            if (rules_ruleno->useful
                && ! nullable[rules_ruleno->lhs->number - ntokens])
              {
index d9112423a63b05e4aca1054b30cd15679cb8aa54..07978ed9610b4d21e00d5a32f4fc49478b2915a6 100644 (file)
@@ -239,8 +239,7 @@ prepare_rules (void)
       /* Merger-function index (GLR).  */
       merger[r] = rules[r].merger;
     }
-  if (i != nritems)
-    abort ();
+  assert (i == nritems);
 
   muscle_insert_item_number_table ("rhs", rhs, ritem[0], 1, nritems);
   muscle_insert_unsigned_int_table ("prhs", prhs, 0, 0, nrules);
@@ -351,8 +350,7 @@ token_definitions_output (FILE *out)
       /* At this stage, if there are literal aliases, they are part of
         SYMBOLS, so we should not find symbols which are the aliases
         here.  */
-      if (number == USER_NUMBER_ALIAS)
-       abort ();
+      assert (number != USER_NUMBER_ALIAS);
 
       /* Skip error token.  */
       if (sym == errtoken)
index 0744b3f292a6090397d40a4dd9ef350bc8531f46..56f11fd0eeda3cb8d2c467a5c2eda7e6d7b8fd93 100644 (file)
@@ -469,8 +469,7 @@ packgram (void)
        p = p->next;
     }
 
-  if (itemno != nritems)
-    abort ();
+  assert (itemno == nritems);
 
   if (trace_flag & trace_sets)
     ritem_print (stderr);
@@ -554,8 +553,7 @@ reader (void)
     grammar = p;
   }
 
-  if (! (nsyms <= SYMBOL_NUMBER_MAXIMUM && nsyms == ntokens + nvars))
-    abort ();
+  assert (nsyms <= SYMBOL_NUMBER_MAXIMUM && nsyms == ntokens + nvars);
 
   xfclose (gram_in);
 
index b14fb40c1f5e467de957a116e2cbe89e6267c35c..8a57af51b38930a891f2bc8a12983af8784f0133 100644 (file)
@@ -1,6 +1,7 @@
 /* Scan Bison Skeletons.                                       -*- C -*-
 
-   Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
 #include "scan-skel.h"
 
 #define QPUTS(String) \
-   fputs (quotearg_style (c_quoting_style, (String)), yyout)
+   fputs (quotearg_style (c_quoting_style, String), yyout)
 
 #define BASE_QPUTS(File) \
-   assert (File), QPUTS (base_name (File))
+   QPUTS (base_name (File))
 
 %}
 %%
   if (*file_name == '@')
     {
       if (strcmp (file_name, "@output_header_name@") == 0)
-       {
-         assert (spec_defines_file);
-         file_name = spec_defines_file;
-       }
+       file_name = spec_defines_file;
       else if (strcmp (file_name, "@output_parser_name@") == 0)
-       {
-         assert (parser_file_name);
-         file_name = parser_file_name;
-       }
+       file_name = parser_file_name;
       else
        fatal ("invalid token in skeleton: %s", yytext);
     }
index 83e0108f159166d9d6c6adc844a385e6a18fb20b..4eb39f9f6ca34cfae6b2ac0d8ab99966488ea981 100644 (file)
@@ -61,8 +61,7 @@ transitions_to (transitions *shifts, symbol_number sym)
   int j;
   for (j = 0; ; j++)
     {
-      if (shifts->num <= j)
-       abort ();
+      assert (j < shifts->num);
       if (TRANSITION_SYMBOL (shifts, j) == sym)
        return shifts->states[j];
     }
@@ -136,8 +135,7 @@ state_new (symbol_number accessing_symbol,
   state *res;
   size_t items_size = nitems * sizeof *core;
 
-  if (STATE_NUMBER_MAXIMUM <= nstates)
-    abort ();
+  assert (nstates < STATE_NUMBER_MAXIMUM);
 
   res = xmalloc (offsetof (state, items) + items_size);
   res->number = nstates++;
@@ -214,8 +212,7 @@ state_reduction_find (state *s, rule *r)
 void
 state_errs_set (state *s, int num, symbol **tokens)
 {
-  if (s->errs)
-    abort ();
+  assert (!s->errs);
   s->errs = errs_new (num, tokens);
 }
 
index 1f2c17ee81ed7fc1a7dd4797568a6746cc523ecb..ef59c6eef70e1d7a95e40979970fca38ba47f2a5 100644 (file)
@@ -223,8 +223,7 @@ symbol_class_set (symbol *sym, symbol_class class, location loc, bool declaring)
 void
 symbol_user_token_number_set (symbol *sym, int user_token_number, location loc)
 {
-  if (sym->class != token_sym)
-    abort ();
+  assert (sym->class == token_sym);
 
   if (sym->user_token_number != USER_NUMBER_UNDEFINED
       && sym->user_token_number != user_token_number)
@@ -295,8 +294,7 @@ symbol_make_alias (symbol *sym, symbol *symval, location loc)
       /* sym and symval combined are only one symbol.  */
       nsyms--;
       ntokens--;
-      if (ntokens != sym->number && ntokens != symval->number)
-       abort ();
+      assert (ntokens == sym->number || ntokens == symval->number);
       sym->number = symval->number =
        (symval->number < sym->number) ? symval->number : sym->number;
       symbol_type_set (symval, sym->type_name, loc);
@@ -389,8 +387,7 @@ symbol_pack (symbol *this)
            this->number = this->alias->number = 0;
          else
            {
-             if (this->alias->number == NUMBER_UNDEFINED)
-               abort ();
+             assert (this->alias->number != NUMBER_UNDEFINED);
              this->number = this->alias->number;
            }
        }
@@ -399,10 +396,7 @@ symbol_pack (symbol *this)
        return true;
     }
   else /* this->class == token_sym */
-    {
-      if (this->number == NUMBER_UNDEFINED)
-       abort ();
-    }
+    assert (this->number != NUMBER_UNDEFINED);
 
   symbols[this->number] = this;
   return true;
index c1c45b49f2d57ff95ffff20a863c8c78c6d3b2a0..d6b45eeb908b973e5fcf00ab91b439772c463185 100644 (file)
@@ -64,8 +64,6 @@
 typedef size_t uintptr_t;
 #endif
 
-#include <assert.h>
-
 #include <verify.h>
 #include <xalloc.h>
 
@@ -216,6 +214,11 @@ do {                                               \
 } while (0)
 
 
+/* Assertions.  <assert.h>'s assertions are too heavyweight, and can
+   be disabled too easily, so implement it separately here.  */
+#define assert(x) ((void) ((x) || (abort (), 0)))
+
+
 /*---------------------------------------------.
 | Debugging memory allocation (must be last).  |
 `---------------------------------------------*/
index f88180e283a2cc67606c9a2186b3ac94d2203cc3..c938139b2b564592530576c4422ce3eac59e7c59 100644 (file)
@@ -202,16 +202,14 @@ conflict_row (state *s)
              && (actrow[j]
                  != rule_number_as_item_number (reds->rules[i]->number)))
            {
-             if (conflict_list_free <= 0)
-               abort ();
+             assert (0 < conflict_list_free);
              conflict_list[conflict_list_cnt] = reds->rules[i]->number + 1;
              conflict_list_cnt += 1;
              conflict_list_free -= 1;
            }
 
        /* Leave a 0 at the end.  */
-       if (conflict_list_free <= 0)
-         abort ();
+       assert (0 < conflict_list_free);
        conflict_list[conflict_list_cnt] = 0;
        conflict_list_cnt += 1;
        conflict_list_free -= 1;
@@ -675,16 +673,14 @@ pack_vector (vector_number vector)
   base_number *to = tos[i];
   unsigned int *conflict_to = conflict_tos[i];
 
-  if (!t)
-    abort ();
+  assert (t);
 
   for (j = lowzero - from[0]; ; j++)
     {
       int k;
       bool ok = true;
 
-      if (table_size <= j)
-       abort ();
+      assert (j < table_size);
 
       for (k = 0; ok && k < t; k++)
        {
@@ -717,8 +713,7 @@ pack_vector (vector_number vector)
          if (loc > high)
            high = loc;
 
-         if (! (BASE_MINIMUM <= j && j <= BASE_MAXIMUM))
-           abort ();
+         assert (BASE_MINIMUM <= j && j <= BASE_MAXIMUM);
          return j;
        }
     }
index 643a119839d0a269d5b2e09dfcfa7e1c95ec9fd0..25fbb64ec8e7253d3148cc422552b0c10be4a3de 100644 (file)
--- a/src/vcg.c
+++ b/src/vcg.c
@@ -1,6 +1,7 @@
 /* VCG description handler for Bison.
 
-   Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -213,6 +214,7 @@ get_color_str (enum color color)
 {
   switch (color)
     {
+    default:           abort ();
     case white:                return "white";
     case blue:         return "blue";
     case red:          return "red";
@@ -245,7 +247,6 @@ get_color_str (enum color color)
     case orange:       return "orange";
     case orchid:       return "orchid";
     case black:                return "black";
-    default:           abort (); return NULL;
     }
 }
 
@@ -254,10 +255,10 @@ get_textmode_str (enum textmode textmode)
 {
   switch (textmode)
     {
+    default:           abort ();
     case centered:     return "center";
     case left_justify: return "left_justify";
     case right_justify:        return "right_justify";
-    default:           abort (); return NULL;
     }
 }
 
@@ -266,11 +267,11 @@ get_shape_str (enum shape shape)
 {
   switch (shape)
     {
+    default:           abort ();
     case box:          return "box";
     case rhomb:                return "rhomb";
     case ellipse:      return "ellipse";
     case triangle:     return "triangle";
-    default:           abort (); return NULL;
     }
 }
 
@@ -279,9 +280,9 @@ get_decision_str (enum decision decision)
 {
   switch (decision)
     {
+    default:   abort ();
     case no:   return "no";
     case yes:  return "yes";
-    default:   abort (); return NULL;
     }
 }
 
@@ -290,11 +291,11 @@ get_orientation_str (enum orientation orientation)
 {
   switch (orientation)
     {
+    default:           abort ();
     case top_to_bottom:        return "top_to_bottom";
     case bottom_to_top: return "bottom_to_top";
     case left_to_right: return "left_to_right";
     case right_to_left: return "right_to_left";
-    default:           abort (); return NULL;
     }
 }
 
@@ -303,10 +304,10 @@ get_node_alignment_str (enum alignment alignment)
 {
   switch (alignment)
     {
+    default:           abort ();
     case center:       return "center";
     case top:          return "top";
     case bottom:       return "bottom";
-    default:           abort (); return NULL;
     }
 }
 
@@ -315,9 +316,9 @@ get_arrow_mode_str (enum arrow_mode arrow_mode)
 {
   switch (arrow_mode)
     {
+    default:           abort ();
     case fixed:                return "fixed";
     case free_a:       return "free";
-    default:           abort (); return NULL;
     }
 }
 
@@ -326,11 +327,11 @@ get_crossing_type_str (enum crossing_type crossing_type)
 {
   switch (crossing_type)
     {
+    default:           abort ();
     case bary:         return "bary";
     case median:       return "median";
     case barymedian:   return "barymedian";
     case medianbary:   return "medianbary";
-    default:           abort (); return NULL;
     }
 }
 
@@ -341,11 +342,11 @@ get_view_str (enum view view)
      so it is an error here if view == normal_view.  */
   switch (view)
     {
+    default:           abort ();
     case cfish:                return "cfish";
     case pfish:                return "pfish";
     case fcfish:       return "fcfish";
     case fpfish:       return "fpfish";
-    default:           abort (); return NULL;
     }
 }
 
@@ -354,11 +355,11 @@ get_linestyle_str (enum linestyle linestyle)
 {
   switch (linestyle)
     {
+    default:           abort ();
     case continuous:   return "continuous";
     case dashed:       return "dashed";
     case dotted:       return "dotted";
     case invisible:    return "invisible";
-    default:           abort (); return NULL;
     }
 }
 
@@ -367,10 +368,10 @@ get_arrowstyle_str (enum arrowstyle arrowstyle)
 {
   switch (arrowstyle)
     {
+    default:   abort ();
     case solid:        return "solid";
     case line: return "line";
     case none: return "none";
-    default:   abort (); return NULL;
     }
 }