When building on gcc, use noreturn attribute on adios and the various done
authorPeter Maydell <pmaydell@chiark.greenend.org.uk>
Mon, 2 Jun 2008 22:37:01 +0000 (22:37 +0000)
committerPeter Maydell <pmaydell@chiark.greenend.org.uk>
Mon, 2 Jun 2008 22:37:01 +0000 (22:37 +0000)
functions.

16 files changed:
ChangeLog
h/mh.h
h/prototypes.h
sbr/done.c
uip/inc.c
uip/mhbuild.c
uip/mhlist.c
uip/mhn.c
uip/mhshow.c
uip/mhstore.c
uip/mhtest.c
uip/packf.c
uip/pick.c
uip/rcvdist.c
uip/rcvstore.c
uip/sendsbr.c

index e08e678..785aeca 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2008-06-02  Peter Maydell  <pmaydell@chiark.greenend.org.uk>
+
+       * h/mh.h, h/prototypes.h, sbr/done.c, uip/inc.c,
+       uip/mhbuild.c, uip/mhlist.c, uip/mhn.c, uip/mhshow.c,
+       uip/mhstore.c, uip/mhtest.c, uip/packf.c, uip/pick.c,
+       uip/rcvdist.c, uip/rcvstore.c, uip/sendsbr.c: when
+       building on gcc, use the noreturn attribute on various
+       functions (should improve code and avoid some spurious
+       'uninitialized variable' warnings).
+
 2008-06-01  Peter Maydell  <pmaydell@chiark.greenend.org.uk>
 
        * docs/README.developers: update the bits about doing a
diff --git a/h/mh.h b/h/mh.h
index 7cdbead..97c7769 100644 (file)
--- a/h/mh.h
+++ b/h/mh.h
 #endif
 typedef unsigned char  boolean;  /* not int so we can pack in a structure */
 
+/* If we're using gcc then give it some information about
+ * functions that abort.
+ */
+#if __GNUC__ > 2
+#define NORETURN __attribute__((__noreturn__))
+#else
+#define NORETURN
+#endif
+
 /*
  * user context/profile structure
  */
@@ -336,7 +345,7 @@ extern char *vmhproc;
 extern char *whatnowproc;
 extern char *whomproc;
 
-extern void (*done) (int);
+extern void (*done) (int) NORETURN;
 
 #include <h/prototypes.h>
 
index 52fab3a..d10346f 100644 (file)
@@ -25,7 +25,7 @@ char *etcpath(char *);
 /*
  * prototypes from the nmh subroutine library
  */
-void adios (char *, char *, ...);
+void adios (char *, char *, ...) NORETURN;
 void admonish (char *, char *, ...);
 void advertise (char *, char *, char *, va_list);
 void advise (char *, char *, ...);
index 938fdb2..65ec1cb 100644 (file)
@@ -11,4 +11,4 @@
 
 #include <h/mh.h>
 
-void (*done) (int) = exit;
+void (*done) (int) NORETURN = exit;
index ef1b08f..0fcff84 100644 (file)
--- a/uip/inc.c
+++ b/uip/inc.c
@@ -223,7 +223,7 @@ static FILE *in;
  */
 char *map_name(char *);
 
-static void inc_done(int);
+static void inc_done(int) NORETURN;
 #ifdef POP
 static int pop_action(char *);
 static int pop_pack(char *);
index 2776f7c..a47022e 100644 (file)
@@ -100,7 +100,7 @@ static int unlink_infile  = 0;
 static char outfile[BUFSIZ];
 static int unlink_outfile = 0;
 
-static void unlink_done (int);
+static void unlink_done (int) NORETURN;
 
 /* mhbuildsbr.c */
 CT build_mime (char *);
index e8f8163..4bb21bb 100644 (file)
@@ -110,7 +110,7 @@ void list_all_messages (CT *, int, int, int, int);
 /* mhfree.c */
 void free_content (CT);
 extern CT *cts;
-void freects_done (int);
+void freects_done (int) NORETURN;
 
 /*
  * static prototypes
index 6955476..376fc58 100644 (file)
--- a/uip/mhn.c
+++ b/uip/mhn.c
@@ -198,7 +198,7 @@ void cache_all_messages (CT *);
 /* mhfree.c */
 void free_content (CT);
 extern CT *cts;
-void freects_done (int);
+void freects_done (int) NORETURN;
 
 /*
  * static prototypes
index 1383388..179173e 100644 (file)
@@ -126,7 +126,7 @@ void show_all_messages (CT *);
 /* mhfree.c */
 void free_content (CT);
 extern CT *cts;
-void freects_done (int);
+void freects_done (int) NORETURN;
 
 /*
  * static prototypes
index bcebb7f..91c57a2 100644 (file)
@@ -104,7 +104,7 @@ void store_all_messages (CT *);
 /* mhfree.c */
 void free_content (CT);
 extern CT *cts;
-void freects_done (int);
+void freects_done (int) NORETURN;
 
 /*
  * static prototypes
index fa42cd2..d8c025f 100644 (file)
@@ -106,7 +106,7 @@ void flush_errors (void);
 /* mhfree.c */
 void free_content (CT);
 extern CT *cts;
-void freects_done (int);
+void freects_done (int) NORETURN;
 
 /*
  * static prototypes
index fb8871d..a696e72 100644 (file)
@@ -33,7 +33,7 @@ static int md = NOTOK;
 static int mbx_style = MBOX_FORMAT;
 static int mapping = 0;
 
-static void mbxclose_done(int);
+static void mbxclose_done(int) NORETURN;
 
 char *file = NULL;
 
index ad356e3..2d9b76e 100644 (file)
@@ -68,7 +68,7 @@ static struct swit switches[] = {
 
 static int listsw = -1;
 
-static void putzero_done (int);
+static void putzero_done (int) NORETURN;
 
 int
 main (int argc, char **argv)
index b0a3609..7ee47fd 100644 (file)
@@ -34,7 +34,7 @@ static char tmpfil[BUFSIZ] = "";
  * prototypes
  */
 static void rcvdistout (FILE *, char *, char *);
-static void unlink_done (int);
+static void unlink_done (int) NORETURN;
 
 
 int
index 493bade..21f6c77 100644 (file)
@@ -48,7 +48,7 @@ static struct swit switches[] = {
  */
 static char *tmpfilenam = NULL;
 
-static void unlink_done(int);
+static void unlink_done(int) NORETURN;
 
 int
 main (int argc, char **argv)
index 877538b..fd21acd 100644 (file)
@@ -60,7 +60,7 @@ char *getusername (void);
 /*
  * static prototypes
  */
-static void armed_done (int);
+static void armed_done (int) NORETURN;
 static void alert (char *, int);
 static int tmp_fd (void);
 static void anno (int, struct stat *);