public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Jakub Jelinek <jakub@redhat.com>
To: git-commits@fedoraproject.org
Subject: [rpms/gcc] rhel-f41-base: 7.0.1-0.4
Date: Mon, 29 Jun 2026 12:27:18 GMT	[thread overview]
Message-ID: <178273603843.1.3892979767560449909.rpms-gcc-98a12cbd713b@fedoraproject.org> (raw)

A new commit has been pushed.

Repo   : rpms/gcc
Branch : rhel-f41-base
Commit : 98a12cbd713b5ca3b079f3e5593ba09932533b58
Author : Jakub Jelinek <jakub@redhat.com>
Date   : 2017-01-31T10:26:33+01:00
Stats  : +494/-5 in 7 file(s)
URL    : https://src.fedoraproject.org/rpms/gcc/c/98a12cbd713b5ca3b079f3e5593ba09932533b58?branch=rhel-f41-base

Log:
7.0.1-0.4

---
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 <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,

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  <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.  */

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  <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;
++}

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  <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;
++}

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  <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;
++}

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

             reply	other threads:[~2026-06-29 12:27 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-29 12:27 Jakub Jelinek [this message]
2026-06-29 12:27 [rpms/gcc] rhel-f41-base: 7.0.1-0.4 Jakub Jelinek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=178273603843.1.3892979767560449909.rpms-gcc-98a12cbd713b@fedoraproject.org \
    --to=jakub@redhat.com \
    --cc=git-commits@fedoraproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox