diff --git a/.gitignore b/.gitignore index 8b9f440..1aea36c 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/gcc.spec b/gcc.spec index 20df777..d34c270 100644 --- a/gcc.spec +++ b/gcc.spec @@ -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 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 7.0.1-0.3 - update from the trunk - PRs c++/64382, c++/68727, c++/78771, c++/79176, debug/78835, debug/79129, diff --git a/gcc7-pr79170-workaround.patch b/gcc7-pr79170-workaround.patch new file mode 100644 index 0000000..f094ca8 --- /dev/null +++ b/gcc7-pr79170-workaround.patch @@ -0,0 +1,16 @@ +2017-01-31 Jakub Jelinek + + 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. */ diff --git a/gcc7-pr79197.patch b/gcc7-pr79197.patch new file mode 100644 index 0000000..a46634c --- /dev/null +++ b/gcc7-pr79197.patch @@ -0,0 +1,59 @@ +2017-01-30 Jakub Jelinek + + PR target/79197 + * config/rs6000/rs6000.md (*fixuns_truncdi2_fctiduz): Rename to ... + (fixuns_truncdi2): ... 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_truncdi2" +- [(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))" +- "") +- +-(define_insn "*fixuns_truncdi2_fctiduz" ++(define_insn "fixuns_truncdi2" + [(set (match_operand:DI 0 "gpc_reg_operand" "=d,wi") + (unsigned_fix:DI (match_operand:SFDF 1 "gpc_reg_operand" ",")))] +- "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; ++} diff --git a/gcc7-pr79232.patch b/gcc7-pr79232.patch new file mode 100644 index 0000000..84f25a6 --- /dev/null +++ b/gcc7-pr79232.patch @@ -0,0 +1,318 @@ +2017-01-30 Jakub Jelinek + + 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; ++} diff --git a/gcc7-pr79288.patch b/gcc7-pr79288.patch new file mode 100644 index 0000000..f4f9ae1 --- /dev/null +++ b/gcc7-pr79288.patch @@ -0,0 +1,72 @@ +2017-01-30 Jakub Jelinek + + 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 %", + 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 ++struct T ++{ ++ static __thread int *p; ++}; ++ ++int * ++foo () ++{ ++ return S::p; ++} ++ ++int * ++bar () ++{ ++ return T<0>::p; ++} diff --git a/sources b/sources index b7253bc..d05150b 100644 --- a/sources +++ b/sources @@ -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