diff options
author | aoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-09-01 21:10:12 +0000 |
---|---|---|
committer | aoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-09-01 21:10:12 +0000 |
commit | b6d2ee1d42adca3f8339c530e078f4dc2143930f (patch) | |
tree | 457d72335a5b86fced2ea8460ad9303376fcc1d9 | |
parent | 57efab3db25dd04874903046d1e673cd24377d36 (diff) |
Merged with gcc-4_4-branch@151281.var-tracking-assignments-4_4-merge-151281-aftervar-tracking-assignments-4_4-branch
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/var-tracking-assignments-4_4-branch@151286 138bc75d-0d04-0410-961f-82ee72b054a4
62 files changed, 1025 insertions, 283 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index adc635534f3..38f029bc842 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,104 @@ +2009-08-31 Chris Demetriou <cgd@google.com> + + * config/i386/i386.c (ix86_vectorize_builtin_conversion): Never + vectorize if not TARGET_SSE2. + +2009-08-31 Gerald Pfeifer <gerald@pfeifer.com> + + * doc/install.texi (Final install): Adjust reference on where to + order printed manuals. + +2009-08-29 Kai Tietz<kai.tietz@onevision.com> + + PR/41184 + * config/i386.c (ix86_expand_epilogue): Correct stack adjustment for + padding. + +2009-08-28 Jan Beulich <jbeulich@novell.com> + + * config/i386/netware.c: Include langhooks.h. + (i386_nlm_encode_section_info): Simplify. + (netware_override_options): Delete. + * config/i386/netware.h (netware_override_options): Delete + declaration. + (OVERRIDE_OPTIONS): Delete definition. + (SUBTARGET_OVERRIDE_OPTIONS): Define. + (ASM_COMMENT_START): Define. + * config/i386/nwld.h (SUBSUBTARGET_OVERRIDE_OPTIONS): Define. + +2009-08-28 Uros Bizjak <ubizjak@gmail.com> + + Backport from mainline: + 2009-08-26 Uros Bizjak <ubizjak@gmail.com> + + * config/alpha/sync.md: Update comment about unpredictable LL/SC lock + clearing by a taken branch. + (sync_<fetchop_name><mode>): Split when epilogue_completed is set, + effectively after bbro pass. + (sync_nand<mode>): Ditto. + (sync_old_<fetchop_name><mode>): Ditto. + (sync_old_nand<mode>): Ditto. + (sync_new_<fetchop_name><mode>): Dito. + (sync_new_nand<mode>): Ditto. + (sync_compare_and_swap<mode>_1): Ditto. + (*sync_compare_and_swap<mode>): Ditto. + (sync_lock_test_and_set<mode>_1): Ditto. + ("sync_lock_test_and_set<mode>): Ditto. + + 2009-08-25 Uros Bizjak <ubizjak@gmail.com> + + * config/alpha/alpha.md (*cmpdf_ieee_ext[123]): Remove. + (*cmpdf_internal): Enable for all ALPHA_FPTM levels. + (*movdfcc_ext[1234]): Disable for IEEE mode. + + 2009-08-16 Uros Bizjak <ubizjak@gmail.com> + + * config/alpha/alpha.c (alpha_end_function): Handle NULL_RTX returned + from prev_active_insn. + +2009-08-27 Gerald Pfeifer <gerald@pfeifer.com> + + * doc/service.texi (service directory): Update URL. + +2009-08-26 Anatoly Sokolov <aesok@post.ru> + + * doc/invoke.texi (AVR Options): Remove documentation of -minit-stack + switch. + +2009-08-25 Anatoly Sokolov <aesok@post.ru> + + PR target/34412 + * config/avr/avr.c (expand_epilogue): Use correct QI mode frame + pointer for tiny stack. + +2009-08-24 Richard Guenther <rguenther@suse.de> + + PR middle-end/41094 + * builtins.c (fold_builtin_pow): Fold pow(pow(x,y),z) to + pow(x,y*z) only if x is nonnegative. + +2009-08-23 Uros Bizjak <ubizjak@gmail.com> + + PR target/40718 + * config/i386/i386.c (*call_pop_1): Disable for sibling calls. + (*call_value_pop_1): Ditto. + (*sibcall_pop_1): New insn pattern. + (*sibcall_value_pop_1): Ditto. + +2009-08-20 Andreas Krebbel <krebbel1@de.ibm.com> + + * config/s390/s390.c (Z10_PREDICT_DISTANCE): New macro. + (s390_z10_fix_long_loop_prediction): New function. + (s390_z10_optimize_cmp): INSN walk moved to callee - s390_reorg. + (s390_reorg): Walk over the INSNs and invoke + s390_z10_fix_long_loop_prediction and s390_z10_optimize_cmp. + +2009-08-19 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/41123 + * expr.c (expand_expr_real_1) <normal_inner_ref>: Handle all kinds + of CONCAT, not just bitpos 0 bitsize size of the whole CONCAT. + 2009-08-18 Jakub Jelinek <jakub@redhat.com> PR target/40971 diff --git a/gcc/ChangeLog.vta b/gcc/ChangeLog.vta index bb5dd6ded1d..7c19fa1d58a 100644 --- a/gcc/ChangeLog.vta +++ b/gcc/ChangeLog.vta @@ -1,5 +1,9 @@ 2009-09-01 Alexandre Oliva <aoliva@redhat.com> + Merged with gcc-4_4-branch@151281. + +2009-09-01 Alexandre Oliva <aoliva@redhat.com> + * cse.c (cse_extended_basic_block): Use NONDEBUG_INSN_P. * Makefile.in (TREE_INLINE_H): Take pointer-set.h from GIMPLE_H. * tree-inline.c (remap_gimple_stmt): Use VEC for debug_stmts. diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 13fb2c60b85..8db097bcec8 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20090818 +20090901 diff --git a/gcc/builtins.c b/gcc/builtins.c index 9dee9a35abb..02d7e98b3b1 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -8634,15 +8634,18 @@ fold_builtin_pow (tree fndecl, tree arg0, tree arg1, tree type) } } - /* Optimize pow(pow(x,y),z) = pow(x,y*z). */ + /* Optimize pow(pow(x,y),z) = pow(x,y*z) iff x is nonnegative. */ if (fcode == BUILT_IN_POW || fcode == BUILT_IN_POWF || fcode == BUILT_IN_POWL) { tree arg00 = CALL_EXPR_ARG (arg0, 0); - tree arg01 = CALL_EXPR_ARG (arg0, 1); - tree narg1 = fold_build2 (MULT_EXPR, type, arg01, arg1); - return build_call_expr (fndecl, 2, arg00, narg1); + if (tree_expr_nonnegative_p (arg00)) + { + tree arg01 = CALL_EXPR_ARG (arg0, 1); + tree narg1 = fold_build2 (MULT_EXPR, type, arg01, arg1); + return build_call_expr (fndecl, 2, arg00, narg1); + } } } diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index c6182dc6181..5ca9a1b6d83 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -8290,7 +8290,7 @@ alpha_end_function (FILE *file, const char *fnname, tree decl ATTRIBUTE_UNUSED) insn = get_last_insn (); if (!INSN_P (insn)) insn = prev_active_insn (insn); - if (GET_CODE (insn) == CALL_INSN) + if (insn && GET_CODE (insn) == CALL_INSN) output_asm_insn (get_insn_template (CODE_FOR_nop, NULL), NULL); #if TARGET_ABI_OSF diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md index 223143cd2ad..a04a4dff82a 100644 --- a/gcc/config/alpha/alpha.md +++ b/gcc/config/alpha/alpha.md @@ -3700,19 +3700,7 @@ (match_operator:DF 1 "alpha_fp_comparison_operator" [(match_operand:DF 2 "reg_or_0_operand" "fG") (match_operand:DF 3 "reg_or_0_operand" "fG")]))] - "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" - "cmp%-%C1%/ %R2,%R3,%0" - [(set_attr "type" "fadd") - (set_attr "trap" "yes") - (set_attr "trap_suffix" "su")]) - -(define_insn "*cmpdf_ieee_ext1" - [(set (match_operand:DF 0 "register_operand" "=&f") - (match_operator:DF 1 "alpha_fp_comparison_operator" - [(float_extend:DF - (match_operand:SF 2 "reg_or_0_operand" "fG")) - (match_operand:DF 3 "reg_or_0_operand" "fG")]))] - "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" + "TARGET_FP" "cmp%-%C1%/ %R2,%R3,%0" [(set_attr "type" "fadd") (set_attr "trap" "yes") @@ -3730,18 +3718,6 @@ (set_attr "trap" "yes") (set_attr "trap_suffix" "su")]) -(define_insn "*cmpdf_ieee_ext2" - [(set (match_operand:DF 0 "register_operand" "=&f") - (match_operator:DF 1 "alpha_fp_comparison_operator" - [(match_operand:DF 2 "reg_or_0_operand" "fG") - (float_extend:DF - (match_operand:SF 3 "reg_or_0_operand" "fG"))]))] - "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" - "cmp%-%C1%/ %R2,%R3,%0" - [(set_attr "type" "fadd") - (set_attr "trap" "yes") - (set_attr "trap_suffix" "su")]) - (define_insn "*cmpdf_ext2" [(set (match_operand:DF 0 "register_operand" "=f") (match_operator:DF 1 "alpha_fp_comparison_operator" @@ -3754,19 +3730,6 @@ (set_attr "trap" "yes") (set_attr "trap_suffix" "su")]) -(define_insn "*cmpdf_ieee_ext3" - [(set (match_operand:DF 0 "register_operand" "=&f") - (match_operator:DF 1 "alpha_fp_comparison_operator" - [(float_extend:DF - (match_operand:SF 2 "reg_or_0_operand" "fG")) - (float_extend:DF - (match_operand:SF 3 "reg_or_0_operand" "fG"))]))] - "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" - "cmp%-%C1%/ %R2,%R3,%0" - [(set_attr "type" "fadd") - (set_attr "trap" "yes") - (set_attr "trap_suffix" "su")]) - (define_insn "*cmpdf_ext3" [(set (match_operand:DF 0 "register_operand" "=f") (match_operator:DF 1 "alpha_fp_comparison_operator" @@ -3816,7 +3779,7 @@ (match_operand:DF 2 "const0_operand" "G,G")]) (float_extend:DF (match_operand:SF 1 "reg_or_0_operand" "fG,0")) (match_operand:DF 5 "reg_or_0_operand" "0,fG")))] - "TARGET_FP" + "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" "@ fcmov%C3 %R4,%R1,%0 fcmov%D3 %R4,%R5,%0" @@ -3831,7 +3794,7 @@ (match_operand:DF 2 "const0_operand" "G,G")]) (match_operand:DF 1 "reg_or_0_operand" "fG,0") (match_operand:DF 5 "reg_or_0_operand" "0,fG")))] - "TARGET_FP" + "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" "@ fcmov%C3 %R4,%R1,%0 fcmov%D3 %R4,%R5,%0" @@ -3846,7 +3809,7 @@ (match_operand:DF 2 "const0_operand" "G,G")]) (match_operand:SF 1 "reg_or_0_operand" "fG,0") (match_operand:SF 5 "reg_or_0_operand" "0,fG")))] - "TARGET_FP" + "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" "@ fcmov%C3 %R4,%R1,%0 fcmov%D3 %R4,%R5,%0" @@ -3861,7 +3824,7 @@ (match_operand:DF 2 "const0_operand" "G,G")]) (float_extend:DF (match_operand:SF 1 "reg_or_0_operand" "fG,0")) (match_operand:DF 5 "reg_or_0_operand" "0,fG")))] - "TARGET_FP" + "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" "@ fcmov%C3 %R4,%R1,%0 fcmov%D3 %R4,%R5,%0" diff --git a/gcc/config/alpha/sync.md b/gcc/config/alpha/sync.md index 0712cb9da67..bb7210239fd 100644 --- a/gcc/config/alpha/sync.md +++ b/gcc/config/alpha/sync.md @@ -62,11 +62,8 @@ [(set_attr "type" "st_c")]) ;; The Alpha Architecture Handbook says that it is UNPREDICTABLE whether -;; the lock is cleared by a TAKEN branch. If we were to honor that, it -;; would mean that we could not expand a ll/sc sequence until after the -;; final basic-block reordering pass. Fortunately, it appears that no -;; Alpha implementation ever built actually clears the lock on branches, -;; taken or not. +;; the lock is cleared by a TAKEN branch. This means that we can not +;; expand a ll/sc sequence until after the final basic-block reordering pass. (define_insn_and_split "sync_<fetchop_name><mode>" [(set (match_operand:I48MODE 0 "memory_operand" "+m") @@ -77,7 +74,7 @@ (clobber (match_scratch:I48MODE 2 "=&r"))] "" "#" - "reload_completed" + "epilogue_completed" [(const_int 0)] { alpha_split_atomic_op (<CODE>, operands[0], operands[1], @@ -96,7 +93,7 @@ (clobber (match_scratch:I48MODE 2 "=&r"))] "" "#" - "reload_completed" + "epilogue_completed" [(const_int 0)] { alpha_split_atomic_op (NOT, operands[0], operands[1], @@ -116,7 +113,7 @@ (clobber (match_scratch:I48MODE 3 "=&r"))] "" "#" - "reload_completed" + "epilogue_completed" [(const_int 0)] { alpha_split_atomic_op (<CODE>, operands[1], operands[2], @@ -137,7 +134,7 @@ (clobber (match_scratch:I48MODE 3 "=&r"))] "" "#" - "reload_completed" + "epilogue_completed" [(const_int 0)] { alpha_split_atomic_op (NOT, operands[1], operands[2], @@ -158,7 +155,7 @@ (clobber (match_scratch:I48MODE 3 "=&r"))] "" "#" - "reload_completed" + "epilogue_completed" [(const_int 0)] { alpha_split_atomic_op (<CODE>, operands[1], operands[2], @@ -179,7 +176,7 @@ (clobber (match_scratch:I48MODE 3 "=&r"))] "" "#" - "reload_completed" + "epilogue_completed" [(const_int 0)] { alpha_split_atomic_op (NOT, operands[1], operands[2], @@ -214,7 +211,7 @@ (clobber (match_scratch:DI 6 "=X,&r"))] "" "#" - "reload_completed" + "epilogue_completed" [(const_int 0)] { alpha_split_compare_and_swap_12 (<MODE>mode, operands[0], operands[1], @@ -251,7 +248,7 @@ (clobber (match_scratch:I48MODE 4 "=&r"))] "" "#" - "reload_completed" + "epilogue_completed" [(const_int 0)] { alpha_split_compare_and_swap (operands[0], operands[1], operands[2], @@ -282,7 +279,7 @@ (clobber (match_scratch:DI 4 "=&r"))] "" "#" - "reload_completed" + "epilogue_completed" [(const_int 0)] { alpha_split_lock_test_and_set_12 (<MODE>mode, operands[0], operands[1], @@ -301,7 +298,7 @@ (clobber (match_scratch:I48MODE 3 "=&r"))] "" "#" - "reload_completed" + "epilogue_completed" [(const_int 0)] { alpha_split_lock_test_and_set (operands[0], operands[1], diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c index 943d106a2aa..79607c3d9b3 100644 --- a/gcc/config/avr/avr.c +++ b/gcc/config/avr/avr.c @@ -996,7 +996,7 @@ expand_epilogue (void) start_sequence (); emit_move_insn (myfp, - gen_rtx_PLUS (HImode, myfp, + gen_rtx_PLUS (GET_MODE (myfp), myfp, gen_int_mode (size, GET_MODE(myfp)))); diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 3406117f0f6..4e8a923b2d0 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -8630,7 +8630,8 @@ ix86_expand_epilogue (int style) ix86_emit_restore_sse_regs_using_mov (stack_pointer_rtx, frame.to_allocate, style == 2); pro_epilogue_adjust_stack (stack_pointer_rtx, stack_pointer_rtx, - GEN_INT (frame.nsseregs * 16), style); + GEN_INT (frame.nsseregs * 16 + + frame.padding0), style); } else if (frame.to_allocate || frame.nsseregs) { @@ -25321,7 +25322,7 @@ ix86_veclibabi_acml (enum built_in_function fn, tree type_out, tree type_in) static tree ix86_vectorize_builtin_conversion (unsigned int code, tree type) { - if (TREE_CODE (type) != VECTOR_TYPE + if (!TARGET_SSE2 || TREE_CODE (type) != VECTOR_TYPE /* There are only conversions from/to signed integers. */ || TYPE_UNSIGNED (TREE_TYPE (type))) return NULL_TREE; diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 0d1b36cf1f6..a1352b7df1e 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -14973,22 +14973,25 @@ (match_operand:SI 1 "" "")) (set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG) (match_operand:SI 2 "immediate_operand" "i")))] - "!TARGET_64BIT" + "!SIBLING_CALL_P (insn) && !TARGET_64BIT" { if (constant_call_address_operand (operands[0], Pmode)) - { - if (SIBLING_CALL_P (insn)) - return "jmp\t%P0"; - else - return "call\t%P0"; - } - if (SIBLING_CALL_P (insn)) - return "jmp\t%A0"; - else - return "call\t%A0"; + return "call\t%P0"; + return "call\t%A0"; } [(set_attr "type" "call")]) +(define_insn "*sibcall_pop_1" + [(call (mem:QI (match_operand:SI 0 "sibcall_insn_operand" "s,U")) + (match_operand:SI 1 "" "")) + (set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG) + (match_operand:SI 2 "immediate_operand" "i,i")))] + "SIBLING_CALL_P (insn) && !TARGET_64BIT" + "@ + jmp\t%P0 + jmp\t%A0" + [(set_attr "type" "call")]) + (define_expand "call" [(call (match_operand:QI 0 "" "") (match_operand 1 "" "")) @@ -21469,22 +21472,26 @@ (match_operand:SI 2 "" ""))) (set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG) (match_operand:SI 3 "immediate_operand" "i")))] - "!TARGET_64BIT" + "!SIBLING_CALL_P (insn) && !TARGET_64BIT" { if (constant_call_address_operand (operands[1], Pmode)) - { - if (SIBLING_CALL_P (insn)) - return "jmp\t%P1"; - else - return "call\t%P1"; - } - if (SIBLING_CALL_P (insn)) - return "jmp\t%A1"; - else - return "call\t%A1"; + return "call\t%P1"; + return "call\t%A1"; } [(set_attr "type" "callv")]) +(define_insn "*sibcall_value_pop_1" + [(set (match_operand 0 "" "") + (call (mem:QI (match_operand:SI 1 "sibcall_insn_operand" "s,U")) + (match_operand:SI 2 "" ""))) + (set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG) + (match_operand:SI 3 "immediate_operand" "i,i")))] + "SIBLING_CALL_P (insn) && !TARGET_64BIT" + "@ + jmp\t%P1 + jmp\t%A1" + [(set_attr "type" "callv")]) + (define_insn "*call_value_0" [(set (match_operand 0 "" "") (call (mem:QI (match_operand:SI 1 "constant_call_address_operand" "")) diff --git a/gcc/config/i386/netware.c b/gcc/config/i386/netware.c index 7f040d4b0e0..fa9ffbbeac1 100644 --- a/gcc/config/i386/netware.c +++ b/gcc/config/i386/netware.c @@ -30,6 +30,7 @@ along with GCC; see the file COPYING3. If not see #include "flags.h" #include "tm_p.h" #include "toplev.h" +#include "langhooks.h" #include "ggc.h" /* Return string which is the function name, identified by ID, modified @@ -179,16 +180,15 @@ i386_nlm_encode_section_info (tree decl, rtx rtl, int first) { default_encode_section_info (decl, rtl, first); - if (first - && TREE_CODE (decl) == FUNCTION_DECL + if (TREE_CODE (decl) == FUNCTION_DECL /* Do not change the identifier if a verbatim asmspec or if stdcall suffix already added. */ && *IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)) != '*' - && !strchr (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), '@')) + && !strchr (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), '@') + /* FIXME: Imported stdcall names are not modified by the Ada frontend. + Check and decorate the RTL name now. */ + && strcmp (lang_hooks.name, "GNU Ada") == 0) { - /* FIXME: In Ada, and perhaps other language frontends, - imported stdcall names may not yet have been modified. - Check and do it know. */ rtx symbol = XEXP (rtl, 0); tree new_id; tree old_id = DECL_ASSEMBLER_NAME (decl); @@ -196,14 +196,7 @@ i386_nlm_encode_section_info (tree decl, rtx rtl, int first) gcc_assert (GET_CODE (symbol) == SYMBOL_REF); if ((new_id = i386_nlm_maybe_mangle_decl_assembler_name (decl, old_id))) - { - /* These attributes must be present on first declaration, - change_decl_assembler_name will warn if they are added - later and the decl has been referenced, but duplicate_decls - should catch the mismatch first. */ - change_decl_assembler_name (decl, new_id); - XSTR (symbol, 0) = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)); - } + XSTR (symbol, 0) = IDENTIFIER_POINTER (new_id); } } @@ -233,24 +226,3 @@ i386_nlm_strip_name_encoding (const char *str) } return name; } - -/* Sometimes certain combinations of command options do not make - sense on a particular target machine. You can define a macro - `OVERRIDE_OPTIONS' to take account of this. This macro, if - defined, is executed once just after all the command options have - been parsed. - - Don't use this macro to turn on various extra optimizations for - `-O'. That is what `OPTIMIZATION_OPTIONS' is for. */ - -void -netware_override_options (void) -{ - override_options (); - - if (flag_pic) - { - error ("-fPIC and -fpic are not supported for this target"); - flag_pic = 0; - } -} diff --git a/gcc/config/i386/netware.h b/gcc/config/i386/netware.h index 4f1ef5588af..6b423e36fc1 100644 --- a/gcc/config/i386/netware.h +++ b/gcc/config/i386/netware.h @@ -72,17 +72,16 @@ along with GCC; see the file COPYING3. If not see #define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP | \ MASK_FLOAT_RETURNS | MASK_ALIGN_DOUBLE | MASK_MS_BITFIELD_LAYOUT) -/* Sometimes certain combinations of command options do not make - sense on a particular target machine. You can define a macro - `OVERRIDE_OPTIONS' to take account of this. This macro, if - defined, is executed once just after all the command options have - been parsed. - - Don't use this macro to turn on various extra optimizations for - `-O'. That is what `OPTIMIZATION_OPTIONS' is for. */ -#undef OVERRIDE_OPTIONS -extern void netware_override_options (void); -#define OVERRIDE_OPTIONS netware_override_options () +/* Don't allow flag_pic to propagate since invalid relocations will + result otherwise. */ +#define SUBTARGET_OVERRIDE_OPTIONS \ +do { \ + if (flag_pic) \ + { \ + error ("-fPIC and -fpic are not supported for this target"); \ + flag_pic = 0; \ + } \ +} while (0) #undef MATH_LIBRARY #define MATH_LIBRARY "" @@ -99,6 +98,9 @@ extern void netware_override_options (void); #undef KEEP_AGGREGATE_RETURN_POINTER #define KEEP_AGGREGATE_RETURN_POINTER 1 +#undef ASM_COMMENT_START +#define ASM_COMMENT_START "#" + #undef DBX_REGISTER_NUMBER #define DBX_REGISTER_NUMBER(n) (svr4_dbx_register_map[n]) diff --git a/gcc/config/i386/nwld.h b/gcc/config/i386/nwld.h index be41e96e19a..3a0afc8b63d 100644 --- a/gcc/config/i386/nwld.h +++ b/gcc/config/i386/nwld.h @@ -55,6 +55,13 @@ void nwld_named_section_asm_out_destructor (rtx, int); #define TARGET_ASM_CONSTRUCTOR nwld_named_section_asm_out_constructor #define TARGET_ASM_DESTRUCTOR nwld_named_section_asm_out_destructor +#define SUBSUBTARGET_OVERRIDE_OPTIONS \ +do { \ + /* XXX This can be enabled once gas output meets nwld's needs. */ \ + /* if (!flag_unwind_tables && !flag_exceptions) */ \ + flag_dwarf2_cfi_asm = 0; \ +} while (0) + #undef EH_FRAME_SECTION_NAME #define EH_FRAME_SECTION_NAME ".eh_frame"TARGET_SUB_SECTION_SEPARATOR diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index b057d24bf22..630546ce2d9 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -353,6 +353,10 @@ struct machine_function GTY(()) #define REGNO_PAIR_OK(REGNO, MODE) \ (HARD_REGNO_NREGS ((REGNO), (MODE)) == 1 || !((REGNO) & 1)) +/* That's the read ahead of the dynamic branch prediction unit in + bytes on a z10 CPU. */ +#define Z10_PREDICT_DISTANCE 384 + static enum machine_mode s390_libgcc_cmp_return_mode (void) { @@ -9600,6 +9604,66 @@ s390_optimize_prologue (void) } } +/* On z10 the dynamic branch prediction must see the backward jump in + a window of 384 bytes. If not it falls back to the static + prediction. This function rearranges the loop backward branch in a + way which makes the static prediction always correct. The function + returns true if it added an instruction. */ +static bool +s390_z10_fix_long_loop_prediction (rtx insn) +{ + rtx set = single_set (insn); + rtx code_label, label_ref, new_label; + rtx uncond_jump; + rtx cur_insn; + rtx tmp; + int distance; + + /* This will exclude branch on count and branch on index patterns + since these are correctly statically predicted. */ + if (!set + || SET_DEST (set) != pc_rtx + || GET_CODE (SET_SRC(set)) != IF_THEN_ELSE) + return false; + + label_ref = (GET_CODE (XEXP (SET_SRC (set), 1)) == LABEL_REF ? + XEXP (SET_SRC (set), 1) : XEXP (SET_SRC (set), 2)); + + gcc_assert (GET_CODE (label_ref) == LABEL_REF); + + code_label = XEXP (label_ref, 0); + + if (INSN_ADDRESSES (INSN_UID (code_label)) == -1 + || INSN_ADDRESSES (INSN_UID (insn)) == -1 + || (INSN_ADDRESSES (INSN_UID (insn)) + - INSN_ADDRESSES (INSN_UID (code_label)) < Z10_PREDICT_DISTANCE)) + return false; + + for (distance = 0, cur_insn = PREV_INSN (insn); + distance < Z10_PREDICT_DISTANCE - 6; + distance += get_attr_length (cur_insn), cur_insn = PREV_INSN (cur_insn)) + if (!cur_insn || JUMP_P (cur_insn) || LABEL_P (cur_insn)) + return false; + + new_label = gen_label_rtx (); + uncond_jump = emit_jump_insn_after ( + gen_rtx_SET (VOIDmode, pc_rtx, + gen_rtx_LABEL_REF (VOIDmode, code_label)), + insn); + emit_label_after (new_label, uncond_jump); + + tmp = XEXP (SET_SRC (set), 1); + XEXP (SET_SRC (set), 1) = XEXP (SET_SRC (set), 2); + XEXP (SET_SRC (set), 2) = tmp; + INSN_CODE (insn) = -1; + + XEXP (label_ref, 0) = new_label; + JUMP_LABEL (insn) = new_label; + JUMP_LABEL (uncond_jump) = code_label; + + return true; +} + /* Returns 1 if INSN reads the value of REG for purposes not related to addressing of memory, and 0 otherwise. */ static int @@ -9682,97 +9746,87 @@ s390_swap_cmp (rtx cond, rtx *op0, rtx *op1, rtx insn) if that register's value is delivered via a bypass, then the pipeline recycles, thereby causing significant performance decline. This function locates such situations and exchanges the two - operands of the compare. */ -static void -s390_z10_optimize_cmp (void) + operands of the compare. The function return true whenever it + added an insn. */ +static bool +s390_z10_optimize_cmp (rtx insn) { - rtx insn, prev_insn, next_insn; - int added_NOPs = 0; + rtx prev_insn, next_insn; + bool insn_added_p = false; + rtx cond, *op0, *op1; - for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) + if (GET_CODE (PATTERN (insn)) == PARALLEL) { - rtx cond, *op0, *op1; + /* Handle compare and branch and branch on count + instructions. */ + rtx pattern = single_set (insn); - if (!INSN_P (insn) || INSN_CODE (insn) <= 0) - continue; - - if (GET_CODE (PATTERN (insn)) == PARALLEL) - { - /* Handle compare and branch and branch on count - instructions. */ - rtx pattern = single_set (insn); - - if (!pattern - || SET_DEST (pattern) != pc_rtx - || GET_CODE (SET_SRC (pattern)) != IF_THEN_ELSE) - continue; + if (!pattern + || SET_DEST (pattern) != pc_rtx + || GET_CODE (SET_SRC (pattern)) != IF_THEN_ELSE) + return false; - cond = XEXP (SET_SRC (pattern), 0); - op0 = &XEXP (cond, 0); - op1 = &XEXP (cond, 1); - } - else if (GET_CODE (PATTERN (insn)) == SET) - { - rtx src, dest; + cond = XEXP (SET_SRC (pattern), 0); + op0 = &XEXP (cond, 0); + op1 = &XEXP (cond, 1); + } + else if (GET_CODE (PATTERN (insn)) == SET) + { + rtx src, dest; - /* Handle normal compare instructions. */ - src = SET_SRC (PATTERN (insn)); - dest = SET_DEST (PATTERN (insn)); + /* Handle normal compare instructions. */ + src = SET_SRC (PATTERN (insn)); + dest = SET_DEST (PATTERN (insn)); - if (!REG_P (dest) - || !CC_REGNO_P (REGNO (dest)) - || GET_CODE (src) != COMPARE) - continue; + if (!REG_P (dest) + || !CC_REGNO_P (REGNO (dest)) + || GET_CODE (src) != COMPARE) + return false; - /* s390_swap_cmp will try to find the conditional - jump when passing NULL_RTX as condition. */ - cond = NULL_RTX; - op0 = &XEXP (src, 0); - op1 = &XEXP (src, 1); - } - else - continue; + /* s390_swap_cmp will try to find the conditional + jump when passing NULL_RTX as condition. */ + cond = NULL_RTX; + op0 = &XEXP (src, 0); + op1 = &XEXP (src, 1); + } + else + return false; - if (!REG_P (*op0) || !REG_P (*op1)) - continue; + if (!REG_P (*op0) || !REG_P (*op1)) + return false; - /* Swap the COMPARE arguments and its mask if there is a - conflicting access in the previous insn. */ - prev_insn = PREV_INSN (insn); + /* Swap the COMPARE arguments and its mask if there is a + conflicting access in the previous insn. */ + prev_insn = PREV_INSN (insn); + if (prev_insn != NULL_RTX && INSN_P (prev_insn) + && reg_referenced_p (*op1, PATTERN (prev_insn))) + s390_swap_cmp (cond, op0, op1, insn); + + /* Check if there is a conflict with the next insn. If there + was no conflict with the previous insn, then swap the + COMPARE arguments and its mask. If we already swapped + the operands, or if swapping them would cause a conflict + with the previous insn, issue a NOP after the COMPARE in + order to separate the two instuctions. */ + next_insn = NEXT_INSN (insn); + if (next_insn != NULL_RTX && INSN_P (next_insn) + && s390_non_addr_reg_read_p (*op1, next_insn)) + { if (prev_insn != NULL_RTX && INSN_P (prev_insn) - && reg_referenced_p (*op1, PATTERN (prev_insn))) - s390_swap_cmp (cond, op0, op1, insn); - - /* Check if there is a conflict with the next insn. If there - was no conflict with the previous insn, then swap the - COMPARE arguments and its mask. If we already swapped - the operands, or if swapping them would cause a conflict - with the previous insn, issue a NOP after the COMPARE in - order to separate the two instuctions. */ - next_insn = NEXT_INSN (insn); - if (next_insn != NULL_RTX && INSN_P (next_insn) - && s390_non_addr_reg_read_p (*op1, next_insn)) + && s390_non_addr_reg_read_p (*op0, prev_insn)) { - if (prev_insn != NULL_RTX && INSN_P (prev_insn) - && s390_non_addr_reg_read_p (*op0, prev_insn)) - { - if (REGNO (*op1) == 0) - emit_insn_after (gen_nop1 (), insn); - else - emit_insn_after (gen_nop (), insn); - added_NOPs = 1; - } + if (REGNO (*op1) == 0) + emit_insn_after (gen_nop1 (), insn); else - s390_swap_cmp (cond, op0, op1, insn); + emit_insn_after (gen_nop (), insn); + insn_added_p = true; } + else + s390_swap_cmp (cond, op0, op1, insn); } - - /* Adjust branches if we added new instructions. */ - if (added_NOPs) - shorten_branches (get_insns ()); + return insn_added_p; } - /* Perform machine-dependent processing. */ static void @@ -9883,10 +9937,33 @@ s390_reorg (void) /* Try to optimize prologue and epilogue further. */ s390_optimize_prologue (); - /* Eliminate z10-specific pipeline recycles related to some compare - instructions. */ + /* Walk over the insns and do some z10 specific changes. */ if (s390_tune == PROCESSOR_2097_Z10) - s390_z10_optimize_cmp (); + { + rtx insn; + bool insn_added_p = false; + + /* The insn lengths and addresses have to be up to date for the + following manipulations. */ + shorten_branches (get_insns ()); + + for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) + { + if (!INSN_P (insn) || INSN_CODE (insn) <= 0) + continue; + + if (JUMP_P (insn)) + insn_added_p |= s390_z10_fix_long_loop_prediction (insn); + + if (GET_CODE (PATTERN (insn)) == PARALLEL + || GET_CODE (PATTERN (insn)) == SET) + insn_added_p |= s390_z10_optimize_cmp (insn); + } + + /* Adjust branches if we added new instructions. */ + if (insn_added_p) + shorten_branches (get_insns ()); + } } diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index 5f61c09e3e0..f35017b7f9d 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -1076,6 +1076,64 @@ (const_int 6) (const_int 12)))]) ; 8 byte for clr/jg ; 10 byte for clgr/jg +; And now the same two patterns as above but with a negated CC mask. + +; cij, cgij, crj, cgrj, cfi, cgfi, cr, cgr +; The following instructions do a complementary access of their second +; operand (z01 only): crj_c, cgrjc, cr, cgr +(define_insn "*icmp_and_br_signed_<mode>" + [(set (pc) + (if_then_else (match_operator 0 "s390_signed_integer_comparison" + [(match_operand:GPR 1 "register_operand" "d,d") + (match_operand:GPR 2 "nonmemory_operand" "d,C")]) + (pc) + (label_ref (match_operand 3 "" "")))) + (clobber (reg:CC CC_REGNUM))] + "TARGET_Z10" +{ + if (get_attr_length (insn) == 6) + return which_alternative ? + "c<g>ij%D0\t%1,%c2,%l3" : "c<g>rj%D0\t%1,%2,%l3"; + else + return which_alternative ? + "c<g>fi\t%1,%c2\;jg%D0\t%l3" : "c<g>r\t%1,%2\;jg%D0\t%l3"; +} + [(set_attr "op_type" "RIE") + (set_attr "type" "branch") + (set_attr "z10prop" "z10_super_c,z10_super") + (set (attr "length") + (if_then_else (lt (abs (minus (pc) (match_dup 3))) (const_int 60000)) + (const_int 6) (const_int 12)))]) ; 8 byte for cr/jg + ; 10 byte for cgr/jg + +; clij, clgij, clrj, clgrj, clfi, clgfi, clr, clgr +; The following instructions do a complementary access of their second +; operand (z10 only): clrj, clgrj, clr, clgr +(define_insn "*icmp_and_br_unsigned_<mode>" + [(set (pc) + (if_then_else (match_operator 0 "s390_unsigned_integer_comparison" + [(match_operand:GPR 1 "register_operand" "d,d") + (match_operand:GPR 2 "nonmemory_operand" "d,I")]) + (pc) + (label_ref (match_operand 3 "" "")))) + (clobber (reg:CC CC_REGNUM))] + "TARGET_Z10" +{ + if (get_attr_length (insn) == 6) + return which_alternative ? + "cl<g>ij%D0\t%1,%b2,%l3" : "cl<g>rj%D0\t%1,%2,%l3"; + else + return which_alternative ? + "cl<g>fi\t%1,%b2\;jg%D0\t%l3" : "cl<g>r\t%1,%2\;jg%D0\t%l3"; +} + [(set_attr "op_type" "RIE") + (set_attr "type" "branch") + (set_attr "z10prop" "z10_super_c,z10_super") + (set (attr "length") + (if_then_else (lt (abs (minus (pc) (match_dup 3))) (const_int 60000)) + (const_int 6) (const_int 12)))]) ; 8 byte for clr/jg + ; 10 byte for clgr/jg + ;; ;;- Move instructions. ;; diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 0eac68b6581..989aadb8fe7 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,15 @@ +2009-08-31 Jason Merrill <jason@redhat.com> + + PR c++/41127 + * parser.c (cp_parser_enum_specifier): Make sure the : is followed by a + type-specifier-seq before we commit. + +2009-08-21 Jakub Jelinek <jakub@redhat.com> + + PR c++/41131 + * tree.c (lvalue_p_1) <case CONST_DECL>: Return clk_none if + not TREE_STATIC. + 2009-08-05 Jason Merrill <jason@redhat.com> PR c++/40948 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 26748624ca8..3d578d410c5 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -11871,11 +11871,19 @@ cp_parser_enum_specifier (cp_parser* parser) else identifier = make_anon_name (); - /* Check for the `:' that denotes a specified underlying type in C++0x. */ + /* Check for the `:' that denotes a specified underlying type in C++0x. + Note that a ':' could also indicate a bitfield width, however. */ if (cp_lexer_next_token_is (parser->lexer, CPP_COLON)) { cp_decl_specifier_seq type_specifiers; + /* Consume the `:'. */ + cp_lexer_consume_token (parser->lexer); + + /* Parse the type-specifier-seq. */ + cp_parser_type_specifier_seq (parser, /*is_condition=*/false, + &type_specifiers); + /* At this point this is surely not elaborated type specifier. */ if (!cp_parser_parse_definitely (parser)) return NULL_TREE; @@ -11883,15 +11891,8 @@ cp_parser_enum_specifier (cp_parser* parser) if (cxx_dialect == cxx98) maybe_warn_cpp0x ("scoped enums"); - /* Consume the `:'. */ - cp_lexer_consume_token (parser->lexer); - has_underlying_type = true; - /* Parse the type-specifier-seq. */ - cp_parser_type_specifier_seq (parser, /*is_condition=*/false, - &type_specifiers); - /* If that didn't work, stop. */ if (type_specifiers.type != error_mark_node) { diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 4503e52be49..de004dbf578 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -132,6 +132,12 @@ lvalue_p_1 (tree ref) return clk_ordinary; case CONST_DECL: + /* CONST_DECL without TREE_STATIC are enumeration values and + thus not lvalues. With TREE_STATIC they are used by ObjC++ + in objc_build_string_object and need to be considered as + lvalues. */ + if (! TREE_STATIC (ref)) + return clk_none; case VAR_DECL: if (TREE_READONLY (ref) && ! TREE_STATIC (ref) && DECL_LANG_SPECIFIC (ref) diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 0fc3ca372a6..df68210451c 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -2527,7 +2527,7 @@ printing with programs such as @command{dvips}. Alternately, by using @samp{make pdf} in place of @samp{make dvi}, you can create documentation in the form of @file{.pdf} files; this requires @command{texi2pdf}, which is included with Texinfo version 4.8 and later. You can also -@uref{http://www.gnu.org/order/order.html,,buy printed manuals from the +@uref{http://shop.fsf.org/,,buy printed manuals from the Free Software Foundation}, though such manuals may not be for the most recent version of GCC@. diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index e0fb666349a..352d3a17a8d 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -460,7 +460,7 @@ Objective-C and Objective-C++ Dialects}. -mfix-cortex-m3-ldrd} @emph{AVR Options} -@gccoptlist{-mmcu=@var{mcu} -msize -minit-stack=@var{n} -mno-interrupts @gol +@gccoptlist{-mmcu=@var{mcu} -msize -mno-interrupts @gol -mcall-prologues -mno-tablejump -mtiny-stack -mint8} @emph{Blackfin Options} @@ -9396,11 +9396,6 @@ atmega64, atmega128, at43usb355, at94k). @opindex msize Output instruction sizes to the asm file. -@item -minit-stack=@var{N} -@opindex minit-stack -Specify the initial stack address, which may be a symbol or numeric value, -@samp{__stack} is the default. - @item -mno-interrupts @opindex mno-interrupts Generated code is not compatible with hardware interrupts. diff --git a/gcc/doc/service.texi b/gcc/doc/service.texi index 4cc2b70888c..045676088e4 100644 --- a/gcc/doc/service.texi +++ b/gcc/doc/service.texi @@ -21,7 +21,7 @@ a bug in GCC, please report it following the instructions at @item Look in the service directory for someone who might help you for a fee. The service directory is found at -@uref{http://www.gnu.org/prep/service.html}. +@uref{http://www.fsf.org/resources/service}. @end itemize For further information, see diff --git a/gcc/expr.c b/gcc/expr.c index 1482a65d263..abac66a6c51 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -7807,6 +7807,33 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, || mode1 == BLKmode || bitpos + bitsize > GET_MODE_BITSIZE (mode2)); + /* Handle CONCAT first. */ + if (GET_CODE (op0) == CONCAT && !must_force_mem) + { + if (bitpos == 0 + && bitsize == GET_MODE_BITSIZE (GET_MODE (op0))) + return op0; + if (bitpos == 0 + && bitsize == GET_MODE_BITSIZE (GET_MODE (XEXP (op0, 0))) + && bitsize) + { + op0 = XEXP (op0, 0); + mode2 = GET_MODE (op0); + } + else if (bitpos == GET_MODE_BITSIZE (GET_MODE (XEXP (op0, 0))) + && bitsize == GET_MODE_BITSIZE (GET_MODE (XEXP (op0, 1))) + && bitpos + && bitsize) + { + op0 = XEXP (op0, 1); + bitpos = 0; + mode2 = GET_MODE (op0); + } + else + /* Otherwise force into memory. */ + must_force_mem = 1; + } + /* If this is a constant, put it in a register if it is a legitimate constant and we don't need a memory reference. */ if (CONSTANT_P (op0) @@ -7880,16 +7907,6 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, MEM_VOLATILE_P (op0) = 1; } - /* The following code doesn't handle CONCAT. - Assume only bitpos == 0 can be used for CONCAT, due to - one element arrays having the same mode as its element. */ - if (GET_CODE (op0) == CONCAT) - { - gcc_assert (bitpos == 0 - && bitsize == GET_MODE_BITSIZE (GET_MODE (op0))); - return op0; - } - /* In cases where an aligned union has an unaligned object as a field, we might be extracting a BLKmode value from an integer-mode (e.g., SImode) object. Handle this case diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 851bb80f6b0..2bb74ae1e8a 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2008-08-25 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/41062 + * trans-decl.c (gfc_trans_use_stmts): Keep going through use + list if symbol is not use associated. + 2009-08-16 Paul Thomas <pault@gcc.gnu.org> PR fortran/40847 diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index 5aec581709d..7967d23d142 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -3251,7 +3251,13 @@ gfc_trans_use_stmts (gfc_namespace * ns) st = gfc_find_symtree (ns->sym_root, rent->local_name[0] ? rent->local_name : rent->use_name); - gcc_assert (st && st->n.sym->attr.use_assoc); + gcc_assert (st); + + /* Fixing-up doubly contained symbols, sometimes results in + ambiguity, which is caught here. */ + if (!st->n.sym->attr.use_assoc) + continue; + if (st->n.sym->backend_decl && DECL_P (st->n.sym->backend_decl) && st->n.sym->module diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog index 65189cfe728..d8a0c3da3e9 100644 --- a/gcc/po/ChangeLog +++ b/gcc/po/ChangeLog @@ -1,3 +1,7 @@ +2009-08-31 Joseph Myers <joseph@codesourcery.com> + + * sv.po: Update. + 2009-08-06 Joseph Myers <joseph@codesourcery.com> * es.po: Update. diff --git a/gcc/po/sv.po b/gcc/po/sv.po index f8a9b4dd67d..ef67977d206 100644 --- a/gcc/po/sv.po +++ b/gcc/po/sv.po @@ -11,7 +11,7 @@ msgstr "" "Project-Id-Version: gcc 4.4.1\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2009-07-15 13:37+0200\n" -"PO-Revision-Date: 2009-07-28 12:12+0200\n" +"PO-Revision-Date: 2009-08-30 22:02+0200\n" "Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "MIME-Version: 1.0\n" @@ -19005,7 +19005,7 @@ msgstr "%<for%>-slinga med startdeklaration är endast tillåtet i C99-läge" #: c-decl.c:6859 #, gcc-internal-format msgid "use option -std=c99 or -std=gnu99 to compile your code" -msgstr "använd flagga -std?=c99 eller -std=gnu99 för att kompilera din kod" +msgstr "använd flaggan -std=c99 eller -std=gnu99 för att kompilera din kod" #: c-decl.c:6890 #, gcc-internal-format diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d7c8292ad73..352ab86d5ab 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,98 @@ +2009-08-31 Jason Merrill <jason@redhat.com> + + PR c++/41127 + * g++.dg/parse/enum5.C: New. + * g++.dg/cpp0x/enum1.C: Adjust expected error. + +2009-08-31 Gerald Pfeifer <gerald@pfeifer.com> + + * gcc.dg/builtins-config.h (HAVE_C99_RUNTIME): Do not define + for FreeBSD. + +2009-08-29 H.J. Lu <hongjiu.lu@intel.com> + + Backport from mainline: + 2009-08-26 H.J. Lu <hongjiu.lu@intel.com> + + PR fortran/41162 + * gfortran.dg/pr41162.f: New. + + 2009-08-26 Richard Guenther <rguenther@suse.de> + + PR middle-end/41163 + * gcc.c-torture/compile/pr41163.c: New testcase. + + 2009-08-25 Janus Weil <janus@gcc.gnu.org> + + PR fortran/41139 + * gfortran.dg/proc_ptr_25.f90: New. + * gfortran.dg/proc_ptr_comp_18.f90: New. + * gfortran.dg/proc_ptr_comp_19.f90: New. + + 2009-08-20 Michael Matz <matz@suse.de> + + PR fortran/41126 + * gfortran.dg/pr41126.f90: New test. + + 2009-08-20 Janus Weil <janus@gcc.gnu.org> + + PR fortran/41121 + * gfortran.dg/intrinsic_5.f90: New. + + 2009-08-19 Jason Merrill <jason@redhat.com> + + PR c++/41120 + * g++.dg/other/gc4.C: New. + +2009-08-28 Uros Bizjak <ubizjak@gmail.com> + + Backport from mainline: + 2009-08-25 Uros Bizjak <ubizjak@gmail.com> + + * gcc.c-torture/compile/limits-fndefn.c: Add dg-timeout-factor. + + 2009-08-18 Uros Bizjak <ubizjak@gmail.com> + + * g++.dg/cdce3.C: Add -mieee for alpha*-*-* targets. + + 2009-08-17 Uros Bizjak <ubizjak@gmail.com> + + * lib/target-supports.exp + (check_effective_target_vect_cmdline_needed): Add alpha to the list + of targets that do not need command line argument to enable SIMD. + +2008-08-25 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/41062 + * gfortran.dg/use_only_4.f90: New test. + +2009-08-24 Richard Guenther <rguenther@suse.de> + + PR middle-end/41094 + * gcc.dg/torture/pr41094.c: New testcase. + * gcc.dg/torture/builtin-power-1.c: Adjust. + * gcc.dg/builtins-10.c: Likewise. + +2009-08-23 Uros Bizjak <ubizjak@gmail.com> + + PR target/40718 + * gcc.target/i386/pr40718.c: New test. + +2009-08-21 Jakub Jelinek <jakub@redhat.com> + + PR c++/41131 + * g++.dg/expr/unary3.C: New test. + +2009-08-20 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR libfortran/40962 + * c_f_pointer_tests_4.f90: New test. + +2009-08-19 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/41123 + * gcc.dg/pr41123.c: New test. + 2009-08-18 H.J. Lu <hongjiu.lu@intel.com> * gfortran.dg/pr41011.f: Removed. diff --git a/gcc/testsuite/g++.dg/cdce3.C b/gcc/testsuite/g++.dg/cdce3.C index b73ebf81220..6756a700812 100644 --- a/gcc/testsuite/g++.dg/cdce3.C +++ b/gcc/testsuite/g++.dg/cdce3.C @@ -2,14 +2,14 @@ /* { dg-require-effective-target c99_runtime } */ /* { dg-options "-O2 -fmath-errno -fdump-tree-cdce-details -DGNU_EXTENSION -DLARGE_LONG_DOUBLE -lm" { target { pow10 && large_long_double } } } */ /* { dg-options "-O2 -fmath-errno -fdump-tree-cdce-details -DLARGE_LONG_DOUBLE -lm" { target { {! pow10 } && large_long_double } } } */ -/* { dg-options "-O2 -fmath-errno -fdump-tree-cdce-details -DGNU_EXTENSION -lm" { target {pow10 && {! large_long_double } } } } */ +/* { dg-options "-O2 -fmath-errno -fdump-tree-cdce-details -DGNU_EXTENSION -lm" { target { pow10 && {! large_long_double } } } } */ /* { dg-options "-O2 -fmath-errno -fdump-tree-cdce-details -lm" { target { {! pow10 } && {! large_long_double } } } } */ -/* { dg-final { scan-tree-dump "cdce3.C:91: note: function call is shrink-wrapped into error conditions\." "cdce" { target { pow10 } } } } */ -/* { dg-final { scan-tree-dump "cdce3.C:92: note: function call is shrink-wrapped into error conditions\." "cdce" { target { pow10 } } } } */ -/* { dg-final { scan-tree-dump "cdce3.C:94: note: function call is shrink-wrapped into error conditions\." "cdce" } } */ -/* { dg-final { scan-tree-dump "cdce3.C:95: note: function call is shrink-wrapped into error conditions\." "cdce" } } */ -/* { dg-final { scan-tree-dump "cdce3.C:96: note: function call is shrink-wrapped into error conditions\." "cdce" } } */ -/* { dg-final { scan-tree-dump "cdce3.C:97: note: function call is shrink-wrapped into error conditions\." "cdce" } } */ +/* { dg-options "-mieee -O2 -fmath-errno -fdump-tree-cdce-details -DGNU_EXTENSION -DLARGE_LONG_DOUBLE -lm" { target { alpha*-*-* && { pow10 && large_long_double } } } } */ +/* { dg-options "-mieee -O2 -fmath-errno -fdump-tree-cdce-details -DLARGE_LONG_DOUBLE -lm" { target { alpha*-*-* && { {! pow10 } && large_long_double } } } } */ +/* { dg-options "-mieee -O2 -fmath-errno -fdump-tree-cdce-details -DGNU_EXTENSION -lm" { target { alpha*-*-* && { pow10 && {! large_long_double } } } } } */ +/* { dg-options "-mieee -O2 -fmath-errno -fdump-tree-cdce-details -lm" { target { alpha*-*-* && { {! pow10 } && {! large_long_double } } } } } */ +/* { dg-final { scan-tree-dump "cdce3.C:95: note: function call is shrink-wrapped into error conditions\." "cdce" { target { pow10 } } } } */ +/* { dg-final { scan-tree-dump "cdce3.C:96: note: function call is shrink-wrapped into error conditions\." "cdce" { target { pow10 } } } } */ /* { dg-final { scan-tree-dump "cdce3.C:98: note: function call is shrink-wrapped into error conditions\." "cdce" } } */ /* { dg-final { scan-tree-dump "cdce3.C:99: note: function call is shrink-wrapped into error conditions\." "cdce" } } */ /* { dg-final { scan-tree-dump "cdce3.C:100: note: function call is shrink-wrapped into error conditions\." "cdce" } } */ @@ -20,6 +20,10 @@ /* { dg-final { scan-tree-dump "cdce3.C:105: note: function call is shrink-wrapped into error conditions\." "cdce" } } */ /* { dg-final { scan-tree-dump "cdce3.C:106: note: function call is shrink-wrapped into error conditions\." "cdce" } } */ /* { dg-final { scan-tree-dump "cdce3.C:107: note: function call is shrink-wrapped into error conditions\." "cdce" } } */ +/* { dg-final { scan-tree-dump "cdce3.C:108: note: function call is shrink-wrapped into error conditions\." "cdce" } } */ +/* { dg-final { scan-tree-dump "cdce3.C:109: note: function call is shrink-wrapped into error conditions\." "cdce" } } */ +/* { dg-final { scan-tree-dump "cdce3.C:110: note: function call is shrink-wrapped into error conditions\." "cdce" } } */ +/* { dg-final { scan-tree-dump "cdce3.C:111: note: function call is shrink-wrapped into error conditions\." "cdce" } } */ /* { dg-final { cleanup-tree-dump "cdce" } } */ #include <stdlib.h> #include <math.h> diff --git a/gcc/testsuite/g++.dg/cpp0x/enum1.C b/gcc/testsuite/g++.dg/cpp0x/enum1.C index af691f028b1..fb03692fab4 100644 --- a/gcc/testsuite/g++.dg/cpp0x/enum1.C +++ b/gcc/testsuite/g++.dg/cpp0x/enum1.C @@ -2,5 +2,5 @@ // { dg-do compile } // { dg-options "-std=gnu++0x" } -enum : { }; // { dg-error "expected type-specifier" } +enum : { }; // { dg-error "expected" } enum : 3 { }; // { dg-error "expected" } diff --git a/gcc/testsuite/g++.dg/expr/unary3.C b/gcc/testsuite/g++.dg/expr/unary3.C new file mode 100644 index 00000000000..abca0322d29 --- /dev/null +++ b/gcc/testsuite/g++.dg/expr/unary3.C @@ -0,0 +1,11 @@ +// PR c++/41131 +// { dg-do compile } + +struct X { enum E { a = 100 }; }; + +int +main () +{ + X x; + (void) &x.a; // { dg-error "lvalue required" } +} diff --git a/gcc/testsuite/g++.dg/other/gc4.C b/gcc/testsuite/g++.dg/other/gc4.C new file mode 100644 index 00000000000..50c16b366db --- /dev/null +++ b/gcc/testsuite/g++.dg/other/gc4.C @@ -0,0 +1,14 @@ +// PR c++/41120 +// { dg-options "--param ggc-min-heapsize=0 --param ggc-min-expand=0" } + +struct A +{ + A(); +}; + +struct B +{ + A a; +}; + +B b; diff --git a/gcc/testsuite/g++.dg/parse/enum5.C b/gcc/testsuite/g++.dg/parse/enum5.C new file mode 100644 index 00000000000..3ebb02f7573 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/enum5.C @@ -0,0 +1,17 @@ +// PR c++/41127 + +#define CHAR_BIT 8 +enum EE {ee}; +typedef unsigned int T; + +struct D { + T : sizeof(unsigned int) * CHAR_BIT; // OK + EE : sizeof(EE) * CHAR_BIT; // OK + enum EE : sizeof(EE) * CHAR_BIT; // not OK + enum EE xxxx : sizeof(EE) * CHAR_BIT; // OK + T x : sizeof(unsigned int) * CHAR_BIT; // OK + enum FF {ff} : sizeof(int) * CHAR_BIT; // OK +} element; + +enum EE xx; +EE yy; diff --git a/gcc/testsuite/gcc.c-torture/compile/limits-fndefn.c b/gcc/testsuite/gcc.c-torture/compile/limits-fndefn.c index 10f8714414f..65e60b39e1a 100644 --- a/gcc/testsuite/gcc.c-torture/compile/limits-fndefn.c +++ b/gcc/testsuite/gcc.c-torture/compile/limits-fndefn.c @@ -1,4 +1,5 @@ /* { dg-skip-if "too complex for avr and picochip" { picochip-*-* avr-*-* } { "*" } { "" } } */ +/* { dg-timeout-factor 4.0 } */ #define LIM1(x) x##0, x##1, x##2, x##3, x##4, x##5, x##6, x##7, x##8, x##9, #define LIM2(x) LIM1(x##0) LIM1(x##1) LIM1(x##2) LIM1(x##3) LIM1(x##4) \ LIM1(x##5) LIM1(x##6) LIM1(x##7) LIM1(x##8) LIM1(x##9) diff --git a/gcc/testsuite/gcc.c-torture/compile/pr41163.c b/gcc/testsuite/gcc.c-torture/compile/pr41163.c new file mode 100644 index 00000000000..c2248378376 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr41163.c @@ -0,0 +1,10 @@ +struct option { + void *value; +}; +void parse_options (struct option *); +void cmd_grep(void) +{ + struct option options[] = { { &options } }; + parse_options(options); +} + diff --git a/gcc/testsuite/gcc.dg/builtins-10.c b/gcc/testsuite/gcc.dg/builtins-10.c index d90e61ab326..1b141fda252 100644 --- a/gcc/testsuite/gcc.dg/builtins-10.c +++ b/gcc/testsuite/gcc.dg/builtins-10.c @@ -25,7 +25,7 @@ void test(double x) link_error (); if (pow(pow(x,4.0),0.25) != x) - link_error (); + /* XFAIL. PR41098. */; } void test2(double x, double y, double z) @@ -42,7 +42,7 @@ void test2(double x, double y, double z) if (pow(sqrt(x),y) != pow(x,y*0.5)) link_error (); - if (pow(pow(x,y),z) != pow(x,y*z)) + if (pow(pow(fabs(x),y),z) != pow(fabs(x),y*z)) link_error (); } diff --git a/gcc/testsuite/gcc.dg/builtins-config.h b/gcc/testsuite/gcc.dg/builtins-config.h index 7e375b8d693..eacc09dcf94 100644 --- a/gcc/testsuite/gcc.dg/builtins-config.h +++ b/gcc/testsuite/gcc.dg/builtins-config.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation. +/* Copyright (C) 2003, 2004, 2005, 2006, 2009 Free Software Foundation. Define macros useful in tests for bulitin functions. */ @@ -15,8 +15,8 @@ /* Irix6 doesn't have the entire C99 runtime. */ #elif defined(__AVR__) /* AVR doesn't have the entire C99 runtime. */ -#elif defined(__FreeBSD__) && (__FreeBSD__ < 5) -/* FreeBSD before version 5 doesn't have the entire C99 runtime. */ +#elif defined(__FreeBSD__) +/* FreeBSD up to at least version 8 lacks support for cexp and friends. */ #elif defined(__netware__) /* NetWare doesn't have the entire C99 runtime. */ #elif defined(__vxworks) diff --git a/gcc/testsuite/gcc.dg/pr41123.c b/gcc/testsuite/gcc.dg/pr41123.c new file mode 100644 index 00000000000..076edb46ee5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr41123.c @@ -0,0 +1,46 @@ +/* PR middle-end/41123 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-strict-aliasing" } */ + +struct S { char a, b, c, d, e, f, g, h; }; +struct T { int a, b; }; + +struct S +f1 (float _Complex x) +{ + return *(struct S *) & x; +} + +int +f2 (float _Complex x) +{ + struct S f = f1 (x); + return f.b; +} + +struct T +f3 (float _Complex x) +{ + return *(struct T *) & x; +} + +int +f4 (float _Complex x) +{ + struct T f = f3 (x); + return f.a; +} + +int +f5 (float _Complex x) +{ + struct T f = f3 (x); + return f.b; +} + +struct T +f6 (float _Complex x) +{ + struct T f = f3 (x); + return f; +} diff --git a/gcc/testsuite/gcc.dg/torture/builtin-power-1.c b/gcc/testsuite/gcc.dg/torture/builtin-power-1.c index a63ebf55423..d1403c46c94 100644 --- a/gcc/testsuite/gcc.dg/torture/builtin-power-1.c +++ b/gcc/testsuite/gcc.dg/torture/builtin-power-1.c @@ -77,9 +77,9 @@ void test(double d1, double d2, double d3, /* Test pow(pow(x,y),z) -> pow(x,y*z). */ #define POW_POW \ extern void link_failure_pow_pow(void); \ - if (pow(pow(d1, d2), d3) != pow(d1,d2*d3) \ - || powf(powf(f1,f2),f3) != powf(f1,f2*f3) \ - || powl(powl(ld1,ld2),ld3) != powl(ld1,ld2*ld3)) \ + if (pow(pow(fabs(d1), d2), d3) != pow(fabs(d1),d2*d3) \ + || powf(powf(fabs(f1),f2),f3) != powf(fabs(f1),f2*f3) \ + || powl(powl(fabs(ld1),ld2),ld3) != powl(fabs(ld1),ld2*ld3)) \ link_failure_pow_pow() POW_POW; diff --git a/gcc/testsuite/gcc.dg/torture/pr41094.c b/gcc/testsuite/gcc.dg/torture/pr41094.c new file mode 100644 index 00000000000..2a4e9616cbf --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr41094.c @@ -0,0 +1,19 @@ +/* { dg-do run } */ +/* { dg-options "-ffast-math" } */ + +#include <math.h> + +extern void abort (void); + +double foo(void) +{ + double x = -4.0; + return pow (x * x, 0.25); +} + +int main() +{ + if (foo() != 2.0) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.target/i386/pr40718.c b/gcc/testsuite/gcc.target/i386/pr40718.c new file mode 100644 index 00000000000..f6029ed98ab --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr40718.c @@ -0,0 +1,36 @@ +/* { dg-do run } */ +/* { dg-require-effective-target ilp32 } */ +/* { dg-options "-O1 -foptimize-sibling-calls" } */ + +void abort (void); + +struct S +{ + void (__attribute__((__stdcall__)) *f) (struct S *); + int i; +}; + +void __attribute__((__stdcall__)) +foo (struct S *s) +{ + s->i++; +} + +void __attribute__((__stdcall__)) +bar (struct S *s) +{ + foo(s); + s->f(s); +} + +int main (void) +{ + struct S s = { foo, 0 }; + + bar (&s); + if (s.i != 2) + abort (); + + return 0; +} + diff --git a/gcc/testsuite/gfortran.dg/c_f_pointer_tests_4.f90 b/gcc/testsuite/gfortran.dg/c_f_pointer_tests_4.f90 new file mode 100644 index 00000000000..4f5338d605a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/c_f_pointer_tests_4.f90 @@ -0,0 +1,15 @@ +! { dg-do run } +program main + use iso_c_binding, only: c_ptr, c_loc, c_f_pointer + implicit none + integer, dimension(2,1,2), target :: table + table = reshape ( (/ 1,2,-1,-2/), (/2,1,2/)) + call set_table (c_loc (table)) +contains + subroutine set_table (cptr) + type(c_ptr), intent(in) :: cptr + integer, dimension(:,:,:), pointer :: table_tmp + call c_f_pointer (cptr, table_tmp, (/2,1,2/)) + if (any(table_tmp /= table)) call abort + end subroutine set_table +end program main diff --git a/gcc/testsuite/gfortran.dg/intrinsic_5.f90 b/gcc/testsuite/gfortran.dg/intrinsic_5.f90 new file mode 100644 index 00000000000..77ecf32beeb --- /dev/null +++ b/gcc/testsuite/gfortran.dg/intrinsic_5.f90 @@ -0,0 +1,13 @@ +! { dg-do compile } +! { dg-options "-fimplicit-none" } +! +! PR 41121: [4.5 Regression] compile-time error when building BLAS with -fimplicit-none +! +! Original test case: http://www.netlib.org/blas/dgbmv.f +! Reduced by Joost VandeVondele <jv244@cam.ac.uk> + + INTRINSIC MIN + INTEGER :: I,J + print *,MIN(I,J) +END + diff --git a/gcc/testsuite/gfortran.dg/pr41126.f90 b/gcc/testsuite/gfortran.dg/pr41126.f90 new file mode 100644 index 00000000000..a43758eadaa --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr41126.f90 @@ -0,0 +1,6 @@ +! { dg-do compile } +SUBROUTINE write_cputime( checkpoint ) + CHARACTER(LEN=*), INTENT(IN) :: checkpoint + CHARACTER(LEN=LEN_TRIM(checkpoint)+7) :: string1 + string1 = ADJUSTL(string1) +END SUBROUTINE write_cputime diff --git a/gcc/testsuite/gfortran.dg/pr41162.f b/gcc/testsuite/gfortran.dg/pr41162.f new file mode 100644 index 00000000000..eea3c55f6c1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr41162.f @@ -0,0 +1,5 @@ +! { dg-do compile } +! PRs 41154/41162 + write (*,'(1PD24.15,F4.2,0P)') 1.0d0 + write (*,'(1PD24.15,F4.2,0P/)') 1.0d0 + end diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_25.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_25.f90 new file mode 100644 index 00000000000..cfa0d443478 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/proc_ptr_25.f90 @@ -0,0 +1,36 @@ +! { dg-do run } +! +! PR 41139: [4.5 Regression] a procedure pointer call as actual argument +! +! Original test case by Barron Bichon <barron.bichon@swri.org> +! Modified by Janus Weil <janus@gcc.gnu.org> + +PROGRAM test + + PROCEDURE(add), POINTER :: f + logical :: g + + ! Passing the function works + g=greater(4.,add(1.,2.)) + if (.not. g) call abort() + + ! Passing the procedure pointer fails + f => add + g=greater(4.,f(1.,2.)) + if (.not. g) call abort() + +CONTAINS + + REAL FUNCTION add(x,y) + REAL, INTENT(in) :: x,y + print *,"add:",x,y + add = x+y + END FUNCTION add + + LOGICAL FUNCTION greater(x,y) + REAL, INTENT(in) :: x, y + greater = (x > y) + END FUNCTION greater + +END PROGRAM test + diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_comp_18.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_comp_18.f90 new file mode 100644 index 00000000000..4b849b64e18 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/proc_ptr_comp_18.f90 @@ -0,0 +1,33 @@ +! { dg-do run } +! +! PR 41139: [4.5 Regression] a procedure pointer call as actual argument +! +! Contributed by Janus Weil <janus@gcc.gnu.org> + +PROGRAM test + + type :: t + PROCEDURE(add), POINTER, nopass :: f + end type + type(t) :: o + logical :: g + + o%f => add + g=greater(4.,o%f(1.,2.)) + if (.not. g) call abort() + +CONTAINS + + REAL FUNCTION add(x,y) + REAL, INTENT(in) :: x,y + add = x+y + END FUNCTION add + + LOGICAL FUNCTION greater(x,y) + REAL, INTENT(in) :: x, y + print *,"greater:",x,y + greater = (x > y) + END FUNCTION greater + +END PROGRAM test + diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_comp_19.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_comp_19.f90 new file mode 100644 index 00000000000..8027c82d39b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/proc_ptr_comp_19.f90 @@ -0,0 +1,32 @@ +! { dg-do run } +! +! PR 41139: [4.5 Regression] a procedure pointer call as actual argument +! +! Contributed by Janus Weil <janus@gcc.gnu.org> + +PROGRAM test + + type :: t + PROCEDURE(three), POINTER, nopass :: f + end type + type(t) :: o + logical :: g + + o%f => three + g=greater(4.,o%f()) + if (.not. g) call abort() + +CONTAINS + + REAL FUNCTION three() + three = 3. + END FUNCTION + + LOGICAL FUNCTION greater(x,y) + REAL, INTENT(in) :: x, y + print *,"greater:",x,y + greater = (x > y) + END FUNCTION greater + +END PROGRAM test + diff --git a/gcc/testsuite/gfortran.dg/use_only_4.f90 b/gcc/testsuite/gfortran.dg/use_only_4.f90 new file mode 100644 index 00000000000..a37db45ef77 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/use_only_4.f90 @@ -0,0 +1,34 @@ +! { dg-do compile } +! Test the fix for PR41062, in which an ICE would ensue because +! of confusion between the two 'one's in the creation of module +! debug info. +! +! Reported by Norman S. Clerman <clerman@fuse.net> +! Reduced testcase by Tobias Burnus <burnus@gcc.gnu.org> +! +module m1 + interface one ! GENERIC "one" + module procedure one1 + end interface +contains + subroutine one1() + call abort + end subroutine one1 +end module m1 + +module m2 +use m1, only : one ! USE generic "one" +contains + subroutine two() + call one() ! Call internal "one" + contains + subroutine one() ! Internal "one" + print *, "m2" + end subroutine one + end subroutine two +end module m2 + + use m2 + call two +end +! { dg-final { cleanup-modules "m1 m2" } } diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 4b151b517c4..6b6dff0139e 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -1276,7 +1276,8 @@ proc check_effective_target_vect_cmdline_needed { } { verbose "check_effective_target_vect_cmdline_needed: using cached result" 2 } else { set et_vect_cmdline_needed_saved 1 - if { [istarget ia64-*-*] + if { [istarget alpha*-*-*] + || [istarget ia64-*-*] || (([istarget x86_64-*-*] || [istarget i?86-*-*]) && [check_effective_target_lp64]) || ([istarget powerpc*-*-*] diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index dce83b4b19e..ff9ae3a6b5b 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,16 @@ +2009-08-24 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/41157 + * dtime.c (dtime_sub): Fix computing time increment. + * time_1.h: Add <sys/types.h> header. Use RUSAGE_SELF macro instead + of a hardcoded 0. + +2009-08-20 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR libfortran/40962 + * iso_c_binding.c (c_f_pointer_u0): Multiply stride by + previous stride. + 2009-08-04 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/40853 diff --git a/libgfortran/intrinsics/dtime.c b/libgfortran/intrinsics/dtime.c index 40028a689c2..868f724f126 100644 --- a/libgfortran/intrinsics/dtime.c +++ b/libgfortran/intrinsics/dtime.c @@ -38,9 +38,10 @@ iexport_proto(dtime_sub); void dtime_sub (gfc_array_r4 *t, GFC_REAL_4 *result) { - static GFC_REAL_4 tu = 0.0, ts = 0.0, tt = 0.0; GFC_REAL_4 *tp; long user_sec, user_usec, system_sec, system_usec; + static long us = 0, uu = 0, ss = 0 , su = 0; + GFC_REAL_4 tu, ts, tt; if (((t->dim[0].ubound + 1 - t->dim[0].lbound)) < 2) runtime_error ("Insufficient number of elements in TARRAY."); @@ -48,15 +49,19 @@ dtime_sub (gfc_array_r4 *t, GFC_REAL_4 *result) __gthread_mutex_lock (&dtime_update_lock); if (__time_1 (&user_sec, &user_usec, &system_sec, &system_usec) == 0) { - tu = (GFC_REAL_4)(user_sec + 1.e-6 * user_usec) - tu; - ts = (GFC_REAL_4)(system_sec + 1.e-6 * system_usec) - ts; + tu = (GFC_REAL_4) ((user_sec - us) + 1.e-6 * (user_usec - uu)); + ts = (GFC_REAL_4) ((system_sec - ss) + 1.e-6 * (system_usec - su)); tt = tu + ts; + us = user_sec; + uu = user_usec; + ss = system_sec; + su = system_usec; } else { - tu = (GFC_REAL_4)-1.0; - ts = (GFC_REAL_4)-1.0; - tt = (GFC_REAL_4)-1.0; + tu = -1; + ts = -1; + tt = -1; } tp = t->data; diff --git a/libgfortran/intrinsics/iso_c_binding.c b/libgfortran/intrinsics/iso_c_binding.c index a8d876832cb..f2296c5adc9 100644 --- a/libgfortran/intrinsics/iso_c_binding.c +++ b/libgfortran/intrinsics/iso_c_binding.c @@ -137,8 +137,8 @@ ISO_C_BINDING_PREFIX (c_f_pointer_u0) (void *c_ptr_in, f_ptr_out->offset = f_ptr_out->dim[0].lbound * f_ptr_out->dim[0].stride; for (i = 1; i < shapeSize; i++) { - f_ptr_out->dim[i].stride = (f_ptr_out->dim[i-1].ubound + 1) - - f_ptr_out->dim[i-1].lbound; + f_ptr_out->dim[i].stride = ((f_ptr_out->dim[i-1].ubound + 1) + - f_ptr_out->dim[i-1].lbound) * f_ptr_out->dim[i-1].stride; f_ptr_out->offset += f_ptr_out->dim[i].lbound * f_ptr_out->dim[i].stride; } diff --git a/libgfortran/intrinsics/time_1.h b/libgfortran/intrinsics/time_1.h index a93b7e0202a..03e14edc414 100644 --- a/libgfortran/intrinsics/time_1.h +++ b/libgfortran/intrinsics/time_1.h @@ -51,6 +51,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see # endif #endif +#ifdef HAVE_SYS_TYPES_H + #include <sys/types.h> +#endif + /* The most accurate way to get the CPU time is getrusage (). */ #if defined (HAVE_GETRUSAGE) && defined (HAVE_SYS_RESOURCE_H) # include <sys/resource.h> @@ -112,7 +116,7 @@ __time_1 (long *user_sec, long *user_usec, long *system_sec, long *system_usec) { #if defined (HAVE_GETRUSAGE) && defined (HAVE_SYS_RESOURCE_H) struct rusage usage; - getrusage (0, &usage); + getrusage (RUSAGE_SELF, &usage); *user_sec = usage.ru_utime.tv_sec; *user_usec = usage.ru_utime.tv_usec; diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index f91f84fca10..a4a16933388 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,8 @@ +2009-08-19 Tobias Burnus <burnus@net-b.de> + + PR fortran/41102 + omp_lib.h.in: Fix -std=f95 errors. + 2009-07-22 Release Manager * GCC 4.4.1 released. diff --git a/libgomp/omp_lib.h.in b/libgomp/omp_lib.h.in index b42330bd383..2ff7a42fa8f 100644 --- a/libgomp/omp_lib.h.in +++ b/libgomp/omp_lib.h.in @@ -42,16 +42,16 @@ external omp_set_num_threads external omp_get_dynamic, omp_get_nested - logical*4 omp_get_dynamic, omp_get_nested + logical(4) omp_get_dynamic, omp_get_nested external omp_test_lock, omp_in_parallel - logical*4 omp_test_lock, omp_in_parallel + logical(4) omp_test_lock, omp_in_parallel external omp_get_max_threads, omp_get_num_procs - integer*4 omp_get_max_threads, omp_get_num_procs + integer(4) omp_get_max_threads, omp_get_num_procs external omp_get_num_threads, omp_get_thread_num - integer*4 omp_get_num_threads, omp_get_thread_num + integer(4) omp_get_num_threads, omp_get_thread_num external omp_test_nest_lock - integer*4 omp_test_nest_lock + integer(4) omp_test_nest_lock external omp_get_wtick, omp_get_wtime double precision omp_get_wtick, omp_get_wtime @@ -61,6 +61,6 @@ external omp_get_max_active_levels, omp_get_level external omp_get_ancestor_thread_num, omp_get_team_size external omp_get_active_level - integer*4 omp_get_thread_limit, omp_get_max_active_levels - integer*4 omp_get_level, omp_get_ancestor_thread_num - integer*4 omp_get_team_size, omp_get_active_level + integer(4) omp_get_thread_limit, omp_get_max_active_levels + integer(4) omp_get_level, omp_get_ancestor_thread_num + integer(4) omp_get_team_size, omp_get_active_level diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index fe14fe4c150..5eda2d6fdc9 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,13 @@ +2009-08-26 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/41005 + * configure.ac: Bump libtool_VERSION to 6:13:0. + * configure: Regenerate. + * src/Makefile.am: Compile fstream-inst.cc as C++0x. + * src/Makefile.in: Regenerate. + * config/abi/pre/gnu.ver: Add new symbols and disambiguate old ones. + * testsuite/util/testsuite_abi.cc: Add GLIBCXX_3.4.13 version. + 2009-07-22 Paolo Carlini <paolo.carlini@oracle.com> * include/std/valarray (valarray<>::operator=(initializer_list<>)): diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver index 240e7bcf09b..d3337f85389 100644 --- a/libstdc++-v3/config/abi/pre/gnu.ver +++ b/libstdc++-v3/config/abi/pre/gnu.ver @@ -32,7 +32,9 @@ GLIBCXX_3.4 { std::a[e-z]*; # std::ba[a-r]*; std::basic_[a-e]*; - std::basic_f[a-r]*; + std::basic_f[a-h]*; +# std::basic_filebuf; + std::basic_f[j-r]*; # std::basic_fstream; std::basic_f[t-z]*; std::basic_[g-h]*; @@ -273,28 +275,40 @@ GLIBCXX_3.4 { _ZNSdC*; _ZNSdD*; + # std::basic_filebuf + _ZNSt13basic_filebufI[cw]St11char_traitsI[cw]EEC*; + _ZNSt13basic_filebufI[cw]St11char_traitsI[cw]EED*; + _ZNSt13basic_filebufI[cw]St11char_traitsI[cw]EE[0-3]*; + _ZNSt13basic_filebufI[cw]St11char_traitsI[cw]EE4openEPKc*; + _ZNSt13basic_filebufI[cw]St11char_traitsI[cw]EE4sync*; + _ZNSt13basic_filebufI[cw]St11char_traitsI[cw]EE[5-9]*; + _ZNKSt13basic_filebufI[cw]St11char_traitsI[cw]EE7is_openEv; + # std::basic_fstream - _ZNSt13basic_fstreamI[cw]St11char_traitsI[cw]EEC*; + _ZNSt13basic_fstreamI[cw]St11char_traitsI[cw]EEC[12]Ev; + _ZNSt13basic_fstreamI[cw]St11char_traitsI[cw]EEC[12]EPKc*; _ZNSt13basic_fstreamI[cw]St11char_traitsI[cw]EED*; _ZNSt13basic_fstreamI[cw]St11char_traitsI[cw]EE5closeEv; _ZNSt13basic_fstreamI[cw]St11char_traitsI[cw]EE7is_openEv; - _ZNSt13basic_fstreamI[cw]St11char_traitsI[cw]EE4open*; + _ZNSt13basic_fstreamI[cw]St11char_traitsI[cw]EE4openEPKc*; _ZNKSt13basic_fstreamI[cw]St11char_traitsI[cw]EE5rdbufEv; # std::basic_ifstream - _ZNSt14basic_ifstreamI[cw]St11char_traitsI[cw]EEC*; + _ZNSt14basic_ifstreamI[cw]St11char_traitsI[cw]EEC[12]Ev; + _ZNSt14basic_ifstreamI[cw]St11char_traitsI[cw]EEC[12]EPKc*; _ZNSt14basic_ifstreamI[cw]St11char_traitsI[cw]EED*; _ZNSt14basic_ifstreamI[cw]St11char_traitsI[cw]EE5closeEv; _ZNSt14basic_ifstreamI[cw]St11char_traitsI[cw]EE7is_openEv; - _ZNSt14basic_ifstreamI[cw]St11char_traitsI[cw]EE4open*; + _ZNSt14basic_ifstreamI[cw]St11char_traitsI[cw]EE4openEPKc*; _ZNKSt14basic_ifstreamI[cw]St11char_traitsI[cw]EE5rdbufEv; # std::basic_ofstream - _ZNSt14basic_ofstreamI[cw]St11char_traitsI[cw]EEC*; + _ZNSt14basic_ofstreamI[cw]St11char_traitsI[cw]EEC[12]Ev; + _ZNSt14basic_ofstreamI[cw]St11char_traitsI[cw]EEC[12]EPKc*; _ZNSt14basic_ofstreamI[cw]St11char_traitsI[cw]EED*; _ZNSt14basic_ofstreamI[cw]St11char_traitsI[cw]EE5closeEv; _ZNSt14basic_ofstreamI[cw]St11char_traitsI[cw]EE7is_openEv; - _ZNSt14basic_ofstreamI[cw]St11char_traitsI[cw]EE4open*; + _ZNSt14basic_ofstreamI[cw]St11char_traitsI[cw]EE4openEPKc*; _ZNKSt14basic_ofstreamI[cw]St11char_traitsI[cw]EE5rdbufEv; # std::basic_istream<char> @@ -966,6 +980,19 @@ GLIBCXX_3.4.12 { } GLIBCXX_3.4.11; +GLIBCXX_3.4.13 { + + # new fstream members + _ZNSt13basic_filebufI[cw]St11char_traitsI[cw]EE4openERKSsSt13_Ios_Openmode; + _ZNSt13basic_fstreamI[cw]St11char_traitsI[cw]EEC[12]ERKSsSt13_Ios_Openmode; + _ZNSt13basic_fstreamI[cw]St11char_traitsI[cw]EE4openERKSsSt13_Ios_Openmode; + _ZNSt14basic_ifstreamI[cw]St11char_traitsI[cw]EEC[12]ERKSsSt13_Ios_Openmode; + _ZNSt14basic_ifstreamI[cw]St11char_traitsI[cw]EE4openERKSsSt13_Ios_Openmode; + _ZNSt14basic_ofstreamI[cw]St11char_traitsI[cw]EEC[12]ERKSsSt13_Ios_Openmode; + _ZNSt14basic_ofstreamI[cw]St11char_traitsI[cw]EE4openERKSsSt13_Ios_Openmode; + +} GLIBCXX_3.4.12; + # Symbols in the support library (libsupc++) have their own tag. CXXABI_1.3 { diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index a80bbaecb43..20803a6ead3 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -1567,7 +1567,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu ### am handles this now? ORIGINAL_LD_FOR_MULTILIBS=$LD # For libtool versioning info, format is CURRENT:REVISION:AGE -libtool_VERSION=6:12:0 +libtool_VERSION=6:13:0 # Find the rest of the source tree framework. diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac index 334e918e349..977e12cf91d 100644 --- a/libstdc++-v3/configure.ac +++ b/libstdc++-v3/configure.ac @@ -12,7 +12,7 @@ AC_CONFIG_HEADER(config.h) ### am handles this now? ORIGINAL_LD_FOR_MULTILIBS=$LD # For libtool versioning info, format is CURRENT:REVISION:AGE -libtool_VERSION=6:12:0 +libtool_VERSION=6:13:0 AC_SUBST(libtool_VERSION) # Find the rest of the source tree framework. diff --git a/libstdc++-v3/src/Makefile.am b/libstdc++-v3/src/Makefile.am index d218ceaa9ca..fdd9b6df4f0 100644 --- a/libstdc++-v3/src/Makefile.am +++ b/libstdc++-v3/src/Makefile.am @@ -277,6 +277,11 @@ atomic.lo: atomic.cc atomic.o: atomic.cc $(CXXCOMPILE) -std=gnu++0x -c $< +fstream-inst.lo: fstream-inst.cc + $(LTCXXCOMPILE) -std=gnu++0x -c $< +fstream-inst.o: fstream-inst.cc + $(CXXCOMPILE) -std=gnu++0x -c $< + string-inst.lo: string-inst.cc $(LTCXXCOMPILE) -std=gnu++0x -c $< string-inst.o: string-inst.cc diff --git a/libstdc++-v3/src/Makefile.in b/libstdc++-v3/src/Makefile.in index 9ee5275198b..f7c21885c79 100644 --- a/libstdc++-v3/src/Makefile.in +++ b/libstdc++-v3/src/Makefile.in @@ -888,6 +888,11 @@ atomic.lo: atomic.cc atomic.o: atomic.cc $(CXXCOMPILE) -std=gnu++0x -c $< +fstream-inst.lo: fstream-inst.cc + $(LTCXXCOMPILE) -std=gnu++0x -c $< +fstream-inst.o: fstream-inst.cc + $(CXXCOMPILE) -std=gnu++0x -c $< + string-inst.lo: string-inst.cc $(LTCXXCOMPILE) -std=gnu++0x -c $< string-inst.o: string-inst.cc diff --git a/libstdc++-v3/testsuite/util/testsuite_abi.cc b/libstdc++-v3/testsuite/util/testsuite_abi.cc index ca1bb912ce5..ae146babb87 100644 --- a/libstdc++-v3/testsuite/util/testsuite_abi.cc +++ b/libstdc++-v3/testsuite/util/testsuite_abi.cc @@ -184,6 +184,7 @@ check_version(symbol& test, bool added) known_versions.push_back("GLIBCXX_3.4.10"); known_versions.push_back("GLIBCXX_3.4.11"); known_versions.push_back("GLIBCXX_3.4.12"); + known_versions.push_back("GLIBCXX_3.4.13"); known_versions.push_back("GLIBCXX_LDBL_3.4"); known_versions.push_back("GLIBCXX_LDBL_3.4.7"); known_versions.push_back("GLIBCXX_LDBL_3.4.10"); |