From 8f81c3c650cb19b50c44d52639fc05738736c88a Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Tue, 7 Nov 2006 15:17:17 +0000 Subject: re PR fortran/29539 (ICE in variable_decl) 2006-11-07 Paul Thomas PR fortran/29539 PR fortran/29634 * decl.c (variable_decl): Add test for presence of proc_name. * error.c (gfc_error_flag_test): New function. * gfortran.h : Prototype for gfc_error_flag_test. 2006-11-07 Paul Thomas PR fortran/29539 * gfortran.dg/gfortran.dg/blockdata_3.f90: New test. PR fortran/29634 * gfortran.dg/gfortran.dg/derived_function_interface_1.f90: New test. From-SVN: r118553 --- gcc/fortran/ChangeLog | 8 ++++++++ gcc/fortran/decl.c | 4 +++- gcc/fortran/error.c | 9 +++++++++ gcc/fortran/gfortran.h | 1 + 4 files changed, 21 insertions(+), 1 deletion(-) (limited to 'gcc/fortran') diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index d31bb14..2298315 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2006-11-07 Paul Thomas + + PR fortran/29539 + PR fortran/29634 + * decl.c (variable_decl): Add test for presence of proc_name. + * error.c (gfc_error_flag_test): New function. + * gfortran.h : Prototype for gfc_error_flag_test. + 2006-11-07 Tobias Burnus PR fortran/29601 diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index a476c64..ec3ce2e 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -1218,6 +1218,7 @@ variable_decl (int elem) that the interface may specify a procedure that is not pure if the procedure is defined to be pure(12.3.2). */ if (current_ts.type == BT_DERIVED + && gfc_current_ns->proc_name && gfc_current_ns->proc_name->attr.if_source == IFSRC_IFBODY && current_ts.derived->ns != gfc_current_ns) { @@ -2397,7 +2398,8 @@ ok: break; } - gfc_error ("Syntax error in data declaration at %C"); + if (gfc_error_flag_test () == 0) + gfc_error ("Syntax error in data declaration at %C"); m = MATCH_ERROR; gfc_free_data_all (gfc_current_ns); diff --git a/gcc/fortran/error.c b/gcc/fortran/error.c index dc4a6cf..ade361a 100644 --- a/gcc/fortran/error.c +++ b/gcc/fortran/error.c @@ -699,6 +699,15 @@ gfc_clear_error (void) } +/* Tests the state of error_flag. */ + +int +gfc_error_flag_test (void) +{ + return error_buffer.flag; +} + + /* Check to see if any errors have been saved. If so, print the error. Returns the state of error_flag. */ diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index 0559054..970bda3c 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -1788,6 +1788,7 @@ void gfc_fatal_error (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_GCC_GFC(1, void gfc_internal_error (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_GCC_GFC(1,2); void gfc_clear_error (void); int gfc_error_check (void); +int gfc_error_flag_test (void); notification gfc_notification_std (int); try gfc_notify_std (int, const char *, ...) ATTRIBUTE_GCC_GFC(2,3); -- cgit v1.1