diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index a75c91db08f..6dcc055c7db 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,14 @@ +2007-10-18 Francois-Xavier Coudert + + PR libfortran/32021 + * runtime/backtrace.c (local_strcasestr): Protect by appropriate + macros. + * runtime/main.c (cleanup): Cast argument to free. + * intrinsics/spread_generic.c (spread_internal): Match runtime_error + arguments and format. + * intrinsics/signal.c (alarm_sub_int_i4, alarm_sub_int_i8): Cast + pointers to avoid warnings. + 2007-10-18 Ben Elliston * runtime/environ.c (init_choice): Remove unused function. diff --git a/libgfortran/intrinsics/signal.c b/libgfortran/intrinsics/signal.c index 2e28b543763..84565e8e497 100644 --- a/libgfortran/intrinsics/signal.c +++ b/libgfortran/intrinsics/signal.c @@ -198,14 +198,14 @@ alarm_sub_int_i4 (int *seconds, int *handler, GFC_INTEGER_4 *status) #if defined (SIGALRM) && defined (HAVE_ALARM) && defined (HAVE_SIGNAL) if (status != NULL) { - if (signal (SIGALRM, (void (*)(int)) *handler) == SIG_ERR) + if (signal (SIGALRM, (void (*)(int)) (INTPTR_T) *handler) == SIG_ERR) *status = -1; else *status = alarm (*seconds); } else { - signal (SIGALRM, (void (*)(int)) *handler); + signal (SIGALRM, (void (*)(int)) (INTPTR_T) *handler); alarm (*seconds); } #else @@ -226,14 +226,14 @@ alarm_sub_int_i8 (int *seconds, int *handler, GFC_INTEGER_8 *status) #if defined (SIGALRM) && defined (HAVE_ALARM) && defined (HAVE_SIGNAL) if (status != NULL) { - if (signal (SIGALRM, (void (*)(int)) *handler) == SIG_ERR) + if (signal (SIGALRM, (void (*)(int)) (INTPTR_T) *handler) == SIG_ERR) *status = -1; else *status = alarm (*seconds); } else { - signal (SIGALRM, (void (*)(int)) *handler); + signal (SIGALRM, (void (*)(int)) (INTPTR_T) *handler); alarm (*seconds); } #else diff --git a/libgfortran/intrinsics/spread_generic.c b/libgfortran/intrinsics/spread_generic.c index 3752717aa8e..4be0a164c8a 100644 --- a/libgfortran/intrinsics/spread_generic.c +++ b/libgfortran/intrinsics/spread_generic.c @@ -131,9 +131,9 @@ spread_internal (gfc_array_char *ret, const gfc_array_char *source, if (ret_extent != ncopies) runtime_error("Incorrect extent in return value of SPREAD" - " intrinsic in dimension %d: is %ld," - " should be %ld", n+1, (long int) ret_extent, - (long int) ncopies); + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) ncopies); } else { @@ -142,8 +142,9 @@ spread_internal (gfc_array_char *ret, const gfc_array_char *source, - source->dim[dim].lbound; if (ret_extent != extent[dim]) runtime_error("Incorrect extent in return value of SPREAD" - " intrinsic in dimension %d: is %ld," - " should be %ld", n+1, (long int) ret_extent, + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) extent[dim]); if (extent[dim] <= 0) diff --git a/libgfortran/runtime/backtrace.c b/libgfortran/runtime/backtrace.c index 9f97fe4dcd6..00605b50d3f 100644 --- a/libgfortran/runtime/backtrace.c +++ b/libgfortran/runtime/backtrace.c @@ -60,7 +60,18 @@ Boston, MA 02110-1301, USA. */ #include +/* Macros for common sets of capabilities: can we fork and exec, can + we use glibc-style backtrace functions, and can we use pipes. */ +#define CAN_FORK (defined(HAVE_FORK) && defined(HAVE_EXECVP) \ + && defined(HAVE_WAIT)) +#define GLIBC_BACKTRACE (defined(HAVE_BACKTRACE) \ + && defined(HAVE_BACKTRACE_SYMBOLS)) +#define CAN_PIPE (CAN_FORK && defined(HAVE_PIPE) \ + && defined(HAVE_DUP2) && defined(HAVE_FDOPEN) \ + && defined(HAVE_CLOSE)) + +#if GLIBC_BACKTRACE && CAN_PIPE static char * local_strcasestr (const char *s1, const char *s2) { @@ -85,14 +96,7 @@ local_strcasestr (const char *s1, const char *s2) } #endif } - -#define CAN_FORK (defined(HAVE_FORK) && defined(HAVE_EXECVP) \ - && defined(HAVE_WAIT)) -#define GLIBC_BACKTRACE (defined(HAVE_BACKTRACE) \ - && defined(HAVE_BACKTRACE_SYMBOLS)) -#define CAN_PIPE (CAN_FORK && defined(HAVE_PIPE) \ - && defined(HAVE_DUP2) && defined(HAVE_FDOPEN) \ - && defined(HAVE_CLOSE)) +#endif #if GLIBC_BACKTRACE diff --git a/libgfortran/runtime/main.c b/libgfortran/runtime/main.c index 86777d9c70e..8632f152c95 100644 --- a/libgfortran/runtime/main.c +++ b/libgfortran/runtime/main.c @@ -176,5 +176,5 @@ cleanup (void) close_units (); if (please_free_exe_path_when_done) - free (exe_path); + free ((char *) exe_path); }