1. 08 Apr, 2008 3 commits
    • g-sercom.ads, [...] (Data_Rate): Add B115200. · 42c3898c
      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
      Pascal Obry committed
    • Fix uninit warning reported by Andrew Pinski. · e68c63e3
      pt.c (tsubst_copy, case SIZEOF_EXPR): Initialize len.
      
      From-SVN: r134001
      James E Wilson committed
    • Daily bump. · 48b350ad
      From-SVN: r133998
      GCC Administrator committed
  2. 07 Apr, 2008 20 commits
    • function.h (rtl): Rename to x_rtl. · 3e029763
      
      	* 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
      Jan Hubicka committed
    • PR target/34210 PR target/35508 * config.host (avr-*-*): Add avr cpu_type and… · 47583040
      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
      Andy Hutchinson committed
    • Makefile.def: check-gold depends upon all-binutils. · 06407e30
      	* Makefile.def: check-gold depends upon all-binutils.
      	* Makefile.in: Regenerate.
      
      From-SVN: r133992
      Ian Lance Taylor committed
    • PR fortran/25829 28655 · 7286c376
      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
      Jerry DeLisle committed
    • Fix bug Joern Rennecke reported. · c3be2598
      * reload.c (push_secondary_reload): Add missing break to for loop.
      
      From-SVN: r133990
      James E Wilson committed
    • PR fortran/25829 28655 · d06b3496
      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
      Jerry DeLisle committed
    • PR fortran/25829 28655 · 931149a6
      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
      Jerry DeLisle committed
    • re PR c++/35734 (ICE with copy constructor in derived class) · c2b58ba2
              PR c++/35734
              * class.c (type_has_user_nondefault_constructor): A template
              counts as a nondefault constructor.
      
      From-SVN: r133987
      Jason Merrill committed
    • Makefile.in: Add make ifeq define for mips/mipsel support. · d8ec5bf2
      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
      Aurelien Jarno committed
    • PR middle-end/PR28690 · 46b71b03
      	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
      Peter Bergner committed
    • i386.md ("*sse_prologue_save_insn"): Use braced output control string instead of quoted. · 64ef8953
              * config/i386/i386.md ("*sse_prologue_save_insn"): Use braced output
              control string instead of quoted.
      
      From-SVN: r133984
      Uros Bizjak committed
    • 2008-04-07 Kenneth Zadeck <zadeck@naturalbridge.com> · 84159bd8
      	doc/rtl.texi: Rewrite of subreg section.
      
      From-SVN: r133982
      Kenneth Zadeck committed
    • i386.c (legitimize_pic_address): Add treating of dllimport SYM_REF's. · 8502420b
      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
      Kai Tietz committed
    • pr35842.c: New. · cd035e34
      	PR/35842
      	* gcc.dg/torture/pr35842.c: New.
      
      From-SVN: r133980
      Kai Tietz committed
    • sysdep.c: add __GLIBC__ to the #ifdef preprocessor macros to detect systems using GNU libc. · 7437c8d4
      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
      Aurelien Jarno committed
    • s-osinte-linux-kfreebsd.ads (SC_NPROCESSORS_ONLN): New constant constant for sysconf call. · 1dab7b35
      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
      Aurelien Jarno committed
    • fold-const.c (fold): New case. · 39fcde8f
      	* 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
      Eric Botcazou committed
    • Removal of Return with Depressed Stack Pointer support · 9dd9bf80
      	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
      Eric Botcazou committed
    • re PR libstdc++/35588 ([parallel mode] parallel std::sort and bind()) · f9985df5
      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
      Johannes Singler committed
    • Daily bump. · 1d4cd3d0
      From-SVN: r133972
      GCC Administrator committed
  3. 06 Apr, 2008 14 commits
    • re PR middle-end/35400 (-Wtype-limits -O2 causes ICE tree check: expected… · 3633df5a
      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
      Richard Guenther committed
    • avr.h (avr_mega_p): Remove declaration. · 5dc77808
      	* 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
      Anatoly Sokolov committed
    • Index... · 679d9637
      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
      Paul Thomas committed
    • re PR fortran/35832 (Better error message for wrong arguments to I/O statements) · 9b8d1901
      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
      Tobias Schlüter committed
    • re PR target/35842 (ICE in legitimize_pic_address, at config/i386/i386.c:7666) · 8c51effa
      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
      Richard Guenther committed
    • io.c (check_io_constraints): Add constrains. · fbe88ffa
      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
      Tobias Burnus committed
    • decl.c (is_variable_size): Do not unconditionally return false on non-strict alignment platforms. · 2d091b12
      	* decl.c (is_variable_size): Do not unconditionally return false
      	on non-strict alignment platforms.
      
      From-SVN: r133961
      Eric Botcazou committed
    • gcc.c (default_compilers): Sync Fortran extensions list with that in fortran/lang-specs.h. · 3135ce84
      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
      Francois-Xavier Coudert committed
    • dump-parse-tree.c: Use fprintf, fputs and fputc instead of gfc_status and gfc_status_char. · 6c1abb5c
      	* 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
      François-Xavier Coudert committed
    • decl.c (rest_of_type_decl_compilation_no_defer): New local function used to… · 1bde5bc4
      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
      Eric Botcazou committed
    • gthr-posix95.h (__gthread_cond_wait_recursive): Add missing &. · d7d7db8b
      	* gthr-posix95.h (__gthread_cond_wait_recursive): Add missing &.
      
      From-SVN: r133955
      Tom G. Christensen committed
    • re PR target/12329 (x86: local function declared with attribute((regparm(3)))… · 27183bba
      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
      Uros Bizjak committed
    • Daily bump. · 93f14b2f
      From-SVN: r133951
      GCC Administrator committed
  4. 05 Apr, 2008 3 commits
    • pr35823.adb: Rename to size_attribute.adb. · adcb04d2
      	* gnat.dg/pr35823.adb: Rename to size_attribute.adb.
      
      From-SVN: r133946
      Eric Botcazou committed
    • PR fortran/25829 28655 · 5a829544
      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
      Jerry DeLisle committed
    • PR fortran/25829 28655 · 6f0f0b2e
      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
      Jerry DeLisle committed