This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch] (for VLA) Remove a Fortran static autovariable


Hi,

probably obvious - error may occur on a (future) evaluation of a DWARF block,
regression tested on x86_64-unknown-linux-gnu, OK to check-in?

Thanks,
Jan


2009-01-10  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* f-typeprint.c (f_type_print_varspec_suffix): Convert the autovariable
	arrayprint_recurse_level to a parameter.  Update all the callers.  New
	comment at autovariables.

--- gdb/f-typeprint.c	7 Jan 2009 12:39:13 -0000	1.26
+++ gdb/f-typeprint.c	10 Jan 2009 19:47:12 -0000
@@ -39,7 +39,7 @@
 static void f_type_print_args (struct type *, struct ui_file *);
 #endif
 
-static void f_type_print_varspec_suffix (struct type *, struct ui_file *,
+static void f_type_print_varspec_suffix (struct type *, struct ui_file *, int,
 					 int, int, int);
 
 void f_type_print_varspec_prefix (struct type *, struct ui_file *,
@@ -80,7 +80,7 @@ f_print_type (struct type *type, char *v
          so don't print an additional pair of ()'s */
 
       demangled_args = varstring[strlen (varstring) - 1] == ')'; 
-      f_type_print_varspec_suffix (type, stream, show, 0, demangled_args);
+      f_type_print_varspec_suffix (type, stream, show, 0, demangled_args, 0);
    }
 }
 
@@ -150,11 +150,13 @@ f_type_print_varspec_prefix (struct type
 
 static void
 f_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
-			     int show, int passed_a_ptr, int demangled_args)
+			     int show, int passed_a_ptr, int demangled_args,
+			     int arrayprint_recurse_level)
 {
   int upper_bound, lower_bound;
-  static int arrayprint_recurse_level = 0;
   int retcode;
+  /* No static variables are permitted as an error call may occur during
+     execution of this function.  */
 
   if (type == 0)
     return;
@@ -173,7 +175,8 @@ f_type_print_varspec_suffix (struct type
 	fprintf_filtered (stream, "(");
 
       if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY)
-	f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
+	f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0,
+				     arrayprint_recurse_level);
 
       lower_bound = f77_get_lowerbound (type);
       if (lower_bound != 1)	/* Not the default.  */
@@ -191,7 +194,8 @@ f_type_print_varspec_suffix (struct type
 	}
 
       if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_ARRAY)
-	f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
+	f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0,
+				     arrayprint_recurse_level);
       if (arrayprint_recurse_level == 1)
 	fprintf_filtered (stream, ")");
       else
@@ -201,13 +205,14 @@ f_type_print_varspec_suffix (struct type
 
     case TYPE_CODE_PTR:
     case TYPE_CODE_REF:
-      f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 1, 0);
+      f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 1, 0,
+				   arrayprint_recurse_level);
       fprintf_filtered (stream, ")");
       break;
 
     case TYPE_CODE_FUNC:
       f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
-				   passed_a_ptr, 0);
+				   passed_a_ptr, 0, arrayprint_recurse_level);
       if (passed_a_ptr)
 	fprintf_filtered (stream, ")");
 
@@ -361,7 +366,7 @@ f_type_print_base (struct type *type, st
 	  fputs_filtered (" :: ", stream);
 	  fputs_filtered (TYPE_FIELD_NAME (type, index), stream);
 	  f_type_print_varspec_suffix (TYPE_FIELD_TYPE (type, index),
-				       stream, 0, 0, 0);
+				       stream, 0, 0, 0, 0);
 	  fputs_filtered ("\n", stream);
 	} 
       fprintfi_filtered (level, stream, "End Type ");


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]