aboutsummaryrefslogtreecommitdiff
path: root/libgfortran
diff options
context:
space:
mode:
authorChao-ying Fu <fu@mips.com>2006-12-11 23:48:10 +0000
committerChao-ying Fu <fu@mips.com>2006-12-11 23:48:10 +0000
commit45ac650dd9971a482d1e78bbc0172c9591e41183 (patch)
tree0c32e191dd3bb76fa944b8fff7efb2fb149dbee0 /libgfortran
parent625b5a948b8b5169e548946c190f36cb7f35448a (diff)
Merged revisions 119587-119749 via svnmerge from
svn+ssh://chaoyingfu@sources.redhat.com/svn/gcc/trunk ........ r119587 | nickc | 2006-12-06 10:08:51 -0800 (Wed, 06 Dec 2006) | 2 lines * ansidecl.h (ATTRIBUTE_PACKED): Define. ........ r119592 | tkoenig | 2006-12-06 11:25:44 -0800 (Wed, 06 Dec 2006) | 27 lines 2006-12-06 Thomas Koenig <Thomas.Koenig@online.de> * gfortran.dg/read_eof_4.f90: Add tests. * gfortran.dg/readwrite_unf_direct_eor_1.f90: New test. * gfortran.dg/unf_read_corrupted_1.f90: New test. 2006-12-06 Thomas Koenig <Thomas.Koenig@online.de> * libgfortran.h: Add ERROR_CORRUPT_FILE to error_codes. * runtime/error.c (translate_error): Add handling for ERROR_CORRUPT_FILE. * io/transfer.c (read_block_direct): Add comment about EOR for stream files. Remove test for no bytes left for direct access files. Generate an ERROR_SHORT_RECORD if the read was short. For unformatted sequential files: Check endfile condition. Remove test for no bytes left. End of file here means that the file structure has been corrupted. Pre-position the file for the next record in case of error. (write_buf): Whitespace fix. Subtract the number of bytes written from bytes_left. ........ r119599 | fxcoudert | 2006-12-06 13:49:55 -0800 (Wed, 06 Dec 2006) | 7 lines * intrinsics/c99_functions.c (fmodf, fmodl, floorl): New functions. * c99_protos.h (fmodf, fmodl, floorl): New prototypes. * configure.ac: Check for fmodf, fmod and fmodl. * configure: Regenerate. * config.h.in: Regenerate. ........ r119600 | aldyh | 2006-12-06 14:08:49 -0800 (Wed, 06 Dec 2006) | 4 lines * config/pa/pa.c (hppa_gimplify_va_arg_expr): Build MODIFY_EXPR not GIMPLE_MODIFY_STMT. ........ r119601 | mmitchel | 2006-12-06 14:54:51 -0800 (Wed, 06 Dec 2006) | 7 lines * parser.c (cp_parser_init_declarator): Reject initialization of functions. * g++.dg/template/crash64.C: New test. * g++.dg/parse/crash27.C: Adjust error markers. ........ r119606 | gccadmin | 2006-12-06 16:17:56 -0800 (Wed, 06 Dec 2006) | 1 line Daily bump. ........ r119609 | burnus | 2006-12-07 01:15:41 -0800 (Thu, 07 Dec 2006) | 7 lines 2006-12-06 Tobias Burnus <burnus@net-b.de> * error.c (error_print): Fix handling of printf-style position specifiers of the form "%3$d" ........ r119611 | bkoz | 2006-12-07 01:35:57 -0800 (Thu, 07 Dec 2006) | 144 lines 2006-12-06 Benjamin Kosnik <bkoz@redhat.com> * include/Makefile.am (std_headers_rename): Remove. (c_base_headers_rename): Remove. (std_headers): Adjust to true names. (c_base_headers): Adjust to true names. (stamp-c_base, stamp_std, stamp_c_base_extra): Adjust. * configure: Regenerate. * include/Makefile.in: Regenerate. * include/std/std_algorithm.h: To... * include/std/std_bitset.h: To... * include/std/std_complex.h: To... * include/std/std_deque.h: To... * include/std/std_fstream.h: To... * include/std/std_functional.h: To... * include/std/std_iomanip.h: To... * include/std/std_iosfwd.h: To... * include/std/std_ios.h: To... * include/std/std_iostream.h: To... * include/std/std_istream.h: To... * include/std/std_iterator.h: To... * include/std/std_limits.h: To... * include/std/std_list.h: To... * include/std/std_locale.h: To... * include/std/std_map.h: To... * include/std/std_memory.h: To... * include/std/std_numeric.h: To... * include/std/std_ostream.h: To... * include/std/std_queue.h: To... * include/std/std_set.h: To... * include/std/std_sstream.h: To... * include/std/std_stack.h: To... * include/std/std_stdexcept.h: To... * include/std/std_streambuf.h: To... * include/std/std_string.h: To... * include/std/std_utility.h: To... * include/std/std_valarray.h: To... * include/std/std_vector.h: To... * include/std/algorithm: ...this. * include/std/bitset: ...this. * include/std/complex: ...this. * include/std/deque: ...this. * include/std/fstream: ...this. * include/std/functional: ...this. * include/std/iomanip: ...this. * include/std/iosfwd: ...this. * include/std/ios: ...this. * include/std/iostream: ...this. * include/std/istream: ...this. * include/std/iterator: ...this. * include/std/limits: ...this. * include/std/list: ...this. * include/std/locale: ...this. * include/std/map: ...this. * include/std/memory: ...this. * include/std/numeric: ...this. * include/std/ostream: ...this. * include/std/queue: ...this. * include/std/set: ...this. * include/std/sstream: ...this. * include/std/stack: ...this. * include/std/stdexcept: ...this. * include/std/streambuf: ...this. * include/std/string: ...this. * include/std/utility: ...this. * include/std/valarray: ...this. * include/std/vector: ...this. * include/c_std/std_cassert.h: To... * include/c_std/std_cctype.h: To... * include/c_std/std_cerrno.h: To... * include/c_std/std_cfloat.h: To... * include/c_std/std_ciso646.h: To... * include/c_std/std_climits.h: To... * include/c_std/std_clocale.h: To... * include/c_std/std_cmath.h: To... * include/c_std/std_csetjmp.h: To... * include/c_std/std_csignal.h: To... * include/c_std/std_cstdarg.h: To... * include/c_std/std_cstddef.h: To... * include/c_std/std_cstdio.h: To... * include/c_std/std_cstdlib.h: To... * include/c_std/std_cstring.h: To... * include/c_std/std_ctime.h: To... * include/c_std/std_cwchar.h: To... * include/c_std/std_cwctype.h: To... * include/c_std/cassert: ...this. * include/c_std/cctype: ...this. * include/c_std/cerrno: ...this. * include/c_std/cfloat: ...this. * include/c_std/ciso646: ...this. * include/c_std/climits: ...this. * include/c_std/clocale: ...this. * include/c_std/cmath: ...this. * include/c_std/csetjmp: ...this. * include/c_std/csignal: ...this. * include/c_std/cstdarg: ...this. * include/c_std/cstddef: ...this. * include/c_std/cstdio: ...this. * include/c_std/cstdlib: ...this. * include/c_std/cstring: ...this. * include/c_std/ctime: ...this. * include/c_std/cwchar: ...this. * include/c_std/cwctype: ...this. * include/c/std_cassert.h: To... * include/c/std_cctype.h: To... * include/c/std_cerrno.h: To... * include/c/std_cfloat.h: To... * include/c/std_ciso646.h: To... * include/c/std_climits.h: To... * include/c/std_clocale.h: To... * include/c/std_cmath.h: To... * include/c/std_csetjmp.h: To... * include/c/std_csignal.h: To... * include/c/std_cstdarg.h: To... * include/c/std_cstddef.h: To... * include/c/std_cstdio.h: To... * include/c/std_cstdlib.h: To... * include/c/std_cstring.h: To... * include/c/std_ctime.h: To... * include/c/std_cwchar.h: To... * include/c/std_cwctype.h: To... * include/c/cassert: ...this. * include/c/cctype: ...this. * include/c/cerrno: ...this. * include/c/cfloat: ...this. * include/c/ciso646: ...this. * include/c/climits: ...this. * include/c/clocale: ...this. * include/c/cmath: ...this. * include/c/csetjmp: ...this. * include/c/csignal: ...this. * include/c/cstdarg: ...this. * include/c/cstddef: ...this. * include/c/cstdio: ...this. * include/c/cstdlib: ...this. * include/c/cstring: ...this. * include/c/ctime: ...this. * include/c/cwchar: ...this. * include/c/cwctype: ...this. ........ r119612 | rguenth | 2006-12-07 01:38:37 -0800 (Thu, 07 Dec 2006) | 5 lines 2006-12-07 Richard Guenther <rguenther@suse.de> * tree-vect-transform.c (vectorizable_call): Fix leftover of TREE_OPERAND to GIMPLE_STMT_OPERAND conversion. ........ r119613 | mkuvyrkov | 2006-12-07 02:02:35 -0800 (Thu, 07 Dec 2006) | 5 lines 2006-12-07 Maxim Kuvyrkov <mkuvyrkov@ispras.ru> * sched-rgn.c (add_block1): Use correct initializer. ........ r119615 | nickc | 2006-12-07 02:54:13 -0800 (Thu, 07 Dec 2006) | 16 lines * common.opt (record-gcc-switches): New command line switch. * target.h (print_switch_type): New enum. (print_switch_fn_type): New typedef for a function pointer. (struct gcc_target): Add record_gcc_switches and record_gcc_switches_section fields. * target-def.h (TARGET_ASM_RECORD_GCC_SWITCHES): Provide a default definition. (TARGET_ASM_RECORD_GCC_SWITCHES_SECTION): Provide a default definition. * toplev.c (print_single_switch): Simplify by providing a pointer to function that will format and output the switch appropriately. (print_switch_values): Likewise. (print_to_asm_out_file): New function. (print_to_stderr): New function. (init_asm_output): If flag_record_gcc_switches is set then if the target supports recording the switches then emit them into the assembler output file, otherwise tell the user that the switch is not supported. * varasm.c (eld_record_gcc_switches): New function. Example handler for the record_gcc_switches target hook. * doc/tm.texi (TARGET_ASM_RECORD_GCC_SWITCHES): Document the new target hook. (TARGET_ASM_RECORD_GCC_SWITCHES_SECTION): Likewise. * doc/invoke.texi (-frecord-gcc-switches): Document. ........ r119616 | bernds | 2006-12-07 03:06:08 -0800 (Thu, 07 Dec 2006) | 5 lines * config/bfin/bfin.c (print_operand): New modifier 'N' for constants. * config/bfin/bfin.md (ssashiftv2hi3, ssashifthi3, lshiftv2hi3, lshifthi3): Use it, and fix the order of alternatives. ........ r119619 | hubicka | 2006-12-07 04:54:09 -0800 (Thu, 07 Dec 2006) | 4 lines * tree-vrp.c (compare_values): Short circuit INTEGER_CST; use fold_constant_to_binary; tolerate wrong type constants. (value_intersect_p): Do just two tests. ........ r119620 | hubicka | 2006-12-07 04:56:02 -0800 (Thu, 07 Dec 2006) | 4 lines * i386.c (nocona_cost, pentium4_cost): Update preffered memcpy/memset codegen. ........ r119622 | rguenth | 2006-12-07 06:24:11 -0800 (Thu, 07 Dec 2006) | 6 lines 2006-12-07 Richard Guenther <rguenther@suse.de> * builtins.c (expand_builtin_pow): Adjust predicates for pow to cbrt expansion to unsafe math and !HONOR_NANS for negative base. ........ r119623 | amacleod | 2006-12-07 06:39:37 -0800 (Thu, 07 Dec 2006) | 6 lines 2006-12-07 Andrew Macleod <amacleod@redhat.com> * expr.c (string_constant): Account for non-zero lower bound arrays. ........ r119625 | jsm28 | 2006-12-07 08:45:47 -0800 (Thu, 07 Dec 2006) | 2 lines * ru.po: New. ........ r119628 | mrs | 2006-12-07 08:48:11 -0800 (Thu, 07 Dec 2006) | 2 lines * treelang/compile/var_defs.tree: Adjust. ........ r119630 | nickc | 2006-12-07 09:44:10 -0800 (Thu, 07 Dec 2006) | 2 lines * config/elfos.h (TARGET_ASM_RECORD_GCC_SWITCHES): Set to elf_record_gcc_switches. ........ r119633 | lmillward | 2006-12-07 11:16:38 -0800 (Thu, 07 Dec 2006) | 9 lines * cp_parser_elaborated_type_specifier: Check the return value of check_elaborated_type_specifier. * g++.dg/ext/attrib27.C: New test. * g++.dg/parse/struct-as-enum1.C: Adjust error markers. * g++.dg/parse/typedef5.C: Likewise. ........ r119635 | tsmigiel | 2006-12-07 14:11:51 -0800 (Thu, 07 Dec 2006) | 4 lines * config/spu/spu.c (array_to_constant): Correct the order of arguments to the calls of hwint_to_const_double. ........ r119637 | pinskia | 2006-12-07 15:40:46 -0800 (Thu, 07 Dec 2006) | 13 lines 2006-12-07 Andrew Pinski <andrew_pinski@playstation.sony.com> * config/spu/spu-c.c (spu_build_overload_builtin): Delete. (spu_resolve_overloaded_builtin): Check for non scalar instead of vector type and check the function call argument type also for non scalar. Call build_function_call instead of spu_build_overload_builtin. 2006-12-07 Andrew Pinski <andrew_pinski@playstation.sony.com> * gcc.target/spu: New directory. * gcc.target/spu/spu.exp: New file. * gcc.target/spu/intrinsics-1.c: New test. ........ r119642 | gccadmin | 2006-12-07 16:18:05 -0800 (Thu, 07 Dec 2006) | 1 line Daily bump. ........ r119645 | mrs | 2006-12-07 18:03:42 -0800 (Thu, 07 Dec 2006) | 5 lines * Makefile.def (dependencies): Add dependency for install-target-libssp and install-target-libgomp on install-gcc. * Makefile.in: Regenerate. ........ r119648 | pinskia | 2006-12-07 20:50:02 -0800 (Thu, 07 Dec 2006) | 10 lines 2006-04-20 Jakub Jelinek <jakub@redhat.com> * c-pretty-print.c (pp_c_direct_abstract_declarator): Print TYPE_MAX_VALUE (TYPE_DOMAIN (t)) + 1 for ARRAY_TYPE rather than plain TYPE_MAX_VALUE (TYPE_DOMAIN (t)). ........ r119649 | mmitchel | 2006-12-07 22:27:22 -0800 (Thu, 07 Dec 2006) | 12 lines * cp-tree.h (DECL_USE_TEMPLATE): Mention partial specializations. (explicit_class_specialization_p): Declare. * pt.c (explicit_class_specialization_p): New function. * parser.c (cp_parser_init_declarator): Check correct number of template parameters for in-class function definitions. (cp_parser_check_declrator_template_parameters): Stop looking for template classes when we find an explicit specialization. * g++.dg/template/crash65.C: New test. * g++.dg/template/spec16.C: Tweak error markers. ........ r119650 | pinskia | 2006-12-08 00:11:44 -0800 (Fri, 08 Dec 2006) | 2 lines Correctly wrap my changelog entry. ........ r119651 | burnus | 2006-12-08 01:45:44 -0800 (Fri, 08 Dec 2006) | 14 lines fortran/ 2006-12-08 Tobias Burnus <burnus@net-b.de> * trans-decl.f90 (gfc_create_module_variable): Allow imported symbols in interface bodys in modules. testsuite/ 2006-12-08 Tobias Burnus <burnus@net-b.de> * gfortran.dg/import4.f90: New test for IMPORT in modules. ........ r119652 | jakub | 2006-12-08 02:06:51 -0800 (Fri, 08 Dec 2006) | 3 lines * testsuite/util/testsuite_hooks.cc (set_memory_limits): Don't set RLIMIT_AS below 16MB on x86_64-linux. ........ r119655 | bernds | 2006-12-08 04:42:44 -0800 (Fri, 08 Dec 2006) | 10 lines * config/bfin/bfin.c (effective_address_32bit_p): Return true for anything involving the GOT. (bfin_adjust_cost): Don't take the REGNO of a MEM. (trapping_loads_p): Look inside the pattern of an insn to find the SET. * config/bfin/bfin.md (attr "type"): Add movcc. (insn_reservation "alu"): Likewise. (movsicc_insn1, movsicc_insn2): Change type to movcc. ........ r119656 | ebotcazou | 2006-12-08 05:34:03 -0800 (Fri, 08 Dec 2006) | 1 line Fix ChangeLog. ........ r119657 | amacleod | 2006-12-08 06:07:53 -0800 (Fri, 08 Dec 2006) | 47 lines New TER code. 2006-12-08 Andrew MacLeod <amacleod@redhat.com> * Makefile.in: Add new file tree-ssa-ter.c. * tree-outof-ssa.c (struct temp_expr_table_d, new_temp_expr_table, free_temp_expr_table, add_value_to_version_list, add_value_to_partition_list, remove_value_from_partition_list, add_dependence, check_replaceable, finish_expr, mark_replaceable, kill_expr, kill_virtual_exprs, find_replaceable_in_bb, find_replaceable_exprs, dump_replaceable_exprs): Move to tree-ssa-ter.c. * tree-ssa-live.h (find_replaceable_exprs, dump_replaceable_exprs): Add prototypes. * tree-ssa-ter.c: New file using code moved from tree-outof-ssa.c. (struct value_expr_d): Remove. (struct temp_expr_table_d): Rename fields, add explicit vector of replaceable expressions instead of sharing. Change value_expr_p's to bitmap. Delete free_list. (new_temp_expr_table): Rename fields, count number of ssa_names in each partition. (free_temp_expr_table): Rename field, free new fields. (new_value_expr, free_value_expr, find_value_in_list, add_value_to_list, add_info_to_list, remove_value_from_list): Delete. (version_to_be_replaced_p): New. Is an ssa-name replaceable? (make_dependent_on_partition): New. Set bit in version list, allocating a bitmap if need be. (add_to_partition_kill_list): New. Set bit in the partition list, allocating a bitmap if need be. (remove_from_partition_kill_list): New. Remove a bit from the partition list, free the bitmap if it is empty. (add_dependence): Use renamed field, cleanup. Don't add a dependence on partitions with only one member. (is_replaceable_p): New. Split out replaceability check from check_replaceable. (process_replaceable): New. Replacement code split from check_replaceable. (check_replaceable): Removed. (finished_with_expr): Renamed from finish_expr. (kill_expr): Use renamed fields. Less parameters. (kill_virtual_exprs): Less parameters. (mark_replaceable): Use renamed fields. (find_replaceable_in_bb): Use renamed fields, cleanup. (find_replaceable_exprs): Use renamed routines, cleanup. (dump_replaceable_exprs): don;t go past end of ssa_names list. (debug_ter): New. Debug routine to dump state. ........ r119660 | shinwell | 2006-12-08 08:37:42 -0800 (Fri, 08 Dec 2006) | 40 lines gcc/ * recog.c (mode_dependent_address_p): Identify pre-increment, pre-decrement, post-increment and post-decrement addressing as always being mode-dependent. * config/m32c/m32c.c (m32c_mode_dependent_address): Delete. * config/m32c/m32c.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/m32c/m32c-protos.h (m32c_mode_dependent_address): Delete. * config/m32r/m32r.h (GO_IF_MODE_DEPENDENT_ADDRESS): Delete PRE_DEC, PRE_INC and POST_INC checks. * config/i386/i386.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/sh/sh.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/pdp11/pdp11.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/avr/avr.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/c4x/c4x.h (GO_IF_MODE_DEPENDENT_ADDRESS): Delete PRE_DEC, PRE_INC, POST_DEC and POST_INC cases. * config/stormy16/stormy16.c (xstormy16_mode_dependent_address_p): Delete POST_INC and PRE_DEC cases. * config/m68hc11/m68hc11.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/cris/cris.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/mn10300/mn10300.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/ia64/ia64.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/m68k/m68k.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/rs6000/rs6000.c (rs6000_mode_dependent_address): Delete PRE_INC and PRE_DEC cases. * config/arc/arc.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/mcore/mcore.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/arm/arm.h (ARM_GO_IF_MODE_DEPENDENT_ADDRESS): Delete. (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/pa/pa.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/vax/vax.c (vax_mode_dependent_address_p): Delete auto-increment cases. * config/h8300/h8300.h (GO_IF_MODE_DEPENDENT_ADDRESS): Delete auto-increment cases. * config/bfin/bfin.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. gcc/testsuite/ * gcc.c-torture/execute/mode-dependent-address.c: New test. ........ r119661 | danglin | 2006-12-08 09:28:59 -0800 (Fri, 08 Dec 2006) | 3 lines * pa.h (LEGITIMATE_CONSTANT_P): Simplify. ........ r119662 | manu | 2006-12-08 10:14:21 -0800 (Fri, 08 Dec 2006) | 8 lines 2006-12-08 Manuel Lopez-Ibanez <manu@gcc.gnu.org> * lib/target-supports.exp (check_effective_target_large_long_double): New. * gcc.dg/Wconversion-real.c : Use it. * gcc.dg/Wconversion-integer.c : Fix for targets where char is unsigned. ........ r119663 | uros | 2006-12-08 10:20:25 -0800 (Fri, 08 Dec 2006) | 15 lines * reg-stack.c (convert_regs_entry): Mark current argument passing registers as live. * config/i386/i386.h (X87_REGPARM_MAX): Set to 0 to disable passing of float arguments in x87 registers. testsuite/ChangeLog: * gcc.target/i386/x87regparm-1.c: XFAIL. * gcc.target/i386/x87regparm-2.c: XFAIL. * gcc.target/i386/x87regparm-3.c: XFAIL. * gcc.target/i386/x87regparm-4.c: XFAIL. ........ r119666 | mrs | 2006-12-08 14:22:51 -0800 (Fri, 08 Dec 2006) | 5 lines * config/rs6000/t-darwin (TARGET_LIBGCC2_CFLAGS): Build libgcc with -mmacosx-version-min=10.4. * config/rs6000/darwin.h (SUBTARGET_OVERRIDE_OPTIONS): Default to G4 for 10.5+ unless doing kernel builds. ........ r119669 | danglin | 2006-12-08 15:41:03 -0800 (Fri, 08 Dec 2006) | 5 lines * pa.md (high:DI and lo_sum:DI): Handle 64-bit CONST_INTs in 32-bit patterns. Correct length of high:DI instruction sequence. ........ r119670 | mrs | 2006-12-08 15:54:21 -0800 (Fri, 08 Dec 2006) | 5 lines * configure.ac: Fix x86 darwin builds. * darwin_stop_world.c: Likewise. * include/private/gcconfig.h: Likewise. * connfigure: Regenerate. ........ r119676 | gccadmin | 2006-12-08 16:18:33 -0800 (Fri, 08 Dec 2006) | 1 line Daily bump. ........ r119678 | mrs | 2006-12-08 16:21:52 -0800 (Fri, 08 Dec 2006) | 3 lines * configure.in: Add x86 darwin support for libjava. * configure: Regenerate. ........ r119682 | tsmigiel | 2006-12-08 17:22:39 -0800 (Fri, 08 Dec 2006) | 26 lines * config/spu/spu-protos.h (spu_split_immediate): Renamed from spu_split_address. (cpat_const_p, gen_cpat_const): Add. * config/spu/spu.c (immediate_class): New enum. (cpat_info, classify_immediate): New. (print_operand): Use S, D, T instead of F, G, H. Use classify_immediate. Handle cpat cases. (spu_split_immediate): Renamed from spu_split_address. Split all immediates that can be split. (immediate_load_p): Use classify_immediate. (spu_legitimate_constant_p): Accept everything except some cases of CONST_VECTOR. (spu_expand_move): Use spu_split_immedate. (fsmbi_const_p): Use classify_immediate. (cpat_const_p): New. (gen_cpat_const: New. * config/spu/constraints.md (j,k,l): New constraints for cpat instructions. * config/spu/spu.md (unnamed splitter): Change address splitter to handle all immediates. (_mov<mode>, _movdi, _movti): Handle i, j, k constraints for cpat instructions. (cpat, _cpat, splitter): Generate a TImode constant for cpat patterns when possible. ........ r119687 | burnus | 2006-12-09 01:39:30 -0800 (Sat, 09 Dec 2006) | 5 lines 2006-12-09 Tobias Burnus <burnus@net-b.de> * gfortran.dg/array_2.f90: Added sqrt test. ........ r119688 | mkuvyrkov | 2006-12-09 05:05:44 -0800 (Sat, 09 Dec 2006) | 4 lines 2006-12-09 Maxim Kuvyrkov <mkuvyrkov@ispras.ru> * haifa-sched.c (schedule_block): Remove excessive sanity check. ........ r119691 | hubicka | 2006-12-09 07:36:55 -0800 (Sat, 09 Dec 2006) | 7 lines * cgraph.c: Update copyright. * cgraph.h: Likewise (cgraph_update_pending_function): Remove prototype. * cgraphunit.c: Update copyright; update overall comment. (cgraph_assemble_pending_functions): Make local. ........ r119693 | rguenth | 2006-12-09 09:40:13 -0800 (Sat, 09 Dec 2006) | 6 lines 2006-12-09 Richard Guenther <rguenther@suse.de> * g++.dg/warn/implicit-typename1.C: Qualify types. * g++.dg/parse/crash12.C: Likewise. * g++.dg/tree-ssa/pr22444.C: Likewise. ........ r119695 | pault | 2006-12-09 12:41:51 -0800 (Sat, 09 Dec 2006) | 12 lines 2006-12-09 Paul Thomas <pault@gcc.gnu.org> * resolve.c (resolve_function): Add LEN to the functions not checked for assumed size actual args. 2006-12-09 Paul Thomas <pault@gcc.gnu.org> * gfortran.dg/assumed_len.f90: New test. ........ r119696 | pault | 2006-12-09 12:52:27 -0800 (Sat, 09 Dec 2006) | 15 lines 2006-11-25 Paul Thomas <pault@gcc.gnu.org> * module.c (load_generic_interfaces): Add symbols for all the local names of an interface. Share the interface amongst the symbols. * gfortran.h : Add generic_copy to symbol_attribute. * symbol.c (free_symbol): Only free interface if generic_copy is not set. 2006-11-25 Paul Thomas <pault@gcc.gnu.org> * gfortran.dg/module_interface_2.f90: New test. ........ r119697 | pault | 2006-12-09 13:13:29 -0800 (Sat, 09 Dec 2006) | 45 lines 2006-12-09 Paul Thomas <pault@gcc.gnu.org> * interface.c (compare_type_rank_if): Reject invalid generic interfaces. (check_interface1): Give a warning for nonreferred to ambiguous interfaces. (check_sym_interfaces): Check whether an ambiguous interface is referred to. Do not check host associated interfaces since these cannot be ambiguous with the local versions. (check_uop_interface, gfc_check_interfaces): Update call to check_interface1. * symbol.c (gfc_get_sym_tree, gfc_get_sym_tree): Allow adding unambiguous procedures to generic interfaces. * gfortran.h (symbol_attribute): Added use_only and ambiguous_interfaces. * module.c (load_need): Set the use_only flag, if needed. * resolve.c (resolve_fl_procedure): Warn for nonreferred interfaces. * expr.c (find_array_section): Fix initializer array contructor. 2006-12-09 Paul Thomas <pault@gcc.gnu.org> Tobias Burnus <burnus@gcc.gnu.org> * gfortran.dg/interface_4.f90: Test adding procedure to generic interface. * gfortran.dg/interface_5.f90: Test warning for not-referenced-to ambiguous interfaces. * gfortran.dg/interface_6.f90: Test invalid, ambiguous interface. * gfortran.dg/interface_7.f90: Test invalid, ambiguous interface. * gfortran.dg/interface_8.f90: Test warning for not-referenced-to ambiguous interfaces. * gfortran.dg/interface_1.f90: Change dg-error into a dg-warning. * gfortran.dg/array_initializer_2.f90: Add initializer array constructor test. * gfortran.dg/interface_9.f90: Test that host interfaces are not checked for ambiguity with the local version. ........ r119702 | gccadmin | 2006-12-09 16:18:39 -0800 (Sat, 09 Dec 2006) | 1 line Daily bump. ........ r119704 | zack | 2006-12-09 21:09:29 -0800 (Sat, 09 Dec 2006) | 6 lines * c-opts.c (c_common_parse_file): Unconditionally give a warning, suitable for the language, if set_yydebug is true. * c-pragma.h: Define enum pragma_omp_clause here. Don't define YYDEBUG or declare yydebug. * c-parser.c (yydebug, enum pragma_omp_clause): Delete. * cp/parser.c: Likewise. ........ r119705 | rsandifo | 2006-12-10 02:37:48 -0800 (Sun, 10 Dec 2006) | 6 lines 2006-12-04 Rask Ingemann Lambertsen <rask@sygehus.dk> * reload1.c (choose_reload_regs): Don't set byte offset when resolving subregs of hard regs. ........ r119706 | steven | 2006-12-10 02:59:19 -0800 (Sun, 10 Dec 2006) | 20 lines * cse.c: (struct cse_basic_block_data): Remove LAST field. (struct branch_path): Remove BRANCH and TAKEN fields. Add new BB field. (cse_visited_basic_blocks): New static bitmap. (cse_end_of_basic_block, cse_basic_block): Remove. (cse_find_path, cse_dump_path, cse_prescan_path, cse_extended_basic_block): New static functions. (cse_insn): Don't CSE over setjmp calls. Use the CFG to find basic block boundaries. Don't record jump equivalences here. Update the CFG after doing in-place replacement of the SET_SRC. (cse_main): Rewrite. Look for extended basic block headers and call cse_extended_basic_block on them until all paths that start at this header are exhausted. (rest_of_handle_cse): Verify that the CFG is incrementally updated and correct after cse_main. Don't call delete_trivially_dead_insns, let cfgcleanup do that. (rest_of_handle_cse2): Verify the CFG here, too, after cse_main. (pass_cse): Add TODO_verify_flow. (pass_cse2): Likewise. ........ r119707 | paolo | 2006-12-10 08:47:27 -0800 (Sun, 10 Dec 2006) | 5 lines 2006-12-10 Paolo Carlini <pcarlini@suse.de> * src/valarray-inst.cc (__gslice_to_index): Optimize performance. * testsuite/performance/26_numerics/valarray_gslice_to_index.cc: New. ........ r119708 | andreast | 2006-12-10 11:32:30 -0800 (Sun, 10 Dec 2006) | 7 lines 2006-12-10 Andreas Tobler <a.tobler@schweiz.org> * configure.in: Correct x86 darwin support for libjava to powerpc and i?86 only. * configure: Regenerate. ........ r119709 | burnus | 2006-12-10 11:53:07 -0800 (Sun, 10 Dec 2006) | 37 lines fortran/ 2006-12-10 Tobias Burnus <burnus@net-b.de> * interface.c (compare_actual_formal): PROTECTED is incompatible with intent(out). * symbol.c (check_conflict): Check for PROTECTED conflicts. (gfc_add_protected): New function. (gfc_copy_attr): Copy PROTECTED attribute. * decl.c (match_attr_spec): Add PROTECTED support. (gfc_match_protected): New function. * dump-parse-tree.c (gfc_show_attr): Add PROTECTED support. * gfortran.h (gfc_symbol): Add protected flag. Add gfc_add_protected prototype. * expr.c (gfc_check_pointer_assign): Add PROTECTED support. * module.c (ab_attribute, attr_bits, mio_symbol_attribute, mio_symbol_attribute): Add PROTECTED support. * resolve.c (resolve_equivalence): Add PROTECTED support. * match.c (gfc_match_assignment,)gfc_match_pointer_assignment: Check PROTECTED attribute. * match.h: Add gfc_match_protected prototype. * parse.c (decode_statement): Match PROTECTED statement. * primary.c (match_variable): Add PROTECTED support. testsuite/ 2006-12-10 Tobias Burnus <burnus@net-b.de> * gfortran.dg/protected_1.f90: New test. * gfortran.dg/protected_2.f90: New test. * gfortran.dg/protected_3.f90: New test. * gfortran.dg/protected_4.f90: New test. * gfortran.dg/protected_5.f90: New test. * gfortran.dg/protected_6.f90: New test. ........ r119710 | burnus | 2006-12-10 13:22:49 -0800 (Sun, 10 Dec 2006) | 5 lines 2006-12-10 Tobias Burnus <burnus@net-b.de> * gfortran.texi: Update Fortran 2003 section. ........ r119711 | amacleod | 2006-12-10 13:25:40 -0800 (Sun, 10 Dec 2006) | 103 lines New out of ssa Coalescer. 2006-12-10 Andrew MacLeod <amacleod@redhat.com> * common.opt (-ftree-lrs): Remove live range splitting option. * makefile.in: Add tree-ssa-coalesce.o and reduce header dependancies. * opts.c (decode_options): Remove flag_tree_live_range_split. * tree-flow.h (struct var_ann_d): Rename fields from root_ to base_. * tree-flow-inline.h (single_imm_use_p): New. Check for single use. * tree-outof-ssa.c: Remove header files which aren't needed. (SSANORM_*): Remove flags. (print_exprs_edge, coalesce_abnormal_edges, coalesce_phi_operands, coalesce_result_decls_and_copies, coalesce_asm_operands): Remove. (coalesce_ssa_name): Move to tree-ssa-coalesce.c. (assign_vars): Use Basevar instead of root_var structure. (replace_def_variable): Dont do anything if def is replaceable. (remove_ssa_form): Integrate functional changes. (rewrite_out_of_ssa): Remove live-range_split option. * tree-ssa-coalesce.c: New File for ssa-name coalescing. (coalesce_cost): Calculate the cost of a coalesce. (coalesce_cost_bb): Calculate the coalesce cost within a BB. (coalesce_cost_edge): Calculate the coalesce cost on an edge. (pop_cost_one_pair): Remove the best coalesce with cost 1 from the list. (pop_best_coalesce): Remove the best coalesce from the list. (coalesce_pair_map_hash): Calculate coalesce pair hash. (coalesce_pair_map_eq): Compare 2 coalesce pairs for hash function. (create_coalesce_list): Create a coalesce list object. (delete_coalesce_list): Free a coalesce list object. (find_coalesce_pair): Find matching pair in the coalesce list. (add_cost_one_coalesce): Add a coalesce to the "cost one" list. (add_coalesce): Add a coalesce to the coalesce list. (compare_pairs): Comparision function to determine pair sorted order. (num_coalesce_pairs): Number of coalesced pairs. (first_coalesce_pair, end_coalesce_pair_p, next_coalesce_pair): Coalesce pair iterator functions. (sort_coalesce_list): Sort coalesce pairs in order of expense. (dump_coalesce_list): Show coalesce list. (ssa_conflicts_new): Create an SSA conflict graph. (ssa_conflicts_delete): Delete an SSA conflict graph. (ssa_conflicts_test_p): Test for conflicts. (ssa_conflicts_add_one): Add a single conflict. (ssa_conflicts_add): Add a conflict pair. (ssa_conflicts_merge): Merge conflicts. (struct live_track_d): Struct for tracking live partitions. (new_live_track): Create new live_track object. (delete_live_track): Delete a live_track object. (live_track_remove_partition): Remove a partition from the live list. (live_track_add_partition): Add a partition from the live list. (live_track_clear_var): Take VAR from the live list. (live_track_live_p): Is var live? (live_track_process_use): Make var come alive. (live_track_process_def): Make var go dead, add conflicts. (live_track_init): Initialize to a live on exit set. (live_track_clear_base_vars): Clear live partitions. (build_ssa_conflict_graph): Build a conflict graph. (print_exprs): Common debug output routine. (abnormal_corrupt): Output info about a failed coalesce across an abnormal edge. (fail_abnormal_edge_coalesce): Output info about a failed MUST_COALESCE. (create_outofssa_var_map): Create a var map and coalesce list. (attempt_coalesce): Coalesce a pair. (coalesce_partitions): Coalesce all pairs in a coalesce list. (coalesce_ssa_name): Entry point. Determine what ssa_names to coalesce. * tree-ssa-live.c: Remove header files which aren't needed. (var_map_base_init): New. Initialize a basevar list. (var_map_base_fini): New. Finish a basevar list. (init_var_map): Initialize new fields. (delete_var_map): Free new fields. (var_union): Use renamed fields. (compact_var_map): Remove. (partition_to_view_init): Use renamed fields, change order of an if. (partition_view_fini): Use renamed fields. (partition_view_normal): Create basevar list if requested. (partition_view_bitmap): Create a view based on a bitmap of partitions. (change_partition_var): Use renamed fields. (create_ssa_var_map): Remove. (tpa_init, tpa_remove_partition, tpa_delete, tpa_compact, root_var_init): Remove. (partition_pair_map_hash, partition_pair_map_eq, create_coalesce_list, delete_coalesce_list, find_partition_pair, coalesce_cost, add_coalesce, compare_pairs, num_coalesce_pairs, first_partition_pair, end_partition_pair_p, next_partition_pair, sort_coalesce_list, pop_best_coalesce, add_conflicts_if_valid, set_if_valid, build_tree_conflict_graph, coalesce_tpa_members, dump_coalesce_list, tpa_dump): Moved to tree-ssa-coalesce.c and/or renamed there. (dump_var_map): Use renamed fields. * tree-ssa-live.h (struct _var_map): Modify fields. (partition_to_var, version_to_var, var_to_partition): Use renamed fields. (basevar_index): New. Index of the base variable of a partition. (num_basevars): New. Number of unique base variables in partition map. (register_ssa_partition): Use renamed fields. (struct tree_partition_associator_d): Remove. (tpa_num_trees, tpa_tree, tpa_first_partition, tpa_next_partition, tpa_find_tree, tpa_decompact, root_var_init, root_var_num, root_var, root_var_first_partition, root_var_next_partition, root_var_dump, root_var_delete, root_var_remove_partition, root_var_find, root_var_compact, root_var_decompact): Remove. (struct partition_pair, struct coalesce_list_d): Moved to tree-ssa-coalesce.c * tree-ssa-ter.c: Remove header files which aren't needed. ........ r119713 | rakdver | 2006-12-10 14:17:15 -0800 (Sun, 10 Dec 2006) | 64 lines * tree-vrp.c (adjust_range_with_scev): Use get_chrec_loop. * loop-unswitch.c (unswitch_loops): Use FOR_EACH_LOOP. * tree-loop-linear.c (linear_transform_loops): Ditto. * tree-ssa-loop-im.c (determine_lsm): Ditto. * tree-ssa-loop-niter.c (estimate_numbers_of_iterations, free_numbers_of_iterations_estimates): Ditto. * tree_ssa_unswitch_loops (tree_ssa_unswitch_loops): Ditto. * tree-ssa-loop-ch.c (copy_loop_headers): Ditto. * tree-ssa-loop-ivopts.c (tree_ssa_iv_optimize): Ditto. * modulo-sched.c (sms_schedule): Ditto. * tree-ssa-loop-ivcanon.c (canonicalize_induction_variables, tree_unroll_loops_completely): Ditto. * predict.c (predict_loops): Ditto. * tree-if-conv.c (main_tree_if_conversion): Ditto. * loop-unroll.c (unroll_and_peel_loops, peel_loops_completely, decide_unrolling_and_peeling): Ditto. * cfgloopmanip.c (unloop): Use delete_loop. (place_new_loop): Access larray vector instead of parray. (create_preheaders, force_single_succ_latches, fix_loop_structure): Use FOR_EACH_LOOP and delete_loop.. * loop-doloop.c (doloop_optimize_loops): Ditto. * loop-invariant.c (move_loop_invariants): Ditto. * tree-cfg.c (replace_uses_by): Ditto. * tree-ssa-loop-prefetch.c (tree_ssa_prefetch_arrays): Ditto. * tree-chrec.h (CHREC_VAR, CHREC_LEFT, CHREC_RIGHT, CHREC_VARIABLE): Moved to ... * tree.h (CHREC_VAR, CHREC_LEFT, CHREC_RIGHT, CHREC_VARIABLE): ... here. * tree-scalar-evolution.c (chrec_contains_symbols_defined_in_loop, compute_overall_effect_of_inner_loop, chrec_is_positive): Use get_loop and get_chrec_loop. (number_of_iterations_for_all_loops): Use number_of_loops. (scev_initialize, scev_reset, scev_const_prop): Use FOR_EACH_LOOP. * tree-scalar-evolution.h (get_chrec_loop): New inline function. * cfgloopanal.c (mark_irreducible_loops): Use number_of_loops, and FOR_EACH_LOOP. * tree-chrec.c (evolution_function_is_invariant_rec_p, chrec_convert_1): Use get_loop and get_chrec_loop. * loop-init.c (loop_optimizer_init): Use number_of_loops. (loop_optimizer_init): Use FOR_EACH_LOOP. * tree-vectorizer.c (vect_loops_num): Removed. (vectorize_loops): Store number of loops locally. Use FOR_EACH_LOOP and get_loop. * tree-vectorizer.h (vect_loops_num): Removed. * tree-data-ref.c (get_number_of_iters_for_loop): Use get_loop. (find_data_references_in_loop): Do not set parallel_p. * tree-data-ref.h: Do not declare VEC(loop_p). * cfgloop.c (flow_loops_dump, mark_single_exit_loops, verify_loop_structure): Use FOR_EACH_LOOP. (flow_loops_free): Use FOR_EACH_LOOP, free larray vector. (initialize_loops_parallel_p): Removed. (flow_loops_find): Push the loops into a vector. (delete_loop): New function. (cancel_loop): Use delete_loop. * cfgloop.h: Declare VEC(loop_p). (struct loop): Remove parallel_p field. (struct loops): Replace num and parray field by larray vector. Remove shared_headers field. (delete_loop): Declare. (get_loop, get_loops, number_of_loops, fel_next, fel_init, FOR_EACH_LOOP): New. * doc/loop.tex: Document new accessor functions. ........ r119714 | dberlin | 2006-12-10 14:39:41 -0800 (Sun, 10 Dec 2006) | 5 lines 2006-12-10 Daniel Berlin <dberlin@dberlin.org> * tree-ssa-alias.c (compact_name_tags): Use sort_tags_by_id. (tree_pointer_compare): Remove. ........ r119718 | rakdver | 2006-12-10 15:34:20 -0800 (Sun, 10 Dec 2006) | 24 lines * doc/loop.texi: Document number_of_latch_executions and number_of_cond_exit_executions. * tree-scalar-evolution.c (compute_overall_effect_of_inner_loop, chrec_is_positive, number_of_iterations_for_all_loops, scev_const_prop): Use number_of_latch_executions. (set_nb_iterations_in_loop): Do not increase the value of the number of iterations. (number_of_iterations_in_loop): Renamed to ... (number_of_latch_executions): ... this. (number_of_exit_cond_executions): New function. * tree-scalar-evolution.h (number_of_iterations_in_loop): Declaration removed. (number_of_latch_executions, number_of_exit_cond_executions): Declare. * tree-ssa-loop-ivcanon.c (canonicalize_loop_induction_variables): Use number_of_latch_executions. * tree-data-ref.c (get_number_of_iters_for_loop): Use number_of_exit_cond_executions. * tree-vect-analyze.c (vect_get_loop_niters): Ditto. * cfgloop.h (struct loop): Improve description of the nb_iterations field. * gcc.dg/tree-ssa/loop-17.c: Update outcome. ........ r119724 | gccadmin | 2006-12-10 16:18:20 -0800 (Sun, 10 Dec 2006) | 1 line Daily bump. ........ r119726 | bje | 2006-12-10 16:22:24 -0800 (Sun, 10 Dec 2006) | 3 lines * configure.in (spu-*-*): Don't skip target-libiberty. * configure: Regenerate. ........ r119727 | bje | 2006-12-10 16:53:42 -0800 (Sun, 10 Dec 2006) | 12 lines * config/spu/spu-elf.h (STARTFILE_SPEC): Update. (ENDFILE_SPEC): Likewise. * config/spu/spu.opt (mstdmain): New option. * config/spu/crti.asm: Remove. * config/spu/crtn.asm: Likewise. * config/spu/crt0.c: Likewise. * config/spu/crtend.c: Likewise. * config/spu/t-spu-elf (EXTRA_MULTILIB_PARTS): Remove crt0 files listed above. ($(T)crti.o, $(T)crtn.o, $(T)crt1.o, $(T)crtend1.o): Remove. * doc/invoke.texi (SPU Options): Document -mstdmain. ........ r119728 | bje | 2006-12-10 20:11:34 -0800 (Sun, 10 Dec 2006) | 3 lines * config.guess: Import latest version. * config.sub: Likewise. ........ r119729 | amodra | 2006-12-10 22:43:16 -0800 (Sun, 10 Dec 2006) | 8 lines * configure.in: Handle spu makefile frag. * config/mt-spu: New file. * Makefile.tpl (MAINT): Define (MAINTAINER_MODE_FALSE, MAINTAINER_MODE_TRUE): Define. * configure: Regenerate. * Makefile.in: Regenerate. ........ r119730 | irar | 2006-12-10 23:54:35 -0800 (Sun, 10 Dec 2006) | 6 lines * tree-vect-patterns.c (vect_recog_dot_prod_pattern): Use GIMPLE_STMT_OPERAND. * tree-vect-transform.c (vect_permute_store_chain): Likewise. (vect_setup_realignment): Likewise. ........ r119731 | hubicka | 2006-12-11 00:07:52 -0800 (Mon, 11 Dec 2006) | 70 lines Move all varpool routines out of cgraph/cgraphunit to varpool.c * cgraph.c: Update comments. (cgraph_varpool_hash, cgraph_varpool_nodes, cgraph_varpool_last_needed_node cgraph_varpool_node_name, cgraph_varpool_node, cgraph_varpol_mode_for_asm, cgraph_varpool_mark_needed_node, cgraph_variable_initializer_availability): Move to varpool.c and drop cgraph_ prefixes. (cgraph_varpool_enqueue_needed_node, cgraph_varpool_reset_queue, cgraph_varpool_first_unanalyzed_node, cgraph_varpool_finalize_decl): move to varpool.c; drop cgraph_ prefix; make static. (dump_cgraph_varpool_node): Move to varpool.c under name dump_varpool_node. (dump_varpool, hash_varpool_node, eq_varpool_node, decide_is_variable_needed): Move to varpool.c (decl_assembler_name_equal): Move to tree.c. (availability_names): Rename to ... (cgraph_availability_names): ... this one. (dump_cgraph_node): Update. * cgraph.h: Reorder declarations now in varpool.c (cgraph_vailablity_names): Declare. (struct cgraph_varpool_node): Rename to ... (struct varpool_node): ... this one. (cgraph_varpool_first_unanalyzed_node, cgraph_varpool_nodes_queue, cgraph_varpool_first_unanalyzed_node, cgraph_varpool_node, cgraph_varpool_node_for_asm, cgraph_varpool_mark_needed_node, cgraph_varpool_finalize_decl, cgraph_varpool_enqueue_needed_node, cgraph_varpool_reset_queue, cgraph_varpool_assemble_pending_decls, cgraph_variable_initializer_availability): Rename to ... (varpool_first_unanalyzed_node, varpool_nodes_queue, varpool_first_unanalyzed_node, varpool_node, varpool_node_for_asm, varpool_mark_needed_node, varpool_finalize_decl, varpool_enqueue_needed_node, varpool_assemble_pending_decls, variable_initializer_availability): Rename to ... * tree.c (decl_assembler_name_equal): Move here from cgraph.c. * tree.h (decl_assembler_name_equal): Declare. * omp-low.c (lower_omp_critical): Update. * ipa-reference (analyze_variable, static_execute): Likewise. * toplev.c (wrapup_global_declaration_2, compile_file): Update. * cgraphunit.c: Update comments. (cgraph_varpool_assembled_nodes_queue): Move to varpool.c under name varpool_assembled_nodes_queue. (cgraph_varpool_analyze_pending_decls): Move to varpool.c under name varpool_analyze_pending_decls. (cgraph_varpool_remove_unreferenced_decls): Move to varpool.c under name varpool_remove_unreferenced_decls. (record_reference): Update. (cgraph_create_edges): Update. (record_referneces_in_initializer): New function. (cgraph_varpool_assemble_decl): Move to varpool.c under name varpool_assemble_decl; make global. (cgraph_varpool_assemble_pending_decls): Move to varpool.c under name varpool_assemble_pending_decls. (process_function_and_variable_attributes, cgraph_finalize_compilation_unit, struct cgraph_order_sort, cgraph_output_in_order, cgraph_function_and_variable_invisibility, cgraph_optimize, cgraph_increase_alignment): Update. * dwarf2out.c (decls_for_scope): Likewise. * ipa-type-escape.c (analyze_variable, type_escape_execute): Likewise. * except.c (output_ttype): Likewise. * varasm.c (mark_decl_referenced): Likewise. (find_decl_and_mark_referenced, assemble_alias): update. * Makefile.in: Add varpool.c, gt-varpool.c and remove gt-cgraphunit.c * passes.c (rest_of_decl_compilation): Update. * cp/decl2.c (var_finalized_p): Update for renamed varpool functions. * fortran/f59-lang.c (gfc_expand_function): Update for renamed varpool functions. ........ r119732 | paolo | 2006-12-11 02:48:56 -0800 (Mon, 11 Dec 2006) | 10 lines 2006-12-11 Richard Guenther <rguenther@suse.de> Paolo Carlini <pcarlini@suse.de> * include/ext/pb_ds/detail/pat_trie_/traits.hpp: Qualify types. * include/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp: Likewise. * include/ext/rope: Likewise. * include/bits/stl_tree.h (struct _Rb_tree): Change the _Link_type typedefs to use _Rb_tree_node<_Val> directly. (_M_get_node, _M_put_node): Use _Link_type. ........ r119734 | uros | 2006-12-11 06:06:07 -0800 (Mon, 11 Dec 2006) | 46 lines Revert: 2006-11-15 Uros Bizjak <ubizjak@gmail.com> * config/i386/i386.opt: New target option -mx87regparm. * config/i386/i386.h (struct ix86_args): Add x87_nregs, x87_regno, float_in_x87: Add new variables. mmx_words, sse_words: Remove. (X87_REGPARM_MAX): Define. * config/i386/i386.c (override_options): Error out for -mx87regparm but no 80387 support. (ix86_attribute_table): Add x87regparm. (ix86_handle_cconv_attribute): Update comments for x87regparm. (ix86_comp_type_attributes): Check for mismatched x87regparm types. (ix86_function_x87regparm): New function. (ix86_function_arg_regno_p): Add X87_REGPARM_MAX 80387 floating point registers. (init_cumulative_args): Initialize x87_nregs and float_in_x87 variables. (function_arg_advance): Process x87_nregs and x87_regno when floating point argument is to be passed in 80387 register. (function_arg): Pass XFmode arguments in 80387 registers for local functions. Pass SFmode and DFmode arguments to local functions in 80387 registers when flag_unsafe_math_optimizations is set. * reg-stack.c (convert_regs_entry): Disable NaN load for stack registers that are used for argument passing. * doc/extend.texi: Document x87regparm function attribute. * doc/invoke.texi: Document -mx87regparm. testsuite/ChangeLog: * gcc.target/i386/pr30120.c: New test. Revert: 2006-11-15 Uros Bizjak <ubizjak@gmail.com> * gcc.target/i386/x87regparm-1.c: New test. * gcc.target/i386/x87regparm-2.c: New test. * gcc.target/i386/x87regparm-3.c: New test. * gcc.target/i386/x87regparm-4.c: New test. ........ r119735 | hubicka | 2006-12-11 06:19:11 -0800 (Mon, 11 Dec 2006) | 14 lines * value-prof.c (tree_stringops_transform): New. (tree_value_profile_transformations): Require count to be non-zero; call stringop transform; reset stmt BSI after BB changed. (tree_divmod_fixed_value, tree_mod_pow2): Don't emit unnecesary label. (interesting_stringop_to_profile_p, tree_stringop_fixed_value): New. (tree_stringops_values_to_profile): New. (tree_values_to_profile): Call tree_stringops_values_to_profile. * tree.h (build_string_literal): Tidy prototype. (validate_arglist, builtin_memset_read_str, get_pointer_alignment): Declare. * builtins.c (validate_arglist, builtin_memset_read_str, get_pointer_alignment): Export. ........ r119739 | carlos | 2006-12-11 09:31:48 -0800 (Mon, 11 Dec 2006) | 6 lines 2006-12-11 Carlos O'Donell <carlos@codesourcery.com> * config/arm/elf.h (MAX_OFILE_ALIGNMENT): Remove definition. ........ r119740 | dnovillo | 2006-12-11 09:50:53 -0800 (Mon, 11 Dec 2006) | 12 lines * tree-scalar-evolution.c (scev_const_prop): * tree-phinodes.c (remove_phi_node): Add argument RELEASE_LHS_P. If given, release the SSA name on the LHS of the PHI node. Update all users. * tree-ssa-dce.c: Remove forward declarations for static functions. Re-arrange functions bodies as needed. (find_obviously_necessary_stmts): Never mark PHI nodes as obviously necessary. ........ r119742 | amylaar | 2006-12-11 10:49:23 -0800 (Mon, 11 Dec 2006) | 2 lines MAINTAINERS: Update my entry. ........ r119744 | schwab | 2006-12-11 11:09:05 -0800 (Mon, 11 Dec 2006) | 3 lines * varasm.c (elf_record_gcc_switches): Cast second argument of ASM_OUTPUT_SKIP to unsigned HOST_WIDE_INT. ........ r119745 | schwab | 2006-12-11 11:11:38 -0800 (Mon, 11 Dec 2006) | 2 lines Fix changelog entry. ........ r119746 | dnovillo | 2006-12-11 12:15:53 -0800 (Mon, 11 Dec 2006) | 25 lines * tree-ssa-operands.h (create_ssa_artificial_load_stmt): Rename from create_ssa_artficial_load_stmt. Update all users. * tree-into-ssa.c (register_new_def): Make static. * tree.c (is_global_var): Handle SSA_NAMEs. * tree.h (SSA_NAME_IS_DEFAULT_DEF): Define. Update all users that used to call gimple_default_def. * tree-ssa-operands.c (push_stmt_changes): New. (pop_stmt_changes): New. Update every pass that modifies statements to bracket modifications with push_stmt_changes/pop_stmt_changes. (discard_stmt_changes): New. * tree-ssa-dom.c (stmts_to_rescan): Change to stack of 'tree *' instead of 'tree'. Update all users. * tree-flow-inline.h (zero_imm_uses_p): New. (symbol_mem_tag): New. Update every function that used to access the annotation directly. (set_symbol_mem_tag): Likewise. * tree-dfa.c (dump_variable): Always show the escape mask. (mark_symbols_for_renaming): Rename from mark_new_vars_to_rename. Update all users. Only mark to rename naked symbols in real and virtual operands. ........ r119748 | rakdver | 2006-12-11 13:29:44 -0800 (Mon, 11 Dec 2006) | 5 lines * loop-iv.c (implies_p): Require the mode of the operands to be scalar. ........ r119749 | bkoz | 2006-12-11 14:17:09 -0800 (Mon, 11 Dec 2006) | 9 lines 2006-12-11 Benjamin Kosnik <bkoz@redhat.com> * acinclude.m4 (GLIBCXX_CHECK_ICONV_SUPPORT): Remove link test, ie AC_CHECK_LIB for libiconv. Instead, use bits of AM_ICONV. * configure: Regenerate. * scripts/testsuite_flags.in (cxxldflags): Add LIBICONV bits. ........ git-svn-id: https://gcc.gnu.org/svn/gcc/branches/fixed-point@119752 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgfortran')
-rw-r--r--libgfortran/ChangeLog27
-rw-r--r--libgfortran/c99_protos.h15
-rw-r--r--libgfortran/config.h.in9
-rwxr-xr-xlibgfortran/configure231
-rw-r--r--libgfortran/configure.ac3
-rw-r--r--libgfortran/intrinsics/c99_functions.c50
-rw-r--r--libgfortran/io/transfer.c58
-rw-r--r--libgfortran/libgfortran.h1
-rw-r--r--libgfortran/runtime/error.c4
9 files changed, 366 insertions, 32 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 8844e9ad336..6d9739a6f8c 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,30 @@
+2006-12-06 Francois-Xavier Coudert <coudert@clipper.ens.fr>
+
+ PR libfortran/29810
+ * intrinsics/c99_functions.c (fmodf, fmodl, floorl): New functions.
+ * c99_protos.h (fmodf, fmodl, floorl): New prototypes.
+ * configure.ac: Check for fmodf, fmod and fmodl.
+ * configure: Regenerate.
+ * config.h.in: Regenerate.
+
+2006-12-06 Thomas Koenig <Thomas.Koenig@online.de>
+
+ PR libfortran/30009
+ PR libfortran/30056
+ * libgfortran.h: Add ERROR_CORRUPT_FILE to error_codes.
+ * runtime/error.c (translate_error): Add handling for
+ ERROR_CORRUPT_FILE.
+ * io/transfer.c (read_block_direct): Add comment about
+ EOR for stream files.
+ Remove test for no bytes left for direct access files.
+ Generate an ERROR_SHORT_RECORD if the read was short.
+ For unformatted sequential files: Check endfile condition.
+ Remove test for no bytes left. End of file here means
+ that the file structure has been corrupted. Pre-position
+ the file for the next record in case of error.
+ (write_buf): Whitespace fix. Subtract the number of bytes
+ written from bytes_left.
+
2006-12-04 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/30005
diff --git a/libgfortran/c99_protos.h b/libgfortran/c99_protos.h
index 26c0aa2b547..369299dc77d 100644
--- a/libgfortran/c99_protos.h
+++ b/libgfortran/c99_protos.h
@@ -100,6 +100,21 @@ extern float fabsf(float);
extern float floorf(float);
#endif
+#ifndef HAVE_FLOORL
+#define HAVE_FLOORL 1
+extern long double floorl (long double x);
+#endif
+
+#ifndef HAVE_FMODF
+#define HAVE_FMODF 1
+extern float fmodf (float x, float y);
+#endif
+
+#ifndef HAVE_FMODL
+#define HAVE_FMODL 1
+extern long double fmodl (long double x, long double y);
+#endif
+
#ifndef HAVE_FREXPF
#define HAVE_FREXPF 1
extern float frexpf(float, int *);
diff --git a/libgfortran/config.h.in b/libgfortran/config.h.in
index a198d42c7bb..11f7cc6db75 100644
--- a/libgfortran/config.h.in
+++ b/libgfortran/config.h.in
@@ -327,6 +327,15 @@
/* libm includes floorl */
#undef HAVE_FLOORL
+/* libm includes fmod */
+#undef HAVE_FMOD
+
+/* libm includes fmodf */
+#undef HAVE_FMODF
+
+/* libm includes fmodl */
+#undef HAVE_FMODL
+
/* Define to 1 if you have the `fork' function. */
#undef HAVE_FORK
diff --git a/libgfortran/configure b/libgfortran/configure
index 2410a3d341c..d775aec3935 100755
--- a/libgfortran/configure
+++ b/libgfortran/configure
@@ -14893,6 +14893,237 @@ _ACEOF
fi
+echo "$as_me:$LINENO: checking for fmodf in -lm" >&5
+echo $ECHO_N "checking for fmodf in -lm... $ECHO_C" >&6
+if test "${ac_cv_lib_m_fmodf+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm $LIBS"
+if test x$gcc_no_link = xyes; then
+ { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
+echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char fmodf ();
+int
+main ()
+{
+fmodf ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_m_fmodf=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_m_fmodf=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_m_fmodf" >&5
+echo "${ECHO_T}$ac_cv_lib_m_fmodf" >&6
+if test $ac_cv_lib_m_fmodf = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FMODF 1
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for fmod in -lm" >&5
+echo $ECHO_N "checking for fmod in -lm... $ECHO_C" >&6
+if test "${ac_cv_lib_m_fmod+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm $LIBS"
+if test x$gcc_no_link = xyes; then
+ { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
+echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char fmod ();
+int
+main ()
+{
+fmod ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_m_fmod=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_m_fmod=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_m_fmod" >&5
+echo "${ECHO_T}$ac_cv_lib_m_fmod" >&6
+if test $ac_cv_lib_m_fmod = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FMOD 1
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for fmodl in -lm" >&5
+echo $ECHO_N "checking for fmodl in -lm... $ECHO_C" >&6
+if test "${ac_cv_lib_m_fmodl+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm $LIBS"
+if test x$gcc_no_link = xyes; then
+ { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
+echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char fmodl ();
+int
+main ()
+{
+fmodl ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_m_fmodl=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_m_fmodl=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_m_fmodl" >&5
+echo "${ECHO_T}$ac_cv_lib_m_fmodl" >&6
+if test $ac_cv_lib_m_fmodl = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FMODL 1
+_ACEOF
+
+fi
+
echo "$as_me:$LINENO: checking for frexpf in -lm" >&5
echo $ECHO_N "checking for frexpf in -lm... $ECHO_C" >&6
if test "${ac_cv_lib_m_frexpf+set}" = set; then
diff --git a/libgfortran/configure.ac b/libgfortran/configure.ac
index f8f1d3e93c5..23e80fda38b 100644
--- a/libgfortran/configure.ac
+++ b/libgfortran/configure.ac
@@ -241,6 +241,9 @@ AC_CHECK_LIB([m],[cabsl],[AC_DEFINE([HAVE_CABSL],[1],[libm includes cabsl])])
AC_CHECK_LIB([m],[floorf],[AC_DEFINE([HAVE_FLOORF],[1],[libm includes floorf])])
AC_CHECK_LIB([m],[floor],[AC_DEFINE([HAVE_FLOOR],[1],[libm includes floor])])
AC_CHECK_LIB([m],[floorl],[AC_DEFINE([HAVE_FLOORL],[1],[libm includes floorl])])
+AC_CHECK_LIB([m],[fmodf],[AC_DEFINE([HAVE_FMODF],[1],[libm includes fmodf])])
+AC_CHECK_LIB([m],[fmod],[AC_DEFINE([HAVE_FMOD],[1],[libm includes fmod])])
+AC_CHECK_LIB([m],[fmodl],[AC_DEFINE([HAVE_FMODL],[1],[libm includes fmodl])])
AC_CHECK_LIB([m],[frexpf],[AC_DEFINE([HAVE_FREXPF],[1],[libm includes frexpf])])
AC_CHECK_LIB([m],[frexp],[AC_DEFINE([HAVE_FREXP],[1],[libm includes frexp])])
AC_CHECK_LIB([m],[frexpl],[AC_DEFINE([HAVE_FREXPL],[1],[libm includes frexpl])])
diff --git a/libgfortran/intrinsics/c99_functions.c b/libgfortran/intrinsics/c99_functions.c
index 96b5ef88851..7278169684f 100644
--- a/libgfortran/intrinsics/c99_functions.c
+++ b/libgfortran/intrinsics/c99_functions.c
@@ -294,6 +294,15 @@ floorf(float x)
}
#endif
+#ifndef HAVE_FMODF
+#define HAVE_FMODF 1
+float
+fmodf (float x, float y)
+{
+ return (float) fmod (x, y);
+}
+#endif
+
#ifndef HAVE_FREXPF
#define HAVE_FREXPF 1
float
@@ -592,6 +601,47 @@ log10l(long double x)
#endif
+#ifndef HAVE_FLOORL
+#define HAVE_FLOORL 1
+long double
+floorl (long double x)
+{
+ /* Zero, possibly signed. */
+ if (x == 0)
+ return x;
+
+ /* Large magnitude. */
+ if (x > DBL_MAX || x < (-DBL_MAX))
+ return x;
+
+ /* Small positive values. */
+ if (x >= 0 && x < DBL_MIN)
+ return 0;
+
+ /* Small negative values. */
+ if (x < 0 && x > (-DBL_MIN))
+ return -1;
+
+ return floor (x);
+}
+#endif
+
+
+#ifndef HAVE_FMODL
+#define HAVE_FMODL 1
+long double
+fmodl (long double x, long double y)
+{
+ if (y == 0.0L)
+ return 0.0L;
+
+ /* Need to check that the result has the same sign as x and magnitude
+ less than the magnitude of y. */
+ return x - floorl (x / y) * y;
+}
+#endif
+
+
#if !defined(HAVE_CABSF)
#define HAVE_CABSF 1
float
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index 4270d61e693..163557d49b3 100644
--- a/libgfortran/io/transfer.c
+++ b/libgfortran/io/transfer.c
@@ -374,7 +374,8 @@ read_block_direct (st_parameter_dt *dtp, void *buf, size_t *nbytes)
if (to_read_record != have_read_record)
{
- /* Short read, e.g. if we hit EOF. */
+ /* Short read, e.g. if we hit EOF. For stream files,
+ we have to set the end-of-file condition. */
generate_error (&dtp->common, ERROR_END, NULL);
return;
}
@@ -388,13 +389,6 @@ read_block_direct (st_parameter_dt *dtp, void *buf, size_t *nbytes)
short_record = 1;
to_read_record = (size_t) dtp->u.p.current_unit->bytes_left;
*nbytes = to_read_record;
-
- if (dtp->u.p.current_unit->bytes_left == 0)
- {
- dtp->u.p.current_unit->endfile = AT_ENDFILE;
- generate_error (&dtp->common, ERROR_END, NULL);
- return;
- }
}
else
@@ -411,10 +405,12 @@ read_block_direct (st_parameter_dt *dtp, void *buf, size_t *nbytes)
return;
}
- if (to_read_record != *nbytes) /* Short read, e.g. if we hit EOF. */
+ if (to_read_record != *nbytes)
{
+ /* Short read, e.g. if we hit EOF. Apparently, we read
+ more than was written to the last record. */
*nbytes = to_read_record;
- generate_error (&dtp->common, ERROR_END, NULL);
+ generate_error (&dtp->common, ERROR_SHORT_RECORD, NULL);
return;
}
@@ -430,6 +426,12 @@ read_block_direct (st_parameter_dt *dtp, void *buf, size_t *nbytes)
until the request has been fulfilled or the record has run out
of continuation subrecords. */
+ if (dtp->u.p.current_unit->endfile == AT_ENDFILE)
+ {
+ generate_error (&dtp->common, ERROR_END, NULL);
+ return;
+ }
+
/* Check whether we exceed the total record length. */
if (dtp->u.p.current_unit->flags.has_recl)
@@ -453,25 +455,7 @@ read_block_direct (st_parameter_dt *dtp, void *buf, size_t *nbytes)
{
to_read_subrecord = (size_t) dtp->u.p.current_unit->bytes_left_subrecord;
to_read_record -= to_read_subrecord;
-
- if (dtp->u.p.current_unit->bytes_left_subrecord == 0)
- {
- if (dtp->u.p.current_unit->continued)
- {
- /* Skip to the next subrecord */
- next_record_r_unf (dtp, 0);
- us_read (dtp, 1);
- continue;
- }
- else
- {
- dtp->u.p.current_unit->endfile = AT_ENDFILE;
- generate_error (&dtp->common, ERROR_END, NULL);
- return;
- }
- }
}
-
else
{
to_read_subrecord = to_read_record;
@@ -490,11 +474,15 @@ read_block_direct (st_parameter_dt *dtp, void *buf, size_t *nbytes)
have_read_record += have_read_subrecord;
- if (to_read_subrecord != have_read_subrecord) /* Short read,
- e.g. if we hit EOF. */
+ if (to_read_subrecord != have_read_subrecord)
+
{
+ /* Short read, e.g. if we hit EOF. This means the record
+ structure has been corrupted, or the trailing record
+ marker would still be present. */
+
*nbytes = have_read_record;
- generate_error (&dtp->common, ERROR_END, NULL);
+ generate_error (&dtp->common, ERROR_CORRUPT_FILE, NULL);
return;
}
@@ -507,6 +495,11 @@ read_block_direct (st_parameter_dt *dtp, void *buf, size_t *nbytes)
}
else
{
+ /* Let's make sure the file position is correctly set for the
+ next read statement. */
+
+ next_record_r_unf (dtp, 0);
+ us_read (dtp, 0);
generate_error (&dtp->common, ERROR_SHORT_RECORD, NULL);
return;
}
@@ -637,7 +630,8 @@ write_buf (st_parameter_dt *dtp, void *buf, size_t nbytes)
return FAILURE;
}
- dtp->u.p.current_unit->strm_pos += (gfc_offset) nbytes;
+ dtp->u.p.current_unit->strm_pos += (gfc_offset) nbytes;
+ dtp->u.p.current_unit->bytes_left -= (gfc_offset) nbytes;
return SUCCESS;
diff --git a/libgfortran/libgfortran.h b/libgfortran/libgfortran.h
index 644a0adc784..c6b31ed908a 100644
--- a/libgfortran/libgfortran.h
+++ b/libgfortran/libgfortran.h
@@ -416,6 +416,7 @@ typedef enum
ERROR_ALLOCATION,
ERROR_DIRECT_EOR,
ERROR_SHORT_RECORD,
+ ERROR_CORRUPT_FILE,
ERROR_LAST /* Not a real error, the last error # + 1. */
}
error_codes;
diff --git a/libgfortran/runtime/error.c b/libgfortran/runtime/error.c
index 122f6d14bab..35955644ba5 100644
--- a/libgfortran/runtime/error.c
+++ b/libgfortran/runtime/error.c
@@ -440,6 +440,10 @@ translate_error (int code)
p = "I/O past end of record on unformatted file";
break;
+ case ERROR_CORRUPT_FILE:
+ p = "Unformatted file structure has been corrupted";
+ break;
+
default:
p = "Unknown error code";
break;