7.0.1-0.9
This commit is contained in:
parent
a15b5bd3a0
commit
1c8b31bfd3
1
.gitignore
vendored
1
.gitignore
vendored
@ -7,3 +7,4 @@
|
|||||||
/gcc-7.0.1-20170204.tar.bz2
|
/gcc-7.0.1-20170204.tar.bz2
|
||||||
/gcc-7.0.1-20170209.tar.bz2
|
/gcc-7.0.1-20170209.tar.bz2
|
||||||
/gcc-7.0.1-20170211.tar.bz2
|
/gcc-7.0.1-20170211.tar.bz2
|
||||||
|
/gcc-7.0.1-20170219.tar.bz2
|
||||||
|
32
gcc.spec
32
gcc.spec
@ -1,10 +1,10 @@
|
|||||||
%global DATE 20170211
|
%global DATE 20170219
|
||||||
%global SVNREV 245356
|
%global SVNREV 245573
|
||||||
%global gcc_version 7.0.1
|
%global gcc_version 7.0.1
|
||||||
%global gcc_major 7
|
%global gcc_major 7
|
||||||
# Note, gcc_release must be integer, if you want to add suffixes to
|
# Note, gcc_release must be integer, if you want to add suffixes to
|
||||||
# %{release}, append them after %{gcc_release} on Release: line.
|
# %{release}, append them after %{gcc_release} on Release: line.
|
||||||
%global gcc_release 0.8
|
%global gcc_release 0.9
|
||||||
%global nvptx_tools_gitrev c28050f60193b3b95a18866a96f03334e874e78f
|
%global nvptx_tools_gitrev c28050f60193b3b95a18866a96f03334e874e78f
|
||||||
%global nvptx_newlib_gitrev aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24
|
%global nvptx_newlib_gitrev aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24
|
||||||
%global _unpackaged_files_terminate_build 0
|
%global _unpackaged_files_terminate_build 0
|
||||||
@ -231,10 +231,6 @@ Patch7: gcc7-libstdc++-docs.patch
|
|||||||
Patch8: gcc7-no-add-needed.patch
|
Patch8: gcc7-no-add-needed.patch
|
||||||
Patch9: gcc7-aarch64-async-unw-tables.patch
|
Patch9: gcc7-aarch64-async-unw-tables.patch
|
||||||
Patch10: gcc7-foffload-default.patch
|
Patch10: gcc7-foffload-default.patch
|
||||||
Patch11: gcc7-pr79232.patch
|
|
||||||
Patch12: gcc7-pr79288.patch
|
|
||||||
Patch13: gcc7-pr79341.patch
|
|
||||||
Patch14: gcc7-pr79388.patch
|
|
||||||
|
|
||||||
Patch1000: nvptx-tools-no-ptxas.patch
|
Patch1000: nvptx-tools-no-ptxas.patch
|
||||||
Patch1001: nvptx-tools-build.patch
|
Patch1001: nvptx-tools-build.patch
|
||||||
@ -822,10 +818,6 @@ package or when debugging this package.
|
|||||||
%patch8 -p0 -b .no-add-needed~
|
%patch8 -p0 -b .no-add-needed~
|
||||||
%patch9 -p0 -b .aarch64-async-unw-tables~
|
%patch9 -p0 -b .aarch64-async-unw-tables~
|
||||||
%patch10 -p0 -b .foffload-default~
|
%patch10 -p0 -b .foffload-default~
|
||||||
%patch11 -p0 -b .pr79232~
|
|
||||||
%patch12 -p0 -b .pr79288~
|
|
||||||
%patch13 -p0 -b .pr79341~
|
|
||||||
%patch14 -p0 -b .pr79388~
|
|
||||||
|
|
||||||
cd nvptx-tools-%{nvptx_tools_gitrev}
|
cd nvptx-tools-%{nvptx_tools_gitrev}
|
||||||
%patch1000 -p1 -b .nvptx-tools-no-ptxas~
|
%patch1000 -p1 -b .nvptx-tools-no-ptxas~
|
||||||
@ -3241,6 +3233,24 @@ fi
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sun Feb 19 2017 Jakub Jelinek <jakub@redhat.com> 7.0.1-0.9
|
||||||
|
- update from the trunk
|
||||||
|
- PRs bootstrap/79567, c++/77659, c++/77790, c++/78572, c++/78690,
|
||||||
|
c++/79050, c++/79296, c++/79301, c++/79363, c++/79420, c++/79461,
|
||||||
|
c++/79463, c++/79464, c++/79502, c++/79508, c++/79512, c++/79533,
|
||||||
|
c++/79549, c++/79556, c/79471, c/79478, c/79515, fortran/65542,
|
||||||
|
ipa/79224, libstdc++/78723, libstdc++/79348, libstdc++/79467,
|
||||||
|
libstdc++/79486, libstdc++/79513, middle-end/61225, middle-end/79432,
|
||||||
|
middle-end/79448, middle-end/79496, middle-end/79505,
|
||||||
|
middle-end/79521, middle-end/79536, middle-end/79576,
|
||||||
|
rtl-optimization/78127, rtl-optimization/79286,
|
||||||
|
rtl-optimization/79541, rtl-optimization/79574,
|
||||||
|
rtl-optimization/79577, sanitizer/79562, target/79261, target/79282,
|
||||||
|
target/79404, target/79421, target/79449, target/79462, target/79481,
|
||||||
|
target/79487, target/79495, target/79498, target/79559, target/79569,
|
||||||
|
tree-optimization/79095, tree-optimization/79347,
|
||||||
|
tree-optimization/79529, tree-optimization/79552, tree-ssa/56727
|
||||||
|
|
||||||
* Sat Feb 11 2017 Jakub Jelinek <jakub@redhat.com> 7.0.1-0.8
|
* Sat Feb 11 2017 Jakub Jelinek <jakub@redhat.com> 7.0.1-0.8
|
||||||
- update from the trunk
|
- update from the trunk
|
||||||
- PRs c++/71285, c++/78897, c++/78908, c++/79143, c++/79184, c++/79316,
|
- PRs c++/71285, c++/78897, c++/78908, c++/79143, c++/79184, c++/79316,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- gcc/Makefile.in.jj 2015-06-06 10:00:25.000000000 +0200
|
--- gcc/Makefile.in.jj 2015-06-06 10:00:25.000000000 +0200
|
||||||
+++ gcc/Makefile.in 2015-11-04 14:56:02.643536437 +0100
|
+++ gcc/Makefile.in 2015-11-04 14:56:02.643536437 +0100
|
||||||
@@ -1013,7 +1013,7 @@ BUILD_LIBDEPS= $(BUILD_LIBIBERTY)
|
@@ -1046,7 +1046,7 @@ BUILD_LIBDEPS= $(BUILD_LIBIBERTY)
|
||||||
# and the system's installed libraries.
|
# and the system's installed libraries.
|
||||||
LIBS = @LIBS@ libcommon.a $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBBACKTRACE) \
|
LIBS = @LIBS@ libcommon.a $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBBACKTRACE) \
|
||||||
$(LIBIBERTY) $(LIBDECNUMBER) $(HOST_LIBS)
|
$(LIBIBERTY) $(LIBDECNUMBER) $(HOST_LIBS)
|
||||||
@ -9,7 +9,7 @@
|
|||||||
$(ZLIB)
|
$(ZLIB)
|
||||||
# Any system libraries needed just for GNAT.
|
# Any system libraries needed just for GNAT.
|
||||||
SYSLIBS = @GNAT_LIBEXC@
|
SYSLIBS = @GNAT_LIBEXC@
|
||||||
@@ -2058,6 +2058,15 @@ $(out_object_file): $(out_file)
|
@@ -2196,6 +2196,15 @@ $(out_object_file): $(out_file)
|
||||||
$(common_out_object_file): $(common_out_file)
|
$(common_out_object_file): $(common_out_file)
|
||||||
$(COMPILE) $<
|
$(COMPILE) $<
|
||||||
$(POSTCOMPILE)
|
$(POSTCOMPILE)
|
||||||
@ -27,25 +27,11 @@
|
|||||||
# and compile them.
|
# and compile them.
|
||||||
--- gcc/graphite.h.jj 2016-01-27 12:44:06.000000000 +0100
|
--- gcc/graphite.h.jj 2016-01-27 12:44:06.000000000 +0100
|
||||||
+++ gcc/graphite.h 2016-01-27 13:26:38.309876856 +0100
|
+++ gcc/graphite.h 2016-01-27 13:26:38.309876856 +0100
|
||||||
@@ -36,6 +36,7 @@ along with GCC; see the file COPYING3.
|
@@ -37,6 +37,579 @@ along with GCC; see the file COPYING3.
|
||||||
#include <isl/ilp.h>
|
|
||||||
#include <isl/schedule.h>
|
#include <isl/schedule.h>
|
||||||
#include <isl/ast_build.h>
|
#include <isl/ast_build.h>
|
||||||
|
#include <isl/schedule_node.h>
|
||||||
+#include <dlfcn.h>
|
+#include <dlfcn.h>
|
||||||
|
|
||||||
#ifdef HAVE_ISL_OPTIONS_SET_SCHEDULE_SERIALIZE_SCCS
|
|
||||||
/* isl 0.15 or later. */
|
|
||||||
@@ -47,6 +48,591 @@ along with GCC; see the file COPYING3.
|
|
||||||
# define isl_stat_ok 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#ifdef HAVE_ISL_OPTIONS_SET_SCHEDULE_SERIALIZE_SCCS
|
|
||||||
+#define DYNSYM_SCHEDULE_FUSE DYNSYM (isl_options_set_schedule_serialize_sccs)
|
|
||||||
+#define DYNSYM_SET_YAML_STYLE DYNSYM (isl_printer_set_yaml_style);
|
|
||||||
+#else
|
|
||||||
+#define DYNSYM_SCHEDULE_FUSE DYNSYM (isl_options_set_schedule_fuse)
|
|
||||||
+#define DYNSYM_SET_YAML_STYLE
|
|
||||||
+#endif
|
|
||||||
+
|
+
|
||||||
+#define DYNSYMS \
|
+#define DYNSYMS \
|
||||||
+ DYNSYM (isl_aff_add_coefficient_si); \
|
+ DYNSYM (isl_aff_add_coefficient_si); \
|
||||||
@ -109,8 +95,8 @@
|
|||||||
+ DYNSYM (isl_map_set_tuple_id); \
|
+ DYNSYM (isl_map_set_tuple_id); \
|
||||||
+ DYNSYM (isl_map_universe); \
|
+ DYNSYM (isl_map_universe); \
|
||||||
+ DYNSYM (isl_options_set_on_error); \
|
+ DYNSYM (isl_options_set_on_error); \
|
||||||
+ DYNSYM_SCHEDULE_FUSE; \
|
+ DYNSYM (isl_options_set_schedule_serialize_sccs); \
|
||||||
+ DYNSYM_SET_YAML_STYLE \
|
+ DYNSYM (isl_printer_set_yaml_style); \
|
||||||
+ DYNSYM (isl_options_set_schedule_max_constant_term); \
|
+ DYNSYM (isl_options_set_schedule_max_constant_term); \
|
||||||
+ DYNSYM (isl_options_set_schedule_maximize_band_depth); \
|
+ DYNSYM (isl_options_set_schedule_maximize_band_depth); \
|
||||||
+ DYNSYM (isl_printer_free); \
|
+ DYNSYM (isl_printer_free); \
|
||||||
@ -399,12 +385,8 @@
|
|||||||
+#define isl_map_set_tuple_id (*isl_pointers__.p_isl_map_set_tuple_id)
|
+#define isl_map_set_tuple_id (*isl_pointers__.p_isl_map_set_tuple_id)
|
||||||
+#define isl_map_universe (*isl_pointers__.p_isl_map_universe)
|
+#define isl_map_universe (*isl_pointers__.p_isl_map_universe)
|
||||||
+#define isl_options_set_on_error (*isl_pointers__.p_isl_options_set_on_error)
|
+#define isl_options_set_on_error (*isl_pointers__.p_isl_options_set_on_error)
|
||||||
+#ifdef HAVE_ISL_OPTIONS_SET_SCHEDULE_SERIALIZE_SCCS
|
|
||||||
+#define isl_options_set_schedule_serialize_sccs (*isl_pointers__.p_isl_options_set_schedule_serialize_sccs)
|
+#define isl_options_set_schedule_serialize_sccs (*isl_pointers__.p_isl_options_set_schedule_serialize_sccs)
|
||||||
+#define isl_printer_set_yaml_style (*isl_pointers__.p_isl_printer_set_yaml_style)
|
+#define isl_printer_set_yaml_style (*isl_pointers__.p_isl_printer_set_yaml_style)
|
||||||
+#else
|
|
||||||
+#define isl_options_set_schedule_fuse (*isl_pointers__.p_isl_options_set_schedule_fuse)
|
|
||||||
+#endif
|
|
||||||
+#define isl_options_set_schedule_max_constant_term (*isl_pointers__.p_isl_options_set_schedule_max_constant_term)
|
+#define isl_options_set_schedule_max_constant_term (*isl_pointers__.p_isl_options_set_schedule_max_constant_term)
|
||||||
+#define isl_options_set_schedule_maximize_band_depth (*isl_pointers__.p_isl_options_set_schedule_maximize_band_depth)
|
+#define isl_options_set_schedule_maximize_band_depth (*isl_pointers__.p_isl_options_set_schedule_maximize_band_depth)
|
||||||
+#define isl_printer_free (*isl_pointers__.p_isl_printer_free)
|
+#define isl_printer_free (*isl_pointers__.p_isl_printer_free)
|
||||||
@ -574,7 +556,6 @@
|
|||||||
+#define isl_printer_print_schedule (*isl_pointers__.p_isl_printer_print_schedule)
|
+#define isl_printer_print_schedule (*isl_pointers__.p_isl_printer_print_schedule)
|
||||||
+#define isl_set_set_dim_id (*isl_pointers__.p_isl_set_set_dim_id)
|
+#define isl_set_set_dim_id (*isl_pointers__.p_isl_set_set_dim_id)
|
||||||
+#define isl_union_map_coalesce (*isl_pointers__.p_isl_union_map_coalesce)
|
+#define isl_union_map_coalesce (*isl_pointers__.p_isl_union_map_coalesce)
|
||||||
+
|
|
||||||
+#define isl_multi_val_set_val (*isl_pointers__.p_isl_multi_val_set_val)
|
+#define isl_multi_val_set_val (*isl_pointers__.p_isl_multi_val_set_val)
|
||||||
+#define isl_multi_val_zero (*isl_pointers__.p_isl_multi_val_zero)
|
+#define isl_multi_val_zero (*isl_pointers__.p_isl_multi_val_zero)
|
||||||
+#define isl_options_set_schedule_max_coefficient (*isl_pointers__.p_isl_options_set_schedule_max_coefficient)
|
+#define isl_options_set_schedule_max_coefficient (*isl_pointers__.p_isl_options_set_schedule_max_coefficient)
|
||||||
@ -623,13 +604,12 @@
|
|||||||
+#define isl_ast_node_mark_get_node (*isl_pointers__.p_isl_ast_node_mark_get_node)
|
+#define isl_ast_node_mark_get_node (*isl_pointers__.p_isl_ast_node_mark_get_node)
|
||||||
+#define isl_schedule_node_band_member_get_ast_loop_type (*isl_pointers__.p_isl_schedule_node_band_member_get_ast_loop_type)
|
+#define isl_schedule_node_band_member_get_ast_loop_type (*isl_pointers__.p_isl_schedule_node_band_member_get_ast_loop_type)
|
||||||
+#define isl_schedule_node_band_member_set_ast_loop_type (*isl_pointers__.p_isl_schedule_node_band_member_set_ast_loop_type)
|
+#define isl_schedule_node_band_member_set_ast_loop_type (*isl_pointers__.p_isl_schedule_node_band_member_set_ast_loop_type)
|
||||||
+
|
|
||||||
typedef struct poly_dr *poly_dr_p;
|
typedef struct poly_dr *poly_dr_p;
|
||||||
|
|
||||||
typedef struct poly_bb *poly_bb_p;
|
|
||||||
--- gcc/graphite.c.jj 2015-11-04 14:15:32.000000000 +0100
|
--- gcc/graphite.c.jj 2015-11-04 14:15:32.000000000 +0100
|
||||||
+++ gcc/graphite.c 2015-11-04 14:56:02.645536409 +0100
|
+++ gcc/graphite.c 2015-11-04 14:56:02.645536409 +0100
|
||||||
@@ -54,6 +54,34 @@ along with GCC; see the file COPYING3.
|
@@ -55,6 +55,34 @@ along with GCC; see the file COPYING3.
|
||||||
#include "tree-vectorizer.h"
|
#include "tree-vectorizer.h"
|
||||||
#include "graphite.h"
|
#include "graphite.h"
|
||||||
|
|
||||||
@ -664,7 +644,7 @@
|
|||||||
/* Print global statistics to FILE. */
|
/* Print global statistics to FILE. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -298,6 +326,15 @@ graphite_transform_loops (void)
|
@@ -299,6 +327,15 @@ graphite_transform_loops (void)
|
||||||
if (parallelized_function_p (cfun->decl))
|
if (parallelized_function_p (cfun->decl))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -1,318 +0,0 @@
|
|||||||
2017-01-30 Jakub Jelinek <jakub@redhat.com>
|
|
||||||
|
|
||||||
PR c++/79232
|
|
||||||
* typeck.c (cp_build_modify_expr): Handle properly COMPOUND_EXPRs
|
|
||||||
on lhs that have {PRE{DEC,INC}REMENT,MODIFY,MIN,MAX,COND}_EXPR
|
|
||||||
in the rightmost operand.
|
|
||||||
|
|
||||||
* g++.dg/cpp1z/eval-order4.C: New test.
|
|
||||||
* g++.dg/other/pr79232.C: New test.
|
|
||||||
|
|
||||||
--- gcc/cp/typeck.c.jj 2017-01-30 09:31:43.076595640 +0100
|
|
||||||
+++ gcc/cp/typeck.c 2017-01-30 15:56:33.601002577 +0100
|
|
||||||
@@ -7568,16 +7568,26 @@ tree
|
|
||||||
cp_build_modify_expr (location_t loc, tree lhs, enum tree_code modifycode,
|
|
||||||
tree rhs, tsubst_flags_t complain)
|
|
||||||
{
|
|
||||||
- tree result;
|
|
||||||
+ tree result = NULL_TREE;
|
|
||||||
tree newrhs = rhs;
|
|
||||||
tree lhstype = TREE_TYPE (lhs);
|
|
||||||
+ tree olhs = lhs;
|
|
||||||
tree olhstype = lhstype;
|
|
||||||
bool plain_assign = (modifycode == NOP_EXPR);
|
|
||||||
+ bool compound_side_effects_p = false;
|
|
||||||
+ tree preeval = NULL_TREE;
|
|
||||||
|
|
||||||
/* Avoid duplicate error messages from operands that had errors. */
|
|
||||||
if (error_operand_p (lhs) || error_operand_p (rhs))
|
|
||||||
return error_mark_node;
|
|
||||||
|
|
||||||
+ while (TREE_CODE (lhs) == COMPOUND_EXPR)
|
|
||||||
+ {
|
|
||||||
+ if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
|
|
||||||
+ compound_side_effects_p = true;
|
|
||||||
+ lhs = TREE_OPERAND (lhs, 1);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/* Handle control structure constructs used as "lvalues". Note that we
|
|
||||||
leave COMPOUND_EXPR on the LHS because it is sequenced after the RHS. */
|
|
||||||
switch (TREE_CODE (lhs))
|
|
||||||
@@ -7585,20 +7595,57 @@ cp_build_modify_expr (location_t loc, tr
|
|
||||||
/* Handle --foo = 5; as these are valid constructs in C++. */
|
|
||||||
case PREDECREMENT_EXPR:
|
|
||||||
case PREINCREMENT_EXPR:
|
|
||||||
+ if (compound_side_effects_p)
|
|
||||||
+ {
|
|
||||||
+ if (VOID_TYPE_P (TREE_TYPE (rhs)))
|
|
||||||
+ {
|
|
||||||
+ if (complain & tf_error)
|
|
||||||
+ error ("void value not ignored as it ought to be");
|
|
||||||
+ return error_mark_node;
|
|
||||||
+ }
|
|
||||||
+ newrhs = rhs = stabilize_expr (rhs, &preeval);
|
|
||||||
+ }
|
|
||||||
if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
|
|
||||||
lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
|
|
||||||
cp_stabilize_reference (TREE_OPERAND (lhs, 0)),
|
|
||||||
TREE_OPERAND (lhs, 1));
|
|
||||||
lhs = build2 (COMPOUND_EXPR, lhstype, lhs, TREE_OPERAND (lhs, 0));
|
|
||||||
+ maybe_add_compound:
|
|
||||||
+ /* If we had (bar, --foo) = 5; or (bar, (baz, --foo)) = 5;
|
|
||||||
+ and looked through the COMPOUND_EXPRs, readd them now around
|
|
||||||
+ the resulting lhs. */
|
|
||||||
+ if (TREE_CODE (olhs) == COMPOUND_EXPR)
|
|
||||||
+ {
|
|
||||||
+ lhs = build2 (COMPOUND_EXPR, lhstype, TREE_OPERAND (olhs, 0), lhs);
|
|
||||||
+ tree *ptr = &TREE_OPERAND (lhs, 1);
|
|
||||||
+ for (olhs = TREE_OPERAND (olhs, 1);
|
|
||||||
+ TREE_CODE (olhs) == COMPOUND_EXPR;
|
|
||||||
+ olhs = TREE_OPERAND (olhs, 1))
|
|
||||||
+ {
|
|
||||||
+ *ptr = build2 (COMPOUND_EXPR, lhstype,
|
|
||||||
+ TREE_OPERAND (olhs, 0), *ptr);
|
|
||||||
+ ptr = &TREE_OPERAND (*ptr, 1);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MODIFY_EXPR:
|
|
||||||
+ if (compound_side_effects_p)
|
|
||||||
+ {
|
|
||||||
+ if (VOID_TYPE_P (TREE_TYPE (rhs)))
|
|
||||||
+ {
|
|
||||||
+ if (complain & tf_error)
|
|
||||||
+ error ("void value not ignored as it ought to be");
|
|
||||||
+ return error_mark_node;
|
|
||||||
+ }
|
|
||||||
+ newrhs = rhs = stabilize_expr (rhs, &preeval);
|
|
||||||
+ }
|
|
||||||
if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
|
|
||||||
lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
|
|
||||||
cp_stabilize_reference (TREE_OPERAND (lhs, 0)),
|
|
||||||
TREE_OPERAND (lhs, 1));
|
|
||||||
lhs = build2 (COMPOUND_EXPR, lhstype, lhs, TREE_OPERAND (lhs, 0));
|
|
||||||
- break;
|
|
||||||
+ goto maybe_add_compound;
|
|
||||||
|
|
||||||
case MIN_EXPR:
|
|
||||||
case MAX_EXPR:
|
|
||||||
@@ -7626,7 +7673,6 @@ cp_build_modify_expr (location_t loc, tr
|
|
||||||
except that the RHS goes through a save-expr
|
|
||||||
so the code to compute it is only emitted once. */
|
|
||||||
tree cond;
|
|
||||||
- tree preeval = NULL_TREE;
|
|
||||||
|
|
||||||
if (VOID_TYPE_P (TREE_TYPE (rhs)))
|
|
||||||
{
|
|
||||||
@@ -7652,14 +7698,31 @@ cp_build_modify_expr (location_t loc, tr
|
|
||||||
|
|
||||||
if (cond == error_mark_node)
|
|
||||||
return cond;
|
|
||||||
+ /* If we had (e, (a ? b : c)) = d; or (e, (f, (a ? b : c))) = d;
|
|
||||||
+ and looked through the COMPOUND_EXPRs, readd them now around
|
|
||||||
+ the resulting cond before adding the preevaluated rhs. */
|
|
||||||
+ if (TREE_CODE (olhs) == COMPOUND_EXPR)
|
|
||||||
+ {
|
|
||||||
+ cond = build2 (COMPOUND_EXPR, TREE_TYPE (cond),
|
|
||||||
+ TREE_OPERAND (olhs, 0), cond);
|
|
||||||
+ tree *ptr = &TREE_OPERAND (cond, 1);
|
|
||||||
+ for (olhs = TREE_OPERAND (olhs, 1);
|
|
||||||
+ TREE_CODE (olhs) == COMPOUND_EXPR;
|
|
||||||
+ olhs = TREE_OPERAND (olhs, 1))
|
|
||||||
+ {
|
|
||||||
+ *ptr = build2 (COMPOUND_EXPR, TREE_TYPE (cond),
|
|
||||||
+ TREE_OPERAND (olhs, 0), *ptr);
|
|
||||||
+ ptr = &TREE_OPERAND (*ptr, 1);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
/* Make sure the code to compute the rhs comes out
|
|
||||||
before the split. */
|
|
||||||
- if (preeval)
|
|
||||||
- cond = build2 (COMPOUND_EXPR, TREE_TYPE (lhs), preeval, cond);
|
|
||||||
- return cond;
|
|
||||||
+ result = cond;
|
|
||||||
+ goto ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
+ lhs = olhs;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -7675,7 +7738,7 @@ cp_build_modify_expr (location_t loc, tr
|
|
||||||
rhs = convert (lhstype, rhs);
|
|
||||||
result = build2 (INIT_EXPR, lhstype, lhs, rhs);
|
|
||||||
TREE_SIDE_EFFECTS (result) = 1;
|
|
||||||
- return result;
|
|
||||||
+ goto ret;
|
|
||||||
}
|
|
||||||
else if (! MAYBE_CLASS_TYPE_P (lhstype))
|
|
||||||
/* Do the default thing. */;
|
|
||||||
@@ -7688,7 +7751,7 @@ cp_build_modify_expr (location_t loc, tr
|
|
||||||
release_tree_vector (rhs_vec);
|
|
||||||
if (result == NULL_TREE)
|
|
||||||
return error_mark_node;
|
|
||||||
- return result;
|
|
||||||
+ goto ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
@@ -7703,7 +7766,7 @@ cp_build_modify_expr (location_t loc, tr
|
|
||||||
{
|
|
||||||
result = objc_maybe_build_modify_expr (lhs, rhs);
|
|
||||||
if (result)
|
|
||||||
- return result;
|
|
||||||
+ goto ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* `operator=' is not an inheritable operator. */
|
|
||||||
@@ -7717,7 +7780,7 @@ cp_build_modify_expr (location_t loc, tr
|
|
||||||
complain);
|
|
||||||
if (result == NULL_TREE)
|
|
||||||
return error_mark_node;
|
|
||||||
- return result;
|
|
||||||
+ goto ret;
|
|
||||||
}
|
|
||||||
lhstype = olhstype;
|
|
||||||
}
|
|
||||||
@@ -7762,7 +7825,7 @@ cp_build_modify_expr (location_t loc, tr
|
|
||||||
{
|
|
||||||
result = objc_maybe_build_modify_expr (lhs, newrhs);
|
|
||||||
if (result)
|
|
||||||
- return result;
|
|
||||||
+ goto ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
gcc_assert (TREE_CODE (lhstype) != REFERENCE_TYPE);
|
|
||||||
@@ -7858,9 +7921,10 @@ cp_build_modify_expr (location_t loc, tr
|
|
||||||
|
|
||||||
from_array = TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE
|
|
||||||
? 1 + (modifycode != INIT_EXPR): 0;
|
|
||||||
- return build_vec_init (lhs, NULL_TREE, newrhs,
|
|
||||||
- /*explicit_value_init_p=*/false,
|
|
||||||
- from_array, complain);
|
|
||||||
+ result = build_vec_init (lhs, NULL_TREE, newrhs,
|
|
||||||
+ /*explicit_value_init_p=*/false,
|
|
||||||
+ from_array, complain);
|
|
||||||
+ goto ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (modifycode == INIT_EXPR)
|
|
||||||
@@ -7899,7 +7963,7 @@ cp_build_modify_expr (location_t loc, tr
|
|
||||||
result = objc_generate_write_barrier (lhs, modifycode, newrhs);
|
|
||||||
|
|
||||||
if (result)
|
|
||||||
- return result;
|
|
||||||
+ goto ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
result = build2 (modifycode == NOP_EXPR ? MODIFY_EXPR : INIT_EXPR,
|
|
||||||
@@ -7909,6 +7973,9 @@ cp_build_modify_expr (location_t loc, tr
|
|
||||||
if (!plain_assign)
|
|
||||||
TREE_NO_WARNING (result) = 1;
|
|
||||||
|
|
||||||
+ ret:
|
|
||||||
+ if (preeval)
|
|
||||||
+ result = build2 (COMPOUND_EXPR, TREE_TYPE (result), preeval, result);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
--- gcc/testsuite/g++.dg/cpp1z/eval-order4.C.jj 2017-01-30 16:08:22.195641383 +0100
|
|
||||||
+++ gcc/testsuite/g++.dg/cpp1z/eval-order4.C 2017-01-30 16:08:09.000000000 +0100
|
|
||||||
@@ -0,0 +1,80 @@
|
|
||||||
+// PR c++/79232
|
|
||||||
+// { dg-do run }
|
|
||||||
+// { dg-options "-fstrong-eval-order" }
|
|
||||||
+
|
|
||||||
+int last = 0;
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+foo (int i)
|
|
||||||
+{
|
|
||||||
+ if (i != last + 1)
|
|
||||||
+ __builtin_abort ();
|
|
||||||
+ last = i;
|
|
||||||
+ return i;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+char a, b;
|
|
||||||
+int c;
|
|
||||||
+
|
|
||||||
+char &
|
|
||||||
+bar (int i, int j)
|
|
||||||
+{
|
|
||||||
+ foo (i);
|
|
||||||
+ return j ? a : b;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+main ()
|
|
||||||
+{
|
|
||||||
+ (foo (2) ? bar (3, 0) : bar (3, 1)) = foo (1);
|
|
||||||
+ if (last != 3)
|
|
||||||
+ __builtin_abort ();
|
|
||||||
+ last = 0;
|
|
||||||
+ (foo (2), foo (3) ? bar (4, 0) : bar (4, 1)) = foo (1);
|
|
||||||
+ if (last != 4)
|
|
||||||
+ __builtin_abort ();
|
|
||||||
+ last = 0;
|
|
||||||
+ (foo (2), (foo (3) ? bar (4, 0) : bar (4, 1))) = foo (1);
|
|
||||||
+ if (last != 4)
|
|
||||||
+ __builtin_abort ();
|
|
||||||
+ last = 0;
|
|
||||||
+ (foo (2), foo (3), foo (4) ? bar (5, 0) : bar (5, 1)) = foo (1);
|
|
||||||
+ if (last != 5)
|
|
||||||
+ __builtin_abort ();
|
|
||||||
+ last = 0;
|
|
||||||
+ (foo (2), (foo (3), (foo (4) ? bar (5, 0) : bar (5, 1)))) = foo (1);
|
|
||||||
+ if (last != 5)
|
|
||||||
+ __builtin_abort ();
|
|
||||||
+ last = 0;
|
|
||||||
+ --c = foo (1);
|
|
||||||
+ if (c != 1)
|
|
||||||
+ __builtin_abort ();
|
|
||||||
+ last = 0;
|
|
||||||
+ (foo (2), --c) = foo (1);
|
|
||||||
+ if (last != 2 || c != 1)
|
|
||||||
+ __builtin_abort ();
|
|
||||||
+ last = 0;
|
|
||||||
+ (foo (2), foo (3), --c) = foo (1);
|
|
||||||
+ if (last != 3 || c != 1)
|
|
||||||
+ __builtin_abort ();
|
|
||||||
+ last = 0;
|
|
||||||
+ (foo (2), (foo (3), --c)) = foo (1);
|
|
||||||
+ if (last != 3 || c != 1)
|
|
||||||
+ __builtin_abort ();
|
|
||||||
+ last = 0;
|
|
||||||
+ bar (2, 0) = foo (1);
|
|
||||||
+ if (last != 2)
|
|
||||||
+ __builtin_abort ();
|
|
||||||
+ last = 0;
|
|
||||||
+ (foo (2), bar (3, 0)) = foo (1);
|
|
||||||
+ if (last != 3)
|
|
||||||
+ __builtin_abort ();
|
|
||||||
+ last = 0;
|
|
||||||
+ (foo (2), foo (3), bar (4, 0)) = foo (1);
|
|
||||||
+ if (last != 4)
|
|
||||||
+ __builtin_abort ();
|
|
||||||
+ last = 0;
|
|
||||||
+ (foo (2), (foo (3), bar (4, 0))) = foo (1);
|
|
||||||
+ if (last != 4)
|
|
||||||
+ __builtin_abort ();
|
|
||||||
+}
|
|
||||||
--- gcc/testsuite/g++.dg/other/pr79232.C.jj 2017-01-30 13:37:32.095090643 +0100
|
|
||||||
+++ gcc/testsuite/g++.dg/other/pr79232.C 2017-01-30 13:35:17.000000000 +0100
|
|
||||||
@@ -0,0 +1,12 @@
|
|
||||||
+// PR c++/79232
|
|
||||||
+// { dg-do compile }
|
|
||||||
+
|
|
||||||
+extern char a[];
|
|
||||||
+int b;
|
|
||||||
+char c, e;
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+foo (long d)
|
|
||||||
+{
|
|
||||||
+ (0, b ? &c : a)[d] = e;
|
|
||||||
+}
|
|
@ -1,72 +0,0 @@
|
|||||||
2017-01-30 Jakub Jelinek <jakub@redhat.com>
|
|
||||||
|
|
||||||
PR c++/79288
|
|
||||||
* decl.c (grokdeclarator): For static data members, handle thread_p
|
|
||||||
only after handling inline.
|
|
||||||
|
|
||||||
* g++.dg/tls/pr79288.C: New test.
|
|
||||||
|
|
||||||
--- gcc/cp/decl.c.jj 2017-01-26 09:14:24.000000000 +0100
|
|
||||||
+++ gcc/cp/decl.c 2017-01-30 18:49:38.544438710 +0100
|
|
||||||
@@ -12049,14 +12049,6 @@ grokdeclarator (const cp_declarator *dec
|
|
||||||
: input_location,
|
|
||||||
VAR_DECL, unqualified_id, type);
|
|
||||||
set_linkage_for_static_data_member (decl);
|
|
||||||
- if (thread_p)
|
|
||||||
- {
|
|
||||||
- CP_DECL_THREAD_LOCAL_P (decl) = true;
|
|
||||||
- if (!processing_template_decl)
|
|
||||||
- set_decl_tls_model (decl, decl_default_tls_model (decl));
|
|
||||||
- if (declspecs->gnu_thread_keyword_p)
|
|
||||||
- SET_DECL_GNU_TLS_P (decl);
|
|
||||||
- }
|
|
||||||
if (concept_p)
|
|
||||||
error ("static data member %qE declared %<concept%>",
|
|
||||||
unqualified_id);
|
|
||||||
@@ -12077,6 +12069,15 @@ grokdeclarator (const cp_declarator *dec
|
|
||||||
definition is provided, unless this is an inline
|
|
||||||
variable. */
|
|
||||||
DECL_EXTERNAL (decl) = 1;
|
|
||||||
+
|
|
||||||
+ if (thread_p)
|
|
||||||
+ {
|
|
||||||
+ CP_DECL_THREAD_LOCAL_P (decl) = true;
|
|
||||||
+ if (!processing_template_decl)
|
|
||||||
+ set_decl_tls_model (decl, decl_default_tls_model (decl));
|
|
||||||
+ if (declspecs->gnu_thread_keyword_p)
|
|
||||||
+ SET_DECL_GNU_TLS_P (decl);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
--- gcc/testsuite/g++.dg/tls/pr79288.C.jj 2017-01-30 18:55:05.754282818 +0100
|
|
||||||
+++ gcc/testsuite/g++.dg/tls/pr79288.C 2017-01-30 18:54:52.000000000 +0100
|
|
||||||
@@ -0,0 +1,28 @@
|
|
||||||
+// PR c++/79288
|
|
||||||
+// { dg-do compile { target nonpic } }
|
|
||||||
+// { dg-require-effective-target tls }
|
|
||||||
+// { dg-options "-O2" }
|
|
||||||
+// { dg-final { scan-assembler-not "@tpoff" { target i?86-*-* x86_64-*-* } } }
|
|
||||||
+
|
|
||||||
+struct S
|
|
||||||
+{
|
|
||||||
+ static __thread int *p;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+template <int N>
|
|
||||||
+struct T
|
|
||||||
+{
|
|
||||||
+ static __thread int *p;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+int *
|
|
||||||
+foo ()
|
|
||||||
+{
|
|
||||||
+ return S::p;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int *
|
|
||||||
+bar ()
|
|
||||||
+{
|
|
||||||
+ return T<0>::p;
|
|
||||||
+}
|
|
@ -1,26 +0,0 @@
|
|||||||
2017-02-10 Jakub Jelinek <jakub@redhat.com>
|
|
||||||
|
|
||||||
PR sanitizer/79341
|
|
||||||
* c-c++-common/ubsan/float-cast-overflow-8.c (TEST): Make min and max
|
|
||||||
variables volatile.
|
|
||||||
|
|
||||||
--- gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-8.c.jj 2015-10-29 09:14:30.000000000 +0100
|
|
||||||
+++ gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-8.c 2017-02-10 18:09:47.767251774 +0100
|
|
||||||
@@ -8,7 +8,7 @@
|
|
||||||
#define TEST(type1, type2) \
|
|
||||||
if (type1##_MIN) \
|
|
||||||
{ \
|
|
||||||
- type2 min = type1##_MIN; \
|
|
||||||
+ volatile type2 min = type1##_MIN; \
|
|
||||||
type2 add = -1.0; \
|
|
||||||
while (1) \
|
|
||||||
{ \
|
|
||||||
@@ -28,7 +28,7 @@
|
|
||||||
volatile type1 tem3 = cvt_##type1##_##type2 (-1.0f); \
|
|
||||||
} \
|
|
||||||
{ \
|
|
||||||
- type2 max = type1##_MAX; \
|
|
||||||
+ volatile type2 max = type1##_MAX; \
|
|
||||||
type2 add = 1.0; \
|
|
||||||
while (1) \
|
|
||||||
{ \
|
|
@ -1,76 +0,0 @@
|
|||||||
2017-02-10 Jakub Jelinek <jakub@redhat.com>
|
|
||||||
|
|
||||||
PR rtl-optimization/79388
|
|
||||||
PR rtl-optimization/79450
|
|
||||||
* combine.c (distribute_notes): When removing TEM_INSN for which
|
|
||||||
corresponding dest has last value recorded, invalidate that last
|
|
||||||
value.
|
|
||||||
|
|
||||||
* gcc.c-torture/execute/pr79388.c: New test.
|
|
||||||
* gcc.c-torture/execute/pr79450.c: New test.
|
|
||||||
|
|
||||||
--- gcc/combine.c.jj 2017-01-30 09:31:48.000000000 +0100
|
|
||||||
+++ gcc/combine.c 2017-02-10 17:05:57.500482518 +0100
|
|
||||||
@@ -14288,6 +14288,11 @@ distribute_notes (rtx notes, rtx_insn *f
|
|
||||||
NULL_RTX, NULL_RTX, NULL_RTX);
|
|
||||||
distribute_links (LOG_LINKS (tem_insn));
|
|
||||||
|
|
||||||
+ unsigned int regno = REGNO (XEXP (note, 0));
|
|
||||||
+ reg_stat_type *rsp = ®_stat[regno];
|
|
||||||
+ if (rsp->last_set == tem_insn)
|
|
||||||
+ record_value_for_reg (XEXP (note, 0), NULL, NULL_RTX);
|
|
||||||
+
|
|
||||||
SET_INSN_DELETED (tem_insn);
|
|
||||||
if (tem_insn == i2)
|
|
||||||
i2 = NULL;
|
|
||||||
--- gcc/testsuite/gcc.c-torture/execute/pr79388.c.jj 2017-02-10 17:03:01.993814529 +0100
|
|
||||||
+++ gcc/testsuite/gcc.c-torture/execute/pr79388.c 2017-02-10 17:02:50.000000000 +0100
|
|
||||||
@@ -0,0 +1,23 @@
|
|
||||||
+/* PR rtl-optimization/79388 */
|
|
||||||
+/* { dg-additional-options "-fno-tree-coalesce-vars" } */
|
|
||||||
+
|
|
||||||
+unsigned int a, c;
|
|
||||||
+
|
|
||||||
+__attribute__ ((noinline, noclone)) unsigned int
|
|
||||||
+foo (unsigned int p)
|
|
||||||
+{
|
|
||||||
+ p |= 1;
|
|
||||||
+ p &= 0xfffe;
|
|
||||||
+ p %= 0xffff;
|
|
||||||
+ c = p;
|
|
||||||
+ return a + p;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+main (void)
|
|
||||||
+{
|
|
||||||
+ int x = foo (6);
|
|
||||||
+ if (x != 6)
|
|
||||||
+ __builtin_abort();
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
--- gcc/testsuite/gcc.c-torture/execute/pr79450.c.jj 2017-02-10 17:03:45.698233423 +0100
|
|
||||||
+++ gcc/testsuite/gcc.c-torture/execute/pr79450.c 2017-02-10 17:03:39.000000000 +0100
|
|
||||||
@@ -0,0 +1,22 @@
|
|
||||||
+/* PR rtl-optimization/79450 */
|
|
||||||
+
|
|
||||||
+unsigned int
|
|
||||||
+foo (unsigned char x, unsigned long long y)
|
|
||||||
+{
|
|
||||||
+ do
|
|
||||||
+ {
|
|
||||||
+ x &= !y;
|
|
||||||
+ x %= 24;
|
|
||||||
+ }
|
|
||||||
+ while (x < y);
|
|
||||||
+ return x + y;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+main (void)
|
|
||||||
+{
|
|
||||||
+ unsigned int x = foo (1, 0);
|
|
||||||
+ if (x != 1)
|
|
||||||
+ __builtin_abort ();
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
2
sources
2
sources
@ -1,3 +1,3 @@
|
|||||||
SHA512 (gcc-7.0.1-20170211.tar.bz2) = bcc672ca80bb0c6e8e396bcf2f3f7fb22d3a8688317181c193c9085bcd0379b945cc25d8d44b0eded94661b50079dbce4c26ff947ae51b42b7509eb9c384ec60
|
SHA512 (gcc-7.0.1-20170219.tar.bz2) = b8ead6d4441edeeebe032d12f1484e4fdc8f6513df8d3634dc181429fe7105683544a721a44fde83b522398b9a93d47b671c157189b9f1b5356d4754b4889908
|
||||||
SHA512 (nvptx-newlib-aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24.tar.bz2) = 38f97c9297ad108568352a4d28277455a3c01fd8b7864e798037e5006b6f757022e874bbf3f165775fe3b873781bc108137bbeb42dd5ed3c7d3e6747746fa918
|
SHA512 (nvptx-newlib-aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24.tar.bz2) = 38f97c9297ad108568352a4d28277455a3c01fd8b7864e798037e5006b6f757022e874bbf3f165775fe3b873781bc108137bbeb42dd5ed3c7d3e6747746fa918
|
||||||
SHA512 (nvptx-tools-c28050f60193b3b95a18866a96f03334e874e78f.tar.bz2) = 95b577a06a93bb044dbc8033e550cb36bcf2ab2687da030a7318cdc90e7467ed49665e247dcafb5ff4a7e92cdc264291d19728bd17fab902fb64b22491269330
|
SHA512 (nvptx-tools-c28050f60193b3b95a18866a96f03334e874e78f.tar.bz2) = 95b577a06a93bb044dbc8033e550cb36bcf2ab2687da030a7318cdc90e7467ed49665e247dcafb5ff4a7e92cdc264291d19728bd17fab902fb64b22491269330
|
||||||
|
Loading…
Reference in New Issue
Block a user