7.0.1-0.4

This commit is contained in:
Jakub Jelinek 2017-01-31 10:26:33 +01:00
parent 4c8d27c4d6
commit 98a12cbd71
7 changed files with 494 additions and 5 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@
/nvptx-newlib-aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24.tar.bz2
/nvptx-tools-c28050f60193b3b95a18866a96f03334e874e78f.tar.bz2
/gcc-7.0.1-20170128.tar.bz2
/gcc-7.0.1-20170131.tar.bz2

View File

@ -1,10 +1,10 @@
%global DATE 20170128
%global SVNREV 245003
%global DATE 20170131
%global SVNREV 245054
%global gcc_version 7.0.1
%global gcc_major 7
# Note, gcc_release must be integer, if you want to add suffixes to
# %{release}, append them after %{gcc_release} on Release: line.
%global gcc_release 0.3
%global gcc_release 0.4
%global nvptx_tools_gitrev c28050f60193b3b95a18866a96f03334e874e78f
%global nvptx_newlib_gitrev aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24
%global _unpackaged_files_terminate_build 0
@ -228,6 +228,10 @@ Patch8: gcc7-no-add-needed.patch
Patch9: gcc7-aarch64-async-unw-tables.patch
Patch10: gcc7-foffload-default.patch
Patch11: gcc7-s390-asan.patch
Patch12: gcc7-pr79197.patch
Patch13: gcc7-pr79232.patch
Patch14: gcc7-pr79288.patch
Patch15: gcc7-pr79170-workaround.patch
Patch1000: nvptx-tools-no-ptxas.patch
Patch1001: nvptx-tools-build.patch
@ -816,6 +820,10 @@ package or when debugging this package.
%patch9 -p0 -b .aarch64-async-unw-tables~
%patch10 -p0 -b .foffload-default~
%patch11 -p0 -b .s390-asan~
%patch12 -p0 -b .pr79197~
%patch13 -p0 -b .pr79232~
%patch14 -p0 -b .pr79288~
%patch15 -p0 -b .pr79170-workaround~
cd nvptx-tools-%{nvptx_tools_gitrev}
%patch1000 -p1 -b .nvptx-tools-no-ptxas~
@ -1248,7 +1256,7 @@ rm -rf %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/ac
rm -rf %{buildroot}%{_infodir} %{buildroot}%{_mandir}/man7 %{buildroot}%{_prefix}/share/locale
rm -rf %{buildroot}%{_prefix}/lib/gcc/nvptx-none/%{gcc_major}/{install-tools,plugin}
rm -rf %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/{install-tools,plugin,include-fixed}
rm -rf %{buildroot}%{_prefix}/%{_lib}/libcc1*
rm -rf %{buildroot}%{_prefix}/%{_lib}/libc[cp]1*
mv -f %{buildroot}%{_prefix}/nvptx-none/lib/*.{a,spec} %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/
mv -f %{buildroot}%{_prefix}/nvptx-none/lib/mgomp/*.{a,spec} %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/mgomp/
mv -f %{buildroot}%{_prefix}/lib/gcc/nvptx-none/%{gcc_major}/*.a %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/
@ -3206,6 +3214,7 @@ fi
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/plugin
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/plugin/libcc1plugin.so*
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/plugin/libcp1plugin.so*
%doc rpm.doc/changelogs/libcc1/ChangeLog*
%if %{build_offload_nvptx}
@ -3232,6 +3241,20 @@ fi
%endif
%changelog
* Tue Jan 31 2017 Jakub Jelinek <jakub@redhat.com> 7.0.1-0.4
- update from the trunk
- PRs bootstrap/78985, debug/63238, debug/79289, gcov-profile/79259,
target/78945, target/79170, target/79240, target/79260, target/79268,
testsuite/70583, testsuite/79293, tree-optimization/79256,
tree-optimization/79267, tree-optimization/79276
- fix ICEs with powerpc conversion of float/double to 64-bit unsigned integer
(PR target/79197)
- fix C++ ICE with comma expression on lhs of assignment (PR c++/79232)
- fix default TLS model for C++ non-inline static data members (PR c++/79288)
- add workaround for powerpc constant size memcmp expansion bug (#1417753,
PR target/79170)
- libcp1plugin.so added to gcc-gdb-plugin for C++ support
* Sat Jan 28 2017 Jakub Jelinek <jakub@redhat.com> 7.0.1-0.3
- update from the trunk
- PRs c++/64382, c++/68727, c++/78771, c++/79176, debug/78835, debug/79129,

View File

@ -0,0 +1,16 @@
2017-01-31 Jakub Jelinek <jakub@redhat.com>
PR target/79170
* config/rs6000/rs6000.c (expand_block_compare): Temporarily disable.
--- gcc/config/rs6000/rs6000.c.jj 2017-01-31 09:25:59.000000000 +0100
+++ gcc/config/rs6000/rs6000.c 2017-01-31 10:17:21.131929670 +0100
@@ -19462,7 +19462,7 @@ expand_block_compare (rtx operands[])
with carry instructions do not generate the 64-bit
carry and so we must emit code to calculate it ourselves.
We choose not to implement this yet. */
- if (TARGET_32BIT && TARGET_POWERPC64)
+ if ((TARGET_32BIT && TARGET_POWERPC64) || 1)
return false;
/* If this is not a fixed size compare, just call memcmp. */

59
gcc7-pr79197.patch Normal file
View File

@ -0,0 +1,59 @@
2017-01-30 Jakub Jelinek <jakub@redhat.com>
PR target/79197
* config/rs6000/rs6000.md (*fixuns_trunc<mode>di2_fctiduz): Rename to ...
(fixuns_trunc<mode>di2): ... this, remove previous expander. Put all
conditions on a single line.
* gcc.target/powerpc/pr79197.c: New test.
* gcc.c-torture/compile/pr79197.c: New test.
--- gcc/config/rs6000/rs6000.md.jj 2017-01-23 18:41:20.000000000 +0100
+++ gcc/config/rs6000/rs6000.md 2017-01-30 14:44:12.148761705 +0100
@@ -5712,17 +5712,10 @@ (define_insn_and_split "fixuns_trunc<mod
[(set_attr "length" "12")
(set_attr "type" "fp")])
-(define_expand "fixuns_trunc<mode>di2"
- [(set (match_operand:DI 0 "register_operand" "")
- (unsigned_fix:DI (match_operand:SFDF 1 "register_operand" "")))]
- "TARGET_HARD_FLOAT && (TARGET_FCTIDUZ || VECTOR_UNIT_VSX_P (<MODE>mode))"
- "")
-
-(define_insn "*fixuns_trunc<mode>di2_fctiduz"
+(define_insn "fixuns_trunc<mode>di2"
[(set (match_operand:DI 0 "gpc_reg_operand" "=d,wi")
(unsigned_fix:DI (match_operand:SFDF 1 "gpc_reg_operand" "<Ff>,<Fv>")))]
- "TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT && TARGET_FPRS
- && TARGET_FCTIDUZ"
+ "TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT && TARGET_FPRS && TARGET_FCTIDUZ"
"@
fctiduz %0,%1
xscvdpuxds %x0,%x1"
--- gcc/testsuite/gcc.target/powerpc/pr79197.c.jj 2017-01-30 14:54:55.533314402 +0100
+++ gcc/testsuite/gcc.target/powerpc/pr79197.c 2017-01-30 14:55:20.407988406 +0100
@@ -0,0 +1,11 @@
+/* PR target/79197 */
+/* { dg-do compile } */
+/* { dg-options "-O0 -mno-popcntd" } */
+
+unsigned a;
+
+void
+foo (void)
+{
+ a = *(double *) (__UINTPTR_TYPE__) 0x400000;
+}
--- gcc/testsuite/gcc.c-torture/compile/pr79197.c.jj 2017-01-30 14:56:31.383058240 +0100
+++ gcc/testsuite/gcc.c-torture/compile/pr79197.c 2017-01-30 14:56:40.902933477 +0100
@@ -0,0 +1,10 @@
+/* PR target/79197 */
+
+unsigned long b;
+
+unsigned long
+foo (float *a, float *x)
+{
+ __builtin_memcpy (a, x, sizeof (float));
+ return *a;
+}

318
gcc7-pr79232.patch Normal file
View File

@ -0,0 +1,318 @@
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;
+}

72
gcc7-pr79288.patch Normal file
View File

@ -0,0 +1,72 @@
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;
+}

View File

@ -1,3 +1,3 @@
SHA512 (gcc-7.0.1-20170128.tar.bz2) = 41edc3cd3cf59816aa8f6f5c410a6c5a0332eadf65d0ccd478367767c17d909462280f439a9a96b61c72d447b17caa8b5fa0ddea22c25a79be2fd63675088e49
SHA512 (gcc-7.0.1-20170131.tar.bz2) = 976af1e513fe6f701cf3e83503e2a44560e37f0f33622c45b4d1fe119006c7cc9d45584df5e760a41c4767be036dee24d88a33379ff65366b187605f463ea1b0
SHA512 (nvptx-newlib-aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24.tar.bz2) = 38f97c9297ad108568352a4d28277455a3c01fd8b7864e798037e5006b6f757022e874bbf3f165775fe3b873781bc108137bbeb42dd5ed3c7d3e6747746fa918
SHA512 (nvptx-tools-c28050f60193b3b95a18866a96f03334e874e78f.tar.bz2) = 95b577a06a93bb044dbc8033e550cb36bcf2ab2687da030a7318cdc90e7467ed49665e247dcafb5ff4a7e92cdc264291d19728bd17fab902fb64b22491269330