OSDN Git Service

2008-06-15 Jerry DeLisle <jvdelisle@gcc.gnu.org>
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 15 Jun 2008 20:02:58 +0000 (20:02 +0000)
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 15 Jun 2008 20:02:58 +0000 (20:02 +0000)
PR fortran/36515
* libgfortran.h (compile_options_t): Add int range_check to structure.
* runtime/compile_options.c (set_options): Add range_check option.
(init_compile_options): Likewise.
*io/read.c (read_decimal): Change overflow checks to include
range_check.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@136822 138bc75d-0d04-0410-961f-82ee72b054a4

libgfortran/ChangeLog
libgfortran/io/read.c
libgfortran/libgfortran.h
libgfortran/runtime/compile_options.c

index 0966d48..f5b6a27 100644 (file)
@@ -1,3 +1,12 @@
+2008-06-14  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR fortran/36515
+       * libgfortran.h (compile_options_t): Add int range_check to structure.
+       * runtime/compile_options.c (set_options): Add range_check option.
+       (init_compile_options): Likewise.
+       *io/read.c (read_decimal): Change overflow checks to include
+       range_check.
+       
 2008-06-13  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR fortran/36538
index 11a1ac0..cb88933 100644 (file)
@@ -428,13 +428,13 @@ read_decimal (st_parameter_dt *dtp, const fnode *f, char *dest, int length)
       if (c < '0' || c > '9')
        goto bad;
 
-      if (value > maxv_10)
+      if (value > maxv_10 && compile_options.range_check == 1)
        goto overflow;
 
       c -= '0';
       value = 10 * value;
 
-      if (value > maxv - c)
+      if (value > maxv - c && compile_options.range_check == 1)
        goto overflow;
       value += c;
     }
index 8c0f1b4..10439bd 100644 (file)
@@ -477,6 +477,7 @@ typedef struct
   size_t record_marker;
   int max_subrecord_length;
   int bounds_check;
+  int range_check;
 }
 compile_options_t;
 
index 8e0a3fe..c62fe1c 100644 (file)
@@ -105,6 +105,8 @@ set_options (int num, int options[])
     compile_options.sign_zero = options[5];
   if (num >= 7)
     compile_options.bounds_check = options[6];
+  if (num >= 8)
+    compile_options.range_check = options[7];
 
   /* If backtrace is required, we set signal handlers on most common
      signals.  */
@@ -146,6 +148,7 @@ init_compile_options (void)
   compile_options.dump_core = 0;
   compile_options.backtrace = 0;
   compile_options.sign_zero = 1;
+  compile_options.range_check = 1;
 }
 
 /* Function called by the front-end to tell us the