Commit Graph

86857 Commits

Author SHA1 Message Date
Arnaud Charlet c4394c1546 s-osinte-vxworks6.ads: Removed, merged with s-osinte-vxworks.ads/.adb
* s-osinte-vxworks6.ads: Removed, merged with s-osinte-vxworks.ads/.adb
	* s-vxwext.ads, s-vxwext-kernel.ads, s-vxwext-rtp.ads,
	s-vxwext-rtp.adb: New files.

	* s-taprop-vxworks.adb, s-osinte-vxworks.ads, s-osinte-vxworks.adb: 
	Minor updates to accomodate changes above.

From-SVN: r134005
2008-04-08 08:43:49 +02:00
Eric Botcazou 770db697e6 s-osinte-linux-alpha.ads, [...]: Removed.
2008-04-08  Eric Botcazou  <ebotcazou@adacore.com>
	    Arnaud Charlet  <charlet@adacore.com>

	* s-osinte-linux-alpha.ads, s-osinte-linux-hppa.ads: Removed.

	s-taspri-posix-noaltstack.ads, s-linux.ads, s-linux-alpha.ads,
	s-linux-hppa.ads: New files. Disable alternate stack on ia64-hpux.

	* s-osinte-lynxos-3.ads,
	(Alternate_Stack): Remove when not needed. Simplify declaration
	otherwise.
	(Alternate_Stack_Size): New constant.

	s-osinte-mingw.ads, s-taprop-mingw.adb: Code clean up: avoid use of
	'Unrestricted_Access.

	* s-osinte-hpux.ads, s-osinte-solaris-posix.ads, s-osinte-aix.ads,
	s-osinte-lynxos.ads, s-osinte-freebsd.ads s-osinte-darwin.ads,
	s-osinte-tru64.ads, s-osinte-irix.ads, s-osinte-linux.ads,
	s-osinte-solaris.ads, s-osinte-vms.ads
	(SA_ONSTACK): New constant.
	(stack_t): New record type.
	(sigaltstack): New imported function.
	(Alternate_Stack): New imported variable.
	(Alternate_Stack_Size): New constant.

	* system-linux-x86_64.ads: (Stack_Check_Probes): Set to True.

	* s-taspri-lynxos.ads, s-taspri-solaris.ads, s-taspri-tru64.ads,
	s-taspri-hpux-dce.ads (Task_Address): New subtype of System.Address
	(Task_Address_Size): New constant size of System.Address
	(Alternate_Stack_Size): New constant.

	* s-taprop-posix.adb, s-taprop-linux.adb (Get_Stack_Attributes): Delete.
	(Enter_Task): Do not notify stack to System.Stack_Checking.Operations.
	Establish the alternate stack if the platform makes use of n alternate
	signal stack for stack overflows.
	(Create_Task): Take into account the alternate stack in the stack size.
	(Initialize): Save the address of the alternate stack into the ATCB for
	the environment task.
	(Create_Task): Fix assertions for NPTL library (vs old LinuxThreads).

	* s-parame.adb (Minimum_Stack_Size): Increase value to 16K to

	* system-linux-x86.ads: (Stack_Check_Probes): Set to True.

	* s-intman-posix.adb: 
	(Initialize): Set SA_ONSTACK for SIGSEGV if the platform makes use of an
	alternate signal stack for stack overflows.

	* init.c (__gnat_adjust_context_for_raise, Linux version): On i386 and
	x86-64, adjust the saved value of the stack pointer if the signal was
	raised by a stack checking probe.
	(HP-UX section): Use global __gnat_alternate_stack as signal handler
	stack and only for SIGSEGV.
	(Linux section): Likewise on x86 and x86-64.
	[VxWorks section]
	(__gnat_map_signal): Now static.
	(__gnat_error_handler): Not static any more.
	(__gnat_adjust_context_for_raise): New function. Signal context
	adjustment for PPC && !VTHREADS && !RTP, as required by the zcx
	propagation circuitry.
	(__gnat_error_handler): Second argument of a sigaction handler is a
	pointer, not an int, and is unused.
	Adjust signal context before mapping to exception.
	Install signal handlers for LynxOS case.

	* s-taskin.ads (Common_ATCB): New field Task_Alternate_Stack.
	(Task_Id): Set size to Task_Address_Size
	(To_Task_id): Unchecked convert from Task_Address vice System.Address
	(To_Address): Unchecked convert to Task_Address vice System.Address

	* s-tassta.adb (Task_Wrapper): Define the alternate stack and save its
	address into the ATCB if the platform makes use of an alternate signal
	stack for stack overflows.
	(Free_Task): Add call to Finalize_Attributes_Link.
	Add argument Relative_Deadline to pass the value specified for
	the task. This is not yet used for any target.

	* s-tassta.ads (Create_Task): Add argument Relative_Deadline to pass
	the value specified for the task.

From-SVN: r134004
2008-04-08 08:43:15 +02:00
Pascal Obry 42c3898c1d g-sercom.ads, [...] (Data_Rate): Add B115200.
2008-04-08  Pascal Obry  <obry@adacore.com>

	* g-sercom.ads, g-sercom.adb (Data_Rate): Add B115200.
	(Stop_Bits_Number): New type.
	(Parity_Check): Likewise.
	(Set): Add parameter to set the number of stop bits and
	the parity. Parameter timeout is now a duration instead
	of a plain integer.

	* g-sercom-linux.adb:
	Implement the stop bits and parity support for GNU/Linux.
	Fix handling of timeout, it must be given in tenth of seconds.
	
	* g-sercom-mingw.adb:
	Implement the stop bits and parity support for Windows.
	Use new s-win32.ads unit instead of declaring Win32 services
	directly into this body.
	Update handling of timeout as now a duration.

	* s-win32.ads, s-winext.ads: New files.

From-SVN: r134003
2008-04-08 08:42:41 +02:00
James E Wilson e68c63e380 Fix uninit warning reported by Andrew Pinski.
pt.c (tsubst_copy, case SIZEOF_EXPR): Initialize len.

From-SVN: r134001
2008-04-07 18:57:48 -07:00
GCC Administrator 48b350ad55 Daily bump.
From-SVN: r133998
2008-04-08 00:17:30 +00:00
Jan Hubicka 3e02976304 function.h (rtl): Rename to x_rtl.
* function.h (rtl): Rename to x_rtl.
	(crtl): New define.
	(return_label, naked_return_label, stack_slot_list, parm_birth_insn,
	frame_offset, stack_check_probe_note, arg_pointer_save_area,
	used_temp_slots avail_temp_slots, temp_slot_level,
	nonlocal_goto_handler_labels): Update accesstors.
	(rtl): New global variable.
	(struct function): Move some fileds to rtl_data.
	(get_arg_pointer_save_area): Update prototype.
	* builtins.c (expand_builtin_setjmp_receiver): Update call of
	get_arg_pointer_save_area.
	* expr.c (init_expr): Update
	* function.c (get_frame_size): Update
	(assign_stack_local): Update
	(expand_function_end): Update.
	(get_art_pointer_save_area): Update
	* function.h 
	* emit-rtl.c (rtl): Declare.
	(regno_reg_rtx): Declare.
	(first_insn, last_insn, cur_insn_uid, last_location, first_label_num):
	Update.
	(gen_reg_rtx): Update.
	* varasm.c (n_deferred_constatns): Update accestor.
	(init_varasm_status): Do not allocate varasm_status.
	(force_const_mem, get_pool_size, output_constant_pool): Update.
	* stmt.c (force_label_rtx): Do not use x_ prefixes.
	(expand_nl_goto_receiver): Update get_arg_pointer_save_area.
	* m32c/m32.c (m32c_leaf_function_p, m32c_function_needs_enter): Update.
	* sparc/sparc.h (INIT_EXPANDERS): Update.
	* ia64/ia64.h (INIT_EXPANDERS): Update.

From-SVN: r133994
2008-04-07 23:52:32 +00:00
Andy Hutchinson 47583040f7 PR target/34210 PR target/35508 * config.host (avr-*-*): Add avr cpu_type and avr tmake_file. * config/t-avr: New file. Build 16bit libgcc functions.
From-SVN: r133993
2008-04-07 23:15:35 +00:00
Ian Lance Taylor 06407e30fd Makefile.def: check-gold depends upon all-binutils.
* Makefile.def: check-gold depends upon all-binutils.
	* Makefile.in: Regenerate.

From-SVN: r133992
2008-04-07 22:36:37 +00:00
Jerry DeLisle 7286c37699 PR fortran/25829 28655
2008-04-07  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR fortran/25829 28655
	* gfortran.dg/write_check2.f90: Update dg-error.
	* gfortran.dg/io_constraints_1.f90: Udate dg-error.

From-SVN: r133991
2008-04-07 22:10:41 +00:00
James E Wilson c3be259842 Fix bug Joern Rennecke reported.
* reload.c (push_secondary_reload): Add missing break to for loop.

From-SVN: r133990
2008-04-07 15:09:07 -07:00
Jerry DeLisle d06b3496f6 PR fortran/25829 28655
2008-04-07  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR fortran/25829 28655
	* io.c (io_tag): Add new tags for decimal, encoding, asynchronous,
	round, sign, and id. (match_open_element): Match new tags.
	(gfc_resolve_open): Resolve new tags. (gfc_match_open): Enable encoding
	for DEFAULT only. Update error messages. (match_dt_element): Fix match
	tag for asynchronous. Update error messages. (gfc_free_inquire): Free
	new expressions. (match_inquire_element): Match new tags.
	(gfc_match_inquire): Add constraint for ID and PENDING.
	(gfc_resolve_inquire): Resolve new tags.
	* trans-io.c (gfc_trans_inquire): Clean up whitespace and fix setting of
	mask for ID parameter.
	* ioparm.def: Fix order of parameters for pending, round, and sign.
	NOTE: These must line up with the definitions in libgfortran/io/io.h. or
	things don't work.

From-SVN: r133989
2008-04-07 22:07:44 +00:00
Jerry DeLisle 931149a6b7 PR fortran/25829 28655
2008-04-07  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR fortran/25829 28655
	* io/open.c (edit_modes): Set flags.async. (new_unit) Set flags.async
	and flags.status. (st_open): Initialize flags.async.
	* io/list_read.c (read_charactor): Use delim_status instead of
	flags.delim.
	* io/read.c (read_x): Use pad_status instead of flags.pad.
	* io/inquire.c (inquire_via_unit): Add new checks.
	(inquire_via_filename): Likewise.
	* io/io.h (st_parameter_inquire): Add new flags.
	(st_parameter_dt): Likewise.
	* io/unit.c (get_internal_unit): Set flags.async. (init_units): Set
	flags.async.
	* io/transfer.c: Add delim and pad option arrays. (read_sf): Use
	pad_status instead of flags.pad. (read_block): Likewise.
	(data_transfer_init): Set flags.async and add checks.
	* io/write.c (write_character): Use delim_status.
	(list_formatted_write_scalar): Likewise. (nml_write_obj): Likewise.
	(namelist_write): Likewise.

From-SVN: r133988
2008-04-07 22:05:52 +00:00
Jason Merrill c2b58ba219 re PR c++/35734 (ICE with copy constructor in derived class)
PR c++/35734
        * class.c (type_has_user_nondefault_constructor): A template
        counts as a nondefault constructor.

From-SVN: r133987
2008-04-07 16:50:21 -04:00
Aurelien Jarno d8ec5bf231 Makefile.in: Add make ifeq define for mips/mipsel support.
2008-04-07  Aurelien Jarno  <aurelien@aurel32.net>
            Xavier Grave  <grave@ipno.in2p3.fr>

        * Makefile.in: Add make ifeq define for mips/mipsel support.
        * g-soccon-linux-mips.ads, system-linux-mipsel.ads, 
        system-linux-mips.ads: New files.

Co-Authored-By: Xavier Grave <grave@ipno.in2p3.fr>

From-SVN: r133986
2008-04-07 20:08:33 +00:00
Peter Bergner 46b71b0354 PR middle-end/PR28690
PR middle-end/PR28690
	* rtlanal.c: Update copyright years.
	(commutative_operand_precedence): Give SYMBOL_REF's the same precedence
	as REG_POINTER and MEM_POINTER operands.
	* emit-rtl.c (gen_reg_rtx_and_attrs): New function.
	(set_reg_attrs_from_value): Call mark_reg_pointer as appropriate.
	* rtl.h (gen_reg_rtx_and_attrs): Add prototype for new function.
	* gcse.c: Update copyright years.
	(pre_delete): Call gen_reg_rtx_and_attrs.
	(hoist_code): Likewise.
	(build_store_vectors): Likewise.
	(delete_store): Likewise.
	* loop-invariant.c (move_invariant_reg): Likewise.
	Update copyright years.

From-SVN: r133985
2008-04-07 12:36:59 -05:00
Uros Bizjak 64ef8953e3 i386.md ("*sse_prologue_save_insn"): Use braced output control string instead of quoted.
* config/i386/i386.md ("*sse_prologue_save_insn"): Use braced output
        control string instead of quoted.

From-SVN: r133984
2008-04-07 18:54:00 +02:00
Kenneth Zadeck 84159bd8fc 2008-04-07 Kenneth Zadeck <zadeck@naturalbridge.com>
doc/rtl.texi: Rewrite of subreg section.

From-SVN: r133982
2008-04-07 15:40:43 +00:00
Kai Tietz 8502420b67 i386.c (legitimize_pic_address): Add treating of dllimport SYM_REF's.
2008-04-07  Kai Tietz  <kai.tietz@onevision.com>

        PR/35842
        * config/i386/i386.c (legitimize_pic_address): Add treating
        of dllimport SYM_REF's.
        (legitimize_dllimport_symbol): Add prototype.

From-SVN: r133981
2008-04-07 14:44:14 +02:00
Kai Tietz cd035e343a pr35842.c: New.
PR/35842
	* gcc.dg/torture/pr35842.c: New.

From-SVN: r133980
2008-04-07 14:40:43 +02:00
Aurelien Jarno 7437c8d449 sysdep.c: add __GLIBC__ to the #ifdef preprocessor macros to detect systems using GNU libc.
2008-04-07  Aurelien Jarno  <aurelien@aurel32.net>

        * sysdep.c: add __GLIBC__ to the #ifdef preprocessor macros to
        detect systems using GNU libc.
        * gsocket.h: ditto.
        * socket.c: ditto.
        * adaint.c: ditto.
        * link.c: ditto.

From-SVN: r133979
2008-04-07 12:31:41 +00:00
Aurelien Jarno 1dab7b355e s-osinte-linux-kfreebsd.ads (SC_NPROCESSORS_ONLN): New constant constant for sysconf call.
2008-04-07  Aurelien Jarno  <aurelien@aurel32.net>

        * s-osinte-linux-kfreebsd.ads (SC_NPROCESSORS_ONLN): New
        constant constant for sysconf call.
        (bit_field): New packed boolean type used by cpu_set_t.
        (cpu_set_t): New type corresponding to the C type with
        the same name. Note that on the Ada side we use a bit
        field array for the affinity mask. There is not need
        for the C macro for setting individual bit.
        (pthread_setaffinity_np): New imported routine.
        * Makefile.in: Use s-tasinf-linux.ads and s-tasinf-linux.adb
        on GNU/kFreeBSD.

From-SVN: r133978
2008-04-07 12:30:03 +00:00
Eric Botcazou 39fcde8ff2 fold-const.c (fold): New case.
* fold-const.c (fold) <ARRAY_REF>: New case.  Try to fold constant
	reference in constructor with non self-referential type.

ada/
	* utils2.c (build_binary_op): Fold ARRAY_REF and ARRAY_RANGE_REF too.

From-SVN: r133977
2008-04-07 09:47:43 +00:00
Eric Botcazou 9dd9bf80a8 Removal of Return with Depressed Stack Pointer support
Removal of Return with Depressed Stack Pointer support
	* tree.h (TYPE_RETURNS_STACK_DEPRESSED): Delete.
	(ECF_SP_DEPRESSED): Likewise.
	(ECF_LIBCALL_BLOCK, ECF_NOVOPS): Adjust.
	* calls.c (emit_call_1): Do not test ECF_SP_DEPRESSED.
	(flags_from_decl_or_type): Do not test TYPE_RETURNS_STACK_DEPRESSED.
	(expand_call): Do not test ECF_SP_DEPRESSED.
	* dse.c (dse_step0): Do not test TYPE_RETURNS_STACK_DEPRESSED.
	* function.c (keep_stack_depressed): Delete.
	(handle_epilogue_set): Likewise.
	(update_epilogue_consts): Likewise.
	(emit_equiv_load): Likewise.
	(thread_prologue_and_epilogue_insns): Remove support for Return with
	Depressed Stack Pointer.
	* print-tree.c (print_node): Do not test TYPE_RETURNS_STACK_DEPRESSED.

ada/
	* gigi.h (create_subprog_type): Remove returns_with_dsp parameter.
	* decl.c (gnat_to_gnu_entity): Adjust for above new prototype.
	* utils.c (create_subprog_type): Remove returns_with_dsp parameter.
	* trans.c (gnat_to_gnu) <N_Return_Statement>: Remove code dealing with
	Return by Depressed Stack Pointer.

From-SVN: r133976
2008-04-07 09:37:51 +00:00
Johannes Singler f9985df51b re PR libstdc++/35588 ([parallel mode] parallel std::sort and bind())
2008-04-07  Johannes Singler  <singler@ira.uka.de>

         * include/parallel/multiway_merge.h:
           Moved decisions to compiletime instead of runtime.
         * include/parallel/losertree.h:
           Removed obsolete variants, added variant that uses pointers
           in the loser tree.
         * include/parallel/types.h:
           Remove obsolete settings options from enum.
         * include/parallel/features.h:
           Remove obsolete compile-time switches.
         * include/parallel/compiletime_settings.h:
           Remove obsolete variant that copies back *after* sorting.
         * include/parallel/tags.h:
           Add one new tag for compile-time switch.
         * include/parallel/merge.h:
           Adapt to changes in multiway_merge.h.
         * include/parallel/multiway_mergesort.h:
           Adapt to changes in multiway_merge.h.
           Factor out splitting variants.
           Remove obsolete variant that copies back *after* sorting.
         * include/parallel/sort.h:
           Adapt to changes in multiway_mergesort.h.
         * testsuite/25_algorithms/sort/35588.cc:
           Added test case from / for PR 35588.

From-SVN: r133975
2008-04-07 08:27:34 +00:00
GCC Administrator 1d4cd3d0b5 Daily bump.
From-SVN: r133972
2008-04-07 00:17:32 +00:00
Richard Guenther 3633df5a3d re PR middle-end/35400 (-Wtype-limits -O2 causes ICE tree check: expected ssa_name, have addr_expr in get_value_range, at tree-vrp.c:469)
2008-04-06  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/35400
	* tree-vrp.c (vrp_evaluate_conditional): Only query value-range
	information from SSA_NAMEs.

	* gcc.dg/torture/pr35400.c: New testcase.
	* g++.dg/torture/pr35400.C: Likewise.

From-SVN: r133967
2008-04-06 21:20:49 +00:00
Anatoly Sokolov 5dc7780891 avr.h (avr_mega_p): Remove declaration.
* config/avr/avr.h (avr_mega_p): Remove declaration.
	(AVR_MEGA): Remove macro.
	* config/avr/avr.c (avr_mega_p): Remove variable.
	(avr_override_options): Remove inicializion of avr_mega_p.
	Use AVR_HAVE_JMP_CALL instead of AVR_MEGA.
	(print_operand): Use AVR_HAVE_JMP_CALL instead of AVR_MEGA.
	(avr_jump_mode): (Ditto.).
	(avr_output_progmem_section_asm_op): (Ditto.).
	(avr_asm_init_sections): (Ditto.).
	(avr_asm_init_sections): (Ditto.).
	(avr_rtx_costs): (Ditto.).
	* config/avr/avr.md: (Ditto.).
	* config/avr/avr.h: Use '__AVR_HAVE_JMP_CALL__' instead of 
	'__AVR_MEGA__'.

From-SVN: r133966
2008-04-07 00:54:32 +04:00
Paul Thomas 679d963737 Index...
Index: gcc/fortran/trans-stmt.c
===================================================================
*** gcc/fortran/trans-stmt.c	(revision 133728)
--- gcc/fortran/trans-stmt.c	(working copy)
*************** gfc_trans_where_2 (gfc_code * code, tree
*** 3540,3547 ****
  
  /* Translate a simple WHERE construct or statement without dependencies.
     CBLOCK is the "then" clause of the WHERE statement, where CBLOCK->EXPR
!    is the mask condition, and EBLOCK if non-NULL is the "else" clause.
!    Currently both CBLOCK and EBLOCK are restricted to single assignments.  */
  
  static tree
  gfc_trans_where_3 (gfc_code * cblock, gfc_code * eblock)
--- 3540,3550 ----
  
  /* Translate a simple WHERE construct or statement without dependencies.
     CBLOCK is the "then" clause of the WHERE statement, where CBLOCK->EXPR
!    is the mask condition, and EBLOCK if non-NULL is the "then" clause of
!    the ELSWHERE.  As required by 7.5.3.2, the WHERE and ELSEWHERE are
!    executed with separate loops. It should be noted that the mask expression
!    is evaluated for both loops.  Currently both CBLOCK and EBLOCK are
!    restricted to single assignments.  */
  
  static tree
  gfc_trans_where_3 (gfc_code * cblock, gfc_code * eblock)
*************** gfc_trans_where_3 (gfc_code * cblock, gf
*** 3561,3566 ****
--- 3564,3570 ----
    edst = eblock ? eblock->next->expr : NULL;
    esrc = eblock ? eblock->next->expr2 : NULL;
  
+   /*---------------First do the WHERE part.----------------*/
    gfc_start_block (&block);
    gfc_init_loopinfo (&loop);
  
*************** gfc_trans_where_3 (gfc_code * cblock, gf
*** 3584,3619 ****
    gfc_add_ss_to_loop (&loop, tdss);
    gfc_add_ss_to_loop (&loop, tsss);
  
-   if (eblock)
-     {
-       /* Handle the else clause.  */
-       gfc_init_se (&edse, NULL);
-       gfc_init_se (&esse, NULL);
-       edss = gfc_walk_expr (edst);
-       esss = gfc_walk_expr (esrc);
-       if (esss == gfc_ss_terminator)
- 	{
- 	  esss = gfc_get_ss ();
- 	  esss->next = gfc_ss_terminator;
- 	  esss->type = GFC_SS_SCALAR;
- 	  esss->expr = esrc;
- 	}
-       gfc_add_ss_to_loop (&loop, edss);
-       gfc_add_ss_to_loop (&loop, esss);
-     }
- 
    gfc_conv_ss_startstride (&loop);
    gfc_conv_loop_setup (&loop);
  
    gfc_mark_ss_chain_used (css, 1);
    gfc_mark_ss_chain_used (tdss, 1);
    gfc_mark_ss_chain_used (tsss, 1);
!   if (eblock)
!     {
!       gfc_mark_ss_chain_used (edss, 1);
!       gfc_mark_ss_chain_used (esss, 1);
!     }
! 
    gfc_start_scalarized_body (&loop, &body);
  
    gfc_copy_loopinfo_to_se (&cse, &loop);
--- 3588,3600 ----
    gfc_add_ss_to_loop (&loop, tdss);
    gfc_add_ss_to_loop (&loop, tsss);
  
    gfc_conv_ss_startstride (&loop);
    gfc_conv_loop_setup (&loop);
  
    gfc_mark_ss_chain_used (css, 1);
    gfc_mark_ss_chain_used (tdss, 1);
    gfc_mark_ss_chain_used (tsss, 1);
!  
    gfc_start_scalarized_body (&loop, &body);
  
    gfc_copy_loopinfo_to_se (&cse, &loop);
*************** gfc_trans_where_3 (gfc_code * cblock, gf
*** 3622,3637 ****
    cse.ss = css;
    tdse.ss = tdss;
    tsse.ss = tsss;
-   if (eblock)
-     {
-       gfc_copy_loopinfo_to_se (&edse, &loop);
-       gfc_copy_loopinfo_to_se (&esse, &loop);
-       edse.ss = edss;
-       esse.ss = esss;
-     }
  
    gfc_conv_expr (&cse, cond);
!   gfc_add_block_to_block (&body, &cse.pre);
    cexpr = cse.expr;
  
    gfc_conv_expr (&tsse, tsrc);
--- 3603,3611 ----
    cse.ss = css;
    tdse.ss = tdss;
    tsse.ss = tsss;
  
    gfc_conv_expr (&cse, cond);
!   gfc_add_block_to_block (&block, &cse.pre);
    cexpr = cse.expr;
  
    gfc_conv_expr (&tsse, tsrc);
*************** gfc_trans_where_3 (gfc_code * cblock, gf
*** 3643,3650 ****
--- 3617,3678 ----
    else
      gfc_conv_expr (&tdse, tdst);
  
+   /* Make the assignment on condition 'cond'.  */
+   tstmt = gfc_trans_scalar_assign (&tdse, &tsse, tdst->ts, false, false);  
+   tmp = build3_v (COND_EXPR, cexpr, tstmt, build_empty_stmt ());
+   gfc_add_expr_to_block (&body, tmp);
+   gfc_add_block_to_block (&body, &cse.post);
+ 
+   gfc_trans_scalarizing_loops (&loop, &body);
+   gfc_add_block_to_block (&block, &loop.pre);
+   gfc_add_block_to_block (&block, &loop.post);
+   gfc_cleanup_loop (&loop);
+ 
+ /*---------------Now do the ELSEWHERE.--------------*/
    if (eblock)
      {
+       gfc_init_loopinfo (&loop);
+  
+       /* Handle the condition.  */
+       gfc_init_se (&cse, NULL);
+       css = gfc_walk_expr (cond);
+       gfc_add_ss_to_loop (&loop, css);
+ 
+       /* Handle the then-clause.  */
+       gfc_init_se (&edse, NULL);
+       gfc_init_se (&esse, NULL);
+       edss = gfc_walk_expr (edst);
+       esss = gfc_walk_expr (esrc);
+       if (esss == gfc_ss_terminator)
+ 	{
+ 	  esss = gfc_get_ss ();
+ 	  esss->next = gfc_ss_terminator;
+ 	  esss->type = GFC_SS_SCALAR;
+ 	  esss->expr = esrc;
+ 	}
+       gfc_add_ss_to_loop (&loop, edss);
+       gfc_add_ss_to_loop (&loop, esss);
+ 
+       gfc_conv_ss_startstride (&loop);
+       gfc_conv_loop_setup (&loop);
+ 
+       gfc_mark_ss_chain_used (css, 1);
+       gfc_mark_ss_chain_used (edss, 1);
+       gfc_mark_ss_chain_used (esss, 1);
+ 
+       gfc_start_scalarized_body (&loop, &body);
+ 
+       gfc_copy_loopinfo_to_se (&cse, &loop);
+       gfc_copy_loopinfo_to_se (&edse, &loop);
+       gfc_copy_loopinfo_to_se (&esse, &loop);
+       cse.ss = css;
+       edse.ss = edss;
+       esse.ss = esss;
+ 
+       gfc_conv_expr (&cse, cond);
+       gfc_add_block_to_block (&body, &cse.pre);
+       cexpr = cse.expr;
+ 
        gfc_conv_expr (&esse, esrc);
        if (edss != gfc_ss_terminator && loop.temp_ss != NULL)
          {
*************** gfc_trans_where_3 (gfc_code * cblock, gf
*** 3653,3672 ****
          }
        else
          gfc_conv_expr (&edse, edst);
      }
  
-   tstmt = gfc_trans_scalar_assign (&tdse, &tsse, tdst->ts, false, false);
-   estmt = eblock ? gfc_trans_scalar_assign (&edse, &esse, edst->ts, false, false)
- 		 : build_empty_stmt ();
-   tmp = build3_v (COND_EXPR, cexpr, tstmt, estmt);
-   gfc_add_expr_to_block (&body, tmp);
-   gfc_add_block_to_block (&body, &cse.post);
- 
-   gfc_trans_scalarizing_loops (&loop, &body);
-   gfc_add_block_to_block (&block, &loop.pre);
-   gfc_add_block_to_block (&block, &loop.post);
-   gfc_cleanup_loop (&loop);
- 
    return gfc_finish_block (&block);
  }
  
--- 3681,3700 ----
          }
        else
          gfc_conv_expr (&edse, edst);
+  
+       /* Make the assignment on condition 'NOT.cond'.  */
+       estmt = gfc_trans_scalar_assign (&edse, &esse, edst->ts, false, false);
+       cexpr = fold_build1 (TRUTH_NOT_EXPR, boolean_type_node, cexpr);
+       tmp = build3_v (COND_EXPR, cexpr, estmt, build_empty_stmt ());
+       gfc_add_expr_to_block (&body, tmp);
+       gfc_add_block_to_block (&body, &cse.post);
+ 
+       gfc_trans_scalarizing_loops (&loop, &body);
+       gfc_add_block_to_block (&block, &loop.pre);
+       gfc_add_block_to_block (&block, &loop.post);
+       gfc_cleanup_loop (&loop);
      }
  
    return gfc_finish_block (&block);
  }
  
*************** gfc_trans_where (gfc_code * code)
*** 3698,3708 ****
  					cblock->next->expr2, 0))
  	    return gfc_trans_where_3 (cblock, NULL);
  	}
        else if (!eblock->expr
  	       && !eblock->block
  	       && eblock->next
  	       && eblock->next->op == EXEC_ASSIGN
! 	       && !eblock->next->next)
  	{
            /* A simple "WHERE (cond) x1 = y1 ELSEWHERE x2 = y2 ENDWHERE"
  	     block is dependence free if cond is not dependent on writes
--- 3726,3739 ----
  					cblock->next->expr2, 0))
  	    return gfc_trans_where_3 (cblock, NULL);
  	}
+       /* Since gfc_trans_where_3 evaluates the condition expression
+ 	 twice, do not use it if the condition is not a variable.  */
        else if (!eblock->expr
  	       && !eblock->block
  	       && eblock->next
  	       && eblock->next->op == EXEC_ASSIGN
! 	       && !eblock->next->next
! 	       && cblock->expr->expr_type == EXPR_VARIABLE)
  	{
            /* A simple "WHERE (cond) x1 = y1 ELSEWHERE x2 = y2 ENDWHERE"
  	     block is dependence free if cond is not dependent on writes
Index: gcc/testsuite/gfortran.dg/where_1.f90
===================================================================
*** gcc/testsuite/gfortran.dg/where_1.f90	(revision 0)
--- gcc/testsuite/gfortran.dg/where_1.f90	(revision 0)
***************
*** 0 ****
--- 1,61 ----
+ ! { dg-do run }
+ ! { dg-options "-fdump-tree-original" }
+ ! Tests the fix for PR35759, in which the simple WHERE was logically
+ ! wrong.  7.5.3.2 requires that the WHERE and ELSEWHERE are execute in
+ ! separate loops, whereas gfortran was implementing them as a single
+ ! loop with an 'if' and 'else'.  Since the condition expression is
+ ! evaluated twice with the fix, the use of anything other than a
+ ! variable or parameter array for the condition will trigger the more
+ ! comprehensive implementation of WHERE.  This is checked by the
+ ! check of the declaration of temp.15 in the 'original' code.
+ !
+ ! Contributed by Dick Hendrickson <dick.hendrickson@gmail.com>
+ !
+ program RG0023
+ 
+   integer UDA1L(6)
+   integer ::  UDA1R(6), expected(6) = (/2,0,5,0,3,0/)
+   LOGICAL LDA(5)
+   LOGICAL, parameter :: PDA(5) = (/ (i/2*2 .ne. I, i=1,5) /)
+ 
+   UDA1L(1:6) = 0
+   uda1r = (/1,2,3,4,5,6/)
+   lda = pda
+ 
+   WHERE (lda)                !          expected
+     UDA1L(1:5) = UDA1R(2:6)  !  uda1l = 2,0,4,0,6,0
+   ELSEWHERE
+     UDA1L(2:6) = UDA1R(6:2:-1) !uda1l = 2,0,5,0,3,0
+   ENDWHERE
+ 
+   if (any (uda1l /= expected)) call abort ()
+ 
+   uda1l = 0
+ 
+   WHERE (pda)                !          expected
+     UDA1L(1:5) = UDA1R(2:6)  !  uda1l = 2,0,4,0,6,0
+   ELSEWHERE
+     UDA1L(2:6) = UDA1R(6:2:-1) !uda1l = 2,0,5,0,3,0
+   ENDWHERE
+ 
+   if (any (uda1l /= expected)) call abort ()
+  
+   uda1l = 0
+ 
+   WHERE (lfoo ())            !          expected
+     UDA1L(1:5) = UDA1R(2:6)  !  uda1l = 2,0,4,0,6,0
+   ELSEWHERE
+     UDA1L(2:6) = UDA1R(6:2:-1) !uda1l = 2,0,5,0,3,0
+   ENDWHERE
+ 
+   if (any (uda1l /= expected)) call abort ()
+  
+ contains
+ 
+   function lfoo () result (ltmp)
+     logical ltmp(5)
+     ltmp = lda
+   end function lfoo
+ END
+ ! { dg-final { scan-tree-dump-times "temp.18\\\[5\\\]" 1 "original" } }
+ ! { dg-final { cleanup-tree-dump "original" } }

From-SVN: r133965
2008-04-06 19:37:45 +00:00
Tobias Schlüter 9b8d1901f8 re PR fortran/35832 (Better error message for wrong arguments to I/O statements)
2008-04-06  Tobias Schlter  <tobi@gcc.gnu.org>

PR fortran/35832
fortran/
* io.c (io_tag): Add field 'value'.  Split 'spec' field in
existing io_tags.
(match_etag, match_vtag, match_ltag): Split parsing in two steps
to give better error messages.
testsuite/
* gfortran.dg/io_constraints_2.f90: Adapt to new error message.

From-SVN: r133964
2008-04-06 20:58:34 +02:00
Richard Guenther 8c51effa07 re PR target/35842 (ICE in legitimize_pic_address, at config/i386/i386.c:7666)
2008-04-06  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/35842
	* tree-ssa-address.c (fixed_address_object_p): Adjust to match
	is_gimple_invariant_address.

From-SVN: r133963
2008-04-06 18:04:47 +00:00
Tobias Burnus fbe88ffa16 io.c (check_io_constraints): Add constrains.
2008-04-06  Tobias Burnus  <burnus@net-b.de>

        * io.c (check_io_constraints): Add constrains. ID= requires
        asynchronous= and asynchronous= must be init expression.

2008-04-06  Tobias Burnus  <burnus@net-b.de>

        * gfortran.dg/f2003_io_1.f03: Make standard conform.
        * gfortran.dg/f2003_io_8.f03: New.

From-SVN: r133962
2008-04-06 17:38:33 +02:00
Eric Botcazou 2d091b12a0 decl.c (is_variable_size): Do not unconditionally return false on non-strict alignment platforms.
* decl.c (is_variable_size): Do not unconditionally return false
	on non-strict alignment platforms.

From-SVN: r133961
2008-04-06 13:38:41 +00:00
Francois-Xavier Coudert 3135ce84cc gcc.c (default_compilers): Sync Fortran extensions list with that in fortran/lang-specs.h.
gcc/
	* gcc.c (default_compilers): Sync Fortran extensions list with
	that in fortran/lang-specs.h.
	* doc/invoke.texi: Likewise.
	* dbxout.c (get_lang_number): Use "GNU Fortran" in "GNU F95".
	* dwarf2out.c (gen_compile_unit_die): Likewise.

gcc/fortran/
	* f95-lang.c: Set LANG_HOOKS_NAME to "GNU Fortran".

From-SVN: r133960
2008-04-06 12:36:58 +00:00
Francois-Xavier Coudert daf5afd48f * parse.c (gfc_parse_file): Use gfc_dump_parse_tree.
From-SVN: r133959
2008-04-06 12:18:56 +00:00
François-Xavier Coudert 6c1abb5c58 dump-parse-tree.c: Use fprintf, fputs and fputc instead of gfc_status and gfc_status_char.
* dump-parse-tree.c: Use fprintf, fputs and fputc instead of
	gfc_status and gfc_status_char. Remove gfc_ prefix of the gfc_show_*
	functions and make them static. Add new gfc_dump_parse_tree
	function.
	* gfortran.h (gfc_option_t): Rename verbose into dump_parse_tree.
	(gfc_status, gfc_status_char): Delete prototypes.
	* error.c (gfc_status, gfc_status_char): Remove functions.
	* scanner.c (gfc_new_file): Use printf instead of gfc_status.
	* options.c (gfc_init_options): Rename verbose into dump_parse_tree.
	(gfc_handle_module_path_options): Use gfc_fatal_error instead of
	gfc_status and exit.
	(gfc_handle_option): Rename verbose into dump_parse_tree.

From-SVN: r133958
2008-04-06 12:17:33 +00:00
Eric Botcazou 1bde5bc468 decl.c (rest_of_type_decl_compilation_no_defer): New local function used to process all the variants of the specified type.
* decl.c (rest_of_type_decl_compilation_no_defer): New local function
	used to process all the variants of the specified type.
	(gnat_to_gnu_entity): Invoke rest_of_type_decl_compilation for enumeral
	types too.  Call rest_of_type_decl_compilation_no_defer if undeferring.
	(rest_of_type_decl_compilation): Likewise.
	* utils.c (gnat_pushdecl): Propagate the name to all variants of type.

From-SVN: r133957
2008-04-06 10:22:23 +00:00
Tom G. Christensen d7d7db8b40 gthr-posix95.h (__gthread_cond_wait_recursive): Add missing &.
* gthr-posix95.h (__gthread_cond_wait_recursive): Add missing &.

From-SVN: r133955
2008-04-06 09:57:49 +00:00
Uros Bizjak 27183bba6b re PR target/12329 (x86: local function declared with attribute((regparm(3))) gets corrupted parent frame pointer)
PR target/12329
        * config/i386/i386.c (ix86_function_regparm): Error if regparm(3)
        attribute is used for nested functions.

testsuite/ChangeLog:

        PR target/12329
        * gcc.target/i386/pr12329.c: New test.

From-SVN: r133954
2008-04-06 08:40:47 +02:00
GCC Administrator 93f14b2fc3 Daily bump.
From-SVN: r133951
2008-04-06 00:17:36 +00:00
Eric Botcazou adcb04d2e3 pr35823.adb: Rename to size_attribute.adb.
* gnat.dg/pr35823.adb: Rename to size_attribute.adb.

From-SVN: r133946
2008-04-05 22:56:52 +00:00
Jerry DeLisle 5a82954466 PR fortran/25829 28655
2008-04-05  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR fortran/25829 28655
	* gfortran.dg/f2003_io_1.f03: New test.
	* gfortran.dg/f2003_io_2.f03: New test.
	* gfortran.dg/f2003_io_3.f03: New test.
	* gfortran.dg/f2003_io_4.f03: New test.
	* gfortran.dg/f2003_io_5.f03: New test.
	* gfortran.dg/f2003_io_6.f03: New test.
	* gfortran.dg/f2003_io_7.f03: New test.

From-SVN: r133945
2008-04-05 22:33:14 +00:00
Jerry DeLisle 6f0f0b2eca PR fortran/25829 28655
2008-04-05  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
	    Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>

	PR fortran/25829 28655
	* dump-parse-tree.c (gfc_show_code_node): Show new I/O parameters.
	* gfortran.h (gfc_statement): Add ST_WAIT enumerator.
	(gfc_open): Add pointers for decimal, encoding, round, sign,
	asynchronous. (gfc_inquire): Add pointers for asynchronous, decimal,
	encoding, pending, round, sign, size, id.
	(gfc_wait): New typedef struct. (gfc_dt): Add pointers for id, pos,
	asynchronous, blank, decimal, delim, pad, round, sign.
	(gfc_exec_op): Add EXEC_WAIT enumerator. (gfc_code): Add pointer for
	wait. (gfc_free_wait), (gfc_resolve_wait): New function prototypes.
	* trans-stmt.h (gfc_trans_wait): New function prototype.
	* trans.c (gfc_trans_code): Add case for EXEC_WAIT.
	* io.c (io_tag): Add new tags for DECIMAL, ENCODING, ROUND, SIGN,
	ASYCHRONOUS, ID. (match_open_element): Add matchers for new tags.
	(gfc_free_open): Free new pointers. (gfc_resolve_open): Resolve new
	tags. (gfc_resolve_open): Remove comment around check for allowed
	values and ASYNCHRONOUS, update it.  Likewise for DECIMAL, ENCODING,
	ROUND, and SIGN. (match_dt_element): Add matching for new tags.
	(gfc_free_wait): New function. (gfc_resolve_wait): New function.
	(match_wait_element): New function. (gfc_match_wait): New function.
	* resolve.c (gfc_resolve_blocks): Add case for EXEC_WAIT.
	(resolve_code): Add case for EXEC_WAIT. 
	* st.c (gfc_free_statement): Add case for EXEC_WAIT.
	* trans-io.c (ioparam_type): Add IOPARM_ptype_wait. (gfc_st_parameter):
	Add "wait" entry. (iocall): Add IOCALL_WAIT enumerator.
	(gfc_build_io_library_fndecls): Add function declaration for st_wait.
	(gfc_trans_open): Add mask bits for new I/O tags.
	(gfc_trans_inquire): Add mask bits for new I/O tags.
	(gfc_trans_wait): New translation function.
	(build_dt): Add mask bits for new I/O tags.
	* match.c (gfc_match_if) Add matcher for "wait".
	* match.h (gfc_match_wait): Prototype for new function.
	* ioparm.def: Add new I/O parameter definitions.
	* parse.c (decode_statement): Add match for "wait" statement.
	(next_statement): Add case for ST_WAIT. (gfc_ascii_statement): Same.

Co-Authored-By: Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>

From-SVN: r133944
2008-04-05 22:23:27 +00:00
Jerry DeLisle 10256cbe95 PR fortran/25829 28655
2008-04-05  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR fortran/25829 28655
	* gfortran.map: Add new symbol, _gfortran_st_wait.
	* libgfortran.h (st_paramter_common): Add new I/O parameters.
	* open.c (st_option decimal_opt[], st_option encoding_opt[],
	st_option round_opt[], st_option sign_opt[], st_option async_opt[]): New
	parameter option arrays. (edit_modes): Add checks for new parameters.
	(new_unit): Likewise. (st_open): Likewise.
	* list_read.c (CASE_SEPERATORS): Add ';' as a valid separator.
	(eat_separator): Handle deimal comma. (read_logical): Fix whitespace.
	(parse_real): Handle decimal comma. (read_real): Handle decimal comma.
	* read.c (read_a): Use decimal status flag to allow comma in place of a
	decimal point. (read_f): Allow comma as acceptable character in float.
	According to decimal flag, substitute a period for a comma.
	(read_x): If decimal status flag is comma, disable the read_comma flag,
	not allowing comma as a delimiter, an extension otherwise.
	* io.h: (unit_decimal, unit_encoding, unit_round, unit_sign,
	unit_async): New enumerators. Add all new I/O parameters.
	* unix.c (unix_stream, int_stream): Add io_mode	asychronous I/O	control.
	(move_pos_offset, fd_alloc_w_at): Fix some whitespace.
	(fd_sfree): Use new enumerator. (fd_read): Likewise.
	(fd_write): Likewise. (fd_close): Fix whitespace.
	(fd_open): Use new enumertors. (tempfile, regular_file,
	open_external): Fix whitespace. (output_stream, error_stream): Set
	method. (stream_offset): Fix whitespace.
	* transfer.c: (st_option decimal_opt[], sign_opt[], blank_opt[]): New
	option arrays. 	(formatted_transfer_scalar): Set sf_read_comma flag
	based on new decimal_status flag. (data_transfer_init): Initialize new
	parameters. Add checks for decimal, sign, and blank. (st_wait): New stub.
	* format.c: (format_lex): Add format specifiers DP, DC, and D.
	(parse_format_list): Parse the new specifiers.
	* write.c (write_decimal): Use new sign enumerators to set the sign.
	(write_complex): Handle decimal comma and semi-colon separator.
	(nml_write_obj): Likewise.
	* write_float.def: Revise sign enumerators. (calculate_sign): Use new
	sign enumerators. (output_float): Likewise. Use new decimal_status flag
	to set the decimal character to a point or a comma.

From-SVN: r133943
2008-04-05 22:18:03 +00:00
Richard Guenther 3d3e20df36 re PR tree-optimization/35833 (Wrong code generated with -ftree-vrp)
2008-04-05  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/35833
	* gcc.dg/torture/pr35833.c: New testcase.

From-SVN: r133941
2008-04-05 18:04:07 +00:00
Jan Hubicka 9fb7564ea2 * emit-rtl.c (init_emit): xcalloc regno_pointer_align.
From-SVN: r133933
2008-04-05 12:25:32 +00:00
Jan Hubicka 9e016eba12 tree-dump.c (dump_enable_all): Remove prototype; do not accept letter argument.
* tree-dump.c (dump_enable_all): Remove prototype; do not accept
	letter argument.
	(dump_files): Update.
	(enable_rtl_dump_file): Do not accept letter argument.
	* tree-pass.h (dump_file_info): Remove letter argument.
	* toplev.c (decode_d_option): Update -da handling.
	* toplev.h (enable_rtl_dump_file): Update prototype.
	* passes.c (register_one_dump_file): Do not accept IPA argument; work
	it out based on pass type.
	(register_dump_files_1): Likewise.
	(init_optimization_passes): Update register_one_dump_file calls.
	(execute_one_pass): Sanity check that IPA passes are called at IPA level
	and RTL passes at RTL level.
	(execute_pass_list): IPA pass can not be after or subpass of
	GIMPLE/RTL pass.
	(execute_ipa_pass_list): Handle IPA subpasses of IPA subpasses and
	disallov RTL subpasses of IPA subpasses.

From-SVN: r133930
2008-04-05 05:50:19 +00:00
Ben Elliston 23ef6d211f tree-cfg.c (need_fake_edge_p): Return false for calls to builtins that return exactly once and do not throw.
* tree-cfg.c (need_fake_edge_p): Return false for calls to
	builtins that return exactly once and do not throw. Cache call to
	call_expr_flags.

From-SVN: r133929
2008-04-05 14:50:18 +11:00
GCC Administrator c44b856a0b Daily bump.
From-SVN: r133924
2008-04-05 00:17:32 +00:00
Andy Hutchinson 3c2397cdca re PR target/34916 (gcc.c-torture/execute/pr27364.c fails with -O1, -O2 and -Os)
PR rtl-optimization/34916
PR middle-end/35519
* combine.c (create_log_links): Do not create duplicate LOG_LINKS
between instruction pairs

From-SVN: r133920
2008-04-04 23:45:46 +00:00
Naveen.H.S 9eb3a0dd85 invoke.texi: Document -mbitops for SH.
* doc/invoke.texi: Document -mbitops for SH.
	* config/sh/constraints.md (K03, K12, Sbv, Sbw): New constraints.
	* config/sh/predicates.md (bitwise_memory_operand): New	predicate.
	* config/sh/sh.c (print_operand): Add %t operand code.
	* config/sh/sh.h (GO_IF_LEGITIMATE_INDEX): Add condition for SH2A.
	* config/sh/sh.md (*iorsi3_compact): Fix condition for SH2A.
	(extendqisi2_compact): Add the alternative for SH2A 4-byte mov.b.
	(extendqihi2): Likewise.
	(movqi_i): Likewise.
	(insv): Use bset, bclr and bst instructions for SH2A if	possible.
	(extv): Use bld instruction for SH2A if possible.
	(extzv): Likewise.
	(bclr_m2a, bclrmem_m2a, bset_m2a, bsetmem_m2a, bst_m2a, bld_m2a,
	bldsign_m2a, bld_reg, *bld_regqi, band_m2a, bandreg_m2a,
	bor_m2a, borreg_m2a, bxor_m2a, bxorreg_m2a): New insns.
	(bset.b, bclr.b): Define peepholes.
	* config/sh/sh.opt (mbitops): New option.

	* gcc.target/sh/sh2a-band.c: New test.
	* gcc.target/sh/sh2a-bclrmem.c: New test.
	* gcc.target/sh/sh2a-bld.c: New test.
	* gcc.target/sh/sh2a-bor.c: New test.
	* gcc.target/sh/sh2a-bsetmem.c: New test.
	* gcc.target/sh/sh2a-bxor.c: New test.

From-SVN: r133919
2008-04-04 23:36:19 +00:00