aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2009-09-01 21:10:12 +0000
committerAlexandre Oliva <aoliva@redhat.com>2009-09-01 21:10:12 +0000
commitbbd2d1141f4c957d232042c6c757776fc1d0b9f3 (patch)
tree457d72335a5b86fced2ea8460ad9303376fcc1d9
parent47d1e2fcf09977ed6a87d789f073937942fcab71 (diff)
Merged with gcc-4_4-branch@151281.var-tracking-assignments-4_4-branch
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/var-tracking-assignments-4_4-branch@151286 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog101
-rw-r--r--gcc/ChangeLog.vta4
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/builtins.c11
-rw-r--r--gcc/config/alpha/alpha.c2
-rw-r--r--gcc/config/alpha/alpha.md47
-rw-r--r--gcc/config/alpha/sync.md27
-rw-r--r--gcc/config/avr/avr.c2
-rw-r--r--gcc/config/i386/i386.c5
-rw-r--r--gcc/config/i386/i386.md51
-rw-r--r--gcc/config/i386/netware.c42
-rw-r--r--gcc/config/i386/netware.h24
-rw-r--r--gcc/config/i386/nwld.h7
-rw-r--r--gcc/config/s390/s390.c231
-rw-r--r--gcc/config/s390/s390.md58
-rw-r--r--gcc/cp/ChangeLog12
-rw-r--r--gcc/cp/parser.c17
-rw-r--r--gcc/cp/tree.c6
-rw-r--r--gcc/doc/install.texi2
-rw-r--r--gcc/doc/invoke.texi7
-rw-r--r--gcc/doc/service.texi2
-rw-r--r--gcc/expr.c37
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans-decl.c8
-rw-r--r--gcc/po/ChangeLog4
-rw-r--r--gcc/po/sv.po4
-rw-r--r--gcc/testsuite/ChangeLog95
-rw-r--r--gcc/testsuite/g++.dg/cdce3.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/enum1.C2
-rw-r--r--gcc/testsuite/g++.dg/expr/unary3.C11
-rw-r--r--gcc/testsuite/g++.dg/other/gc4.C14
-rw-r--r--gcc/testsuite/g++.dg/parse/enum5.C17
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/limits-fndefn.c1
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr41163.c10
-rw-r--r--gcc/testsuite/gcc.dg/builtins-10.c4
-rw-r--r--gcc/testsuite/gcc.dg/builtins-config.h6
-rw-r--r--gcc/testsuite/gcc.dg/pr41123.c46
-rw-r--r--gcc/testsuite/gcc.dg/torture/builtin-power-1.c6
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr41094.c19
-rw-r--r--gcc/testsuite/gcc.target/i386/pr40718.c36
-rw-r--r--gcc/testsuite/gfortran.dg/c_f_pointer_tests_4.f9015
-rw-r--r--gcc/testsuite/gfortran.dg/intrinsic_5.f9013
-rw-r--r--gcc/testsuite/gfortran.dg/pr41126.f906
-rw-r--r--gcc/testsuite/gfortran.dg/pr41162.f5
-rw-r--r--gcc/testsuite/gfortran.dg/proc_ptr_25.f9036
-rw-r--r--gcc/testsuite/gfortran.dg/proc_ptr_comp_18.f9033
-rw-r--r--gcc/testsuite/gfortran.dg/proc_ptr_comp_19.f9032
-rw-r--r--gcc/testsuite/gfortran.dg/use_only_4.f9034
-rw-r--r--gcc/testsuite/lib/target-supports.exp3
-rw-r--r--libgfortran/ChangeLog13
-rw-r--r--libgfortran/intrinsics/dtime.c17
-rw-r--r--libgfortran/intrinsics/iso_c_binding.c4
-rw-r--r--libgfortran/intrinsics/time_1.h6
-rw-r--r--libgomp/ChangeLog5
-rw-r--r--libgomp/omp_lib.h.in16
-rw-r--r--libstdc++-v3/ChangeLog10
-rw-r--r--libstdc++-v3/config/abi/pre/gnu.ver41
-rwxr-xr-xlibstdc++-v3/configure2
-rw-r--r--libstdc++-v3/configure.ac2
-rw-r--r--libstdc++-v3/src/Makefile.am5
-rw-r--r--libstdc++-v3/src/Makefile.in5
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_abi.cc1
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");