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: 6.0.0-0.11
Date: Mon, 29 Jun 2026 12:27:04 GMT	[thread overview]
Message-ID: <178273602436.1.627644855650468366.rpms-gcc-89e370f159d2@fedoraproject.org> (raw)

A new commit has been pushed.

Repo   : rpms/gcc
Branch : rhel-f41-base
Commit : 89e370f159d2c5a449e3bcb32c195de433504c62
Author : Jakub Jelinek <jakub@redhat.com>
Date   : 2016-02-12T12:15:16+01:00
Stats  : +511/-374 in 9 file(s)
URL    : https://src.fedoraproject.org/rpms/gcc/c/89e370f159d2c5a449e3bcb32c195de433504c62?branch=rhel-f41-base

Log:
6.0.0-0.11

---
diff --git a/.gitignore b/.gitignore
index eee8aca..b7e1575 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@
 /gcc-6.0.0-20160129.tar.bz2
 /gcc-6.0.0-20160201.tar.bz2
 /gcc-6.0.0-20160205.tar.bz2
+/gcc-6.0.0-20160212.tar.bz2

diff --git a/gcc.spec b/gcc.spec
index 2dbda30..590d16f 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,9 +1,9 @@
-%global DATE 20160205
-%global SVNREV 233185
+%global DATE 20160212
+%global SVNREV 233372
 %global gcc_version 6.0.0
 # 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.10
+%global gcc_release 0.11
 %global _unpackaged_files_terminate_build 0
 %global _performance_build 1
 # Hardening slows the compiler way too much.
@@ -208,10 +208,9 @@ Patch12: gcc6-aarch64-async-unw-tables.patch
 Patch13: gcc6-libsanitize-aarch64-va42.patch
 Patch14: gcc6-pr65932-cse-revert.patch
 Patch15: gcc6-pr69241.patch
-Patch16: gcc6-pr69628.patch
-Patch17: gcc6-pr69658.patch
-Patch18: gcc6-pr69691.patch
-Patch19: gcc6-pr69274.patch
+Patch16: gcc6-pr69658.patch
+Patch17: gcc6-pr10200-revert.patch
+Patch18: gcc6-pr68672.patch
 
 # On ARM EABI systems, we do want -gnueabi to be part of the
 # target triple.
@@ -780,10 +779,9 @@ rm -f libgo/go/crypto/elliptic/p224{,_test}.go
 %patch13 -p0 -b .libsanitize-aarch64-va42~
 %patch14 -p0 -b .pr65932-cse-revert~
 %patch15 -p0 -b .pr69241~
-%patch16 -p0 -b .pr69628~
-%patch17 -p0 -b .pr69658~
-%patch18 -p0 -b .pr69691~
-%patch19 -p0 -b .pr69274~
+%patch16 -p0 -b .pr69658~
+%patch17 -p0 -b .pr10200~
+%patch18 -p0 -b .pr68672~
 
 %if 0%{?_enable_debug_packages}
 mkdir dwz-wrapper
@@ -1057,7 +1055,7 @@ CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \
 	--enable-languages=c,c++,objc,obj-c++,fortran${enablelada}${enablelgo},lto \
 	$CONFIGURE_OPTS
 
-%ifarch sparc sparcv9 sparc64 ppc64
+%ifarch sparc sparcv9 sparc64
 make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" bootstrap
 %else
 make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" profiledbootstrap
@@ -3076,6 +3074,25 @@ fi
 %doc rpm.doc/changelogs/libcc1/ChangeLog*
 
 %changelog
+* Fri Feb 12 2016 Jakub Jelinek <jakub@redhat.com> 6.0.0-0.11
+- update from the trunk
+  - PRs c++/10200, c++/59627, c++/67835, c++/68726, c++/68926, c++/69098,
+	c++/69139, c++/69283, c++/69631, c++/69657, c++/69662, c++/69688,
+	c/69522, c/69643, c/69768, fortran/50555, fortran/66089,
+	fortran/69296, go/68562, ipa/69239, libstdc++/48891, lto/69707,
+	middle-end/66726, other/69722, plugins/69758, preprocessor/69664,
+	rtl-optimization/68730, rtl-optimization/69291,
+	rtl-optimization/69737, target/60410, target/65313, target/65867,
+	target/68273, target/68404, target/68532, target/69148, target/69634,
+	target/69713, tree-opt/69282, tree-optimization/65917,
+	tree-optimization/68021, tree-optimization/68541,
+	tree-optimization/69209, tree-optimization/69599,
+	tree-optimization/69652, tree-optimization/69715,
+	tree-optimization/69719, tree-optimization/69726
+- temporarily revert PR c++/10200 fix
+- fix -fpartial-inlining with clobber or debug stmts in return_bb
+  (PR ipa/68672)
+
 * Fri Feb  5 2016 Jakub Jelinek <jakub@redhat.com> 6.0.0-0.10
 - update from the trunk
   - PRs bootstrap/69611, bootstrap/69677, c++/68948, c++/69056, c++/69251,

diff --git a/gcc6-pr10200-revert.patch b/gcc6-pr10200-revert.patch
new file mode 100644
index 0000000..29ff7ce
--- /dev/null
+++ b/gcc6-pr10200-revert.patch
@@ -0,0 +1,104 @@
+Revert due to PR69753:
+2016-02-10  Jason Merrill  <jason@redhat.com>
+ 
+	PR c++/10200
+	* parser.c (cp_parser_lookup_name): When looking for a template
+	after . or ->, only consider class templates.
+	(cp_parser_postfix_dot_deref_expression): Handle the current
+	instantiation.  Remember a dependent object expression.
+	* typeck2.c (build_x_arrow): Handle the current instantiation.
+
+--- gcc/cp/typeck2.c	(revision 233277)
++++ gcc/cp/typeck2.c	(revision 233276)
+@@ -1694,10 +1694,7 @@ build_x_arrow (location_t loc, tree expr
+ 
+   if (processing_template_decl)
+     {
+-      if (type && TREE_CODE (type) == POINTER_TYPE
+-	  && !dependent_scope_p (TREE_TYPE (type)))
+-	/* Pointer to current instantiation, don't treat as dependent.  */;
+-      else if (type_dependent_expression_p (expr))
++      if (type_dependent_expression_p (expr))
+ 	return build_min_nt_loc (loc, ARROW_EXPR, expr);
+       expr = build_non_dependent_expr (expr);
+     }
+--- gcc/cp/parser.c	(revision 233277)
++++ gcc/cp/parser.c	(revision 233276)
+@@ -7184,16 +7184,8 @@ cp_parser_postfix_dot_deref_expression (
+   if (token_type == CPP_DEREF)
+     postfix_expression = build_x_arrow (location, postfix_expression,
+ 					tf_warning_or_error);
+-  /* According to the standard, no expression should ever have
+-     reference type.  Unfortunately, we do not currently match
+-     the standard in this respect in that our internal representation
+-     of an expression may have reference type even when the standard
+-     says it does not.  Therefore, we have to manually obtain the
+-     underlying type here.  */
+-  scope = non_reference (TREE_TYPE (postfix_expression));
+-  /* Check to see whether or not the expression is type-dependent and
+-     not the current instantiation.  */
+-  dependent_p = !scope || dependent_scope_p (scope);
++  /* Check to see whether or not the expression is type-dependent.  */
++  dependent_p = type_dependent_expression_p (postfix_expression);
+   /* The identifier following the `->' or `.' is not qualified.  */
+   parser->scope = NULL_TREE;
+   parser->qualifying_scope = NULL_TREE;
+@@ -7202,8 +7194,16 @@ cp_parser_postfix_dot_deref_expression (
+ 
+   /* Enter the scope corresponding to the type of the object
+      given by the POSTFIX_EXPRESSION.  */
+-  if (!dependent_p)
++  if (!dependent_p && TREE_TYPE (postfix_expression) != NULL_TREE)
+     {
++      scope = TREE_TYPE (postfix_expression);
++      /* According to the standard, no expression should ever have
++	 reference type.  Unfortunately, we do not currently match
++	 the standard in this respect in that our internal representation
++	 of an expression may have reference type even when the standard
++	 says it does not.  Therefore, we have to manually obtain the
++	 underlying type here.  */
++      scope = non_reference (scope);
+       /* The type of the POSTFIX_EXPRESSION must be complete.  */
+       if (scope == unknown_type_node)
+ 	{
+@@ -7215,10 +7215,7 @@ cp_parser_postfix_dot_deref_expression (
+ 	 required to be of complete type for purposes of class member
+ 	 access (5.2.5) outside the member function body.  */
+       else if (postfix_expression != current_class_ref
+-	       && !(processing_template_decl
+-		    && current_class_type
+-		    && (same_type_ignoring_top_level_qualifiers_p
+-			(scope, current_class_type))))
++	       && !(processing_template_decl && scope == current_class_type))
+ 	scope = complete_type_or_else (scope, NULL_TREE);
+       /* Let the name lookup machinery know that we are processing a
+ 	 class member access expression.  */
+@@ -7234,10 +7231,6 @@ cp_parser_postfix_dot_deref_expression (
+       if (scope == error_mark_node)
+ 	postfix_expression = error_mark_node;
+     }
+-  else
+-    /* Tell cp_parser_lookup_name that there was an object, even though it's
+-       type-dependent.  */
+-    parser->context->object_type = unknown_type_node;
+ 
+   /* Assume this expression is not a pseudo-destructor access.  */
+   pseudo_destructor_p = false;
+@@ -24727,15 +24720,10 @@ cp_parser_lookup_name (cp_parser *parser
+ 	decl = NULL_TREE;
+ 
+       if (!decl)
+-	/* Look it up in the enclosing context.  DR 141: When looking for a
+-	   template-name after -> or ., only consider class templates.  */
+-	decl = lookup_name_real (name, tag_type != none_type || is_template,
++	/* Look it up in the enclosing context.  */
++	decl = lookup_name_real (name, tag_type != none_type,
+ 				 /*nonclass=*/0,
+ 				 /*block_p=*/true, is_namespace, 0);
+-      if (object_type == unknown_type_node)
+-	/* The object is type-dependent, so we can't look anything up; we used
+-	   this to get the DR 141 behavior.  */
+-	object_type = NULL_TREE;
+       parser->object_scope = object_type;
+       parser->qualifying_scope = NULL_TREE;
+     }

diff --git a/gcc6-pr68672.patch b/gcc6-pr68672.patch
new file mode 100644
index 0000000..ed7c8bf
--- /dev/null
+++ b/gcc6-pr68672.patch
@@ -0,0 +1,299 @@
+2016-02-11  Jakub Jelinek  <jakub@redhat.com>
+
+	PR ipa/68672
+	* ipa-split.c (split_function): Don't compute/use main_part_return_p.
+	Compute retval and retbnd early in all cases if split_part_return_p
+	and return_bb is not EXIT.  Remove all clobber stmts and reset
+	all debug stmts that refer to SSA_NAMEs defined in split part,
+	except if it is retval, in that case replace the old retval with the
+	lhs of the call to the split part.
+
+	* g++.dg/ipa/pr68672-1.C: New test.
+	* g++.dg/ipa/pr68672-2.C: New test.
+	* g++.dg/ipa/pr68672-3.C: New test.
+
+--- gcc/ipa-split.c.jj	2016-02-11 10:50:52.888220581 +0100
++++ gcc/ipa-split.c	2016-02-11 12:46:15.975777652 +0100
+@@ -1244,28 +1244,13 @@ split_function (basic_block return_bb, s
+ 	args_to_pass.safe_push (arg);
+       }
+ 
+-  /* See if the split function or the main part will return.  */
+-  bool main_part_return_p = false;
++  /* See if the split function will return.  */
+   bool split_part_return_p = false;
+   FOR_EACH_EDGE (e, ei, return_bb->preds)
+     {
+       if (bitmap_bit_p (split_point->split_bbs, e->src->index))
+ 	split_part_return_p = true;
+-      else
+-	main_part_return_p = true;
+     }
+-  /* The main part also returns if we split on a fallthru edge
+-     and the split part returns.  */
+-  if (split_part_return_p)
+-    FOR_EACH_EDGE (e, ei, split_point->entry_bb->preds)
+-      {
+-	if (! bitmap_bit_p (split_point->split_bbs, e->src->index)
+-	    && single_succ_p (e->src))
+-	  {
+-	    main_part_return_p = true;
+-	    break;
+-	  }
+-      }
+ 
+   /* Add return block to what will become the split function.
+      We do not return; no return block is needed.  */
+@@ -1279,8 +1264,8 @@ split_function (basic_block return_bb, s
+      FIXME: Once we are able to change return type, we should change function
+      to return void instead of just outputting function with undefined return
+      value.  For structures this affects quality of codegen.  */
+-  else if (!split_point->split_part_set_retval
+-           && (retval = find_retval (return_bb)))
++  else if ((retval = find_retval (return_bb))
++	   && !split_point->split_part_set_retval)
+     {
+       bool redirected = true;
+       basic_block new_return_bb = create_basic_block (NULL, 0, return_bb);
+@@ -1308,12 +1293,10 @@ split_function (basic_block return_bb, s
+     }
+   /* When we pass around the value, use existing return block.  */
+   else
+-    bitmap_set_bit (split_point->split_bbs, return_bb->index);
+-
+-  /* If the main part doesn't return pretend the return block wasn't
+-     found for all of the following.  */
+-  if (! main_part_return_p)
+-    return_bb = EXIT_BLOCK_PTR_FOR_FN (cfun);
++    {
++      bitmap_set_bit (split_point->split_bbs, return_bb->index);
++      retbnd = find_retbnd (return_bb);
++    }
+ 
+   /* If RETURN_BB has virtual operand PHIs, they must be removed and the
+      virtual operand marked for renaming as we change the CFG in a way that
+@@ -1382,6 +1365,44 @@ split_function (basic_block return_bb, s
+       DECL_FUNCTION_CODE (node->decl) = (enum built_in_function) 0;
+     }
+ 
++  /* If return_bb contains any clobbers that refer to SSA_NAMEs
++     set in the split part, remove them.  Also reset debug stmts that
++     refer to SSA_NAMEs set in the split part.  */
++  if (return_bb != EXIT_BLOCK_PTR_FOR_FN (cfun))
++    {
++      gimple_stmt_iterator gsi = gsi_start_bb (return_bb);
++      while (!gsi_end_p (gsi))
++	{
++	  tree op;
++	  ssa_op_iter iter;
++	  gimple *stmt = gsi_stmt (gsi);
++	  bool remove = false;
++	  if (gimple_clobber_p (stmt) || is_gimple_debug (stmt))
++	    FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_USE)
++	      {
++		basic_block bb = gimple_bb (SSA_NAME_DEF_STMT (op));
++		if (op != retval
++		    && bb
++		    && bb != return_bb
++		    && bitmap_bit_p (split_point->split_bbs, bb->index))
++		  {
++		    if (is_gimple_debug (stmt))
++		      {
++			gimple_debug_bind_reset_value (stmt);
++			update_stmt (stmt);
++		      }
++		    else
++		      remove = true;
++		    break;
++		  }
++	      }
++	  if (remove)
++	    gsi_remove (&gsi, true);
++	  else
++	    gsi_next (&gsi);
++	}
++    }
++
+   /* If the original function is instrumented then it's
+      part is also instrumented.  */
+   if (with_bounds)
+@@ -1499,9 +1520,7 @@ split_function (basic_block return_bb, s
+          return value into and put call just before it.  */
+       if (return_bb != EXIT_BLOCK_PTR_FOR_FN (cfun))
+ 	{
+-	  real_retval = retval = find_retval (return_bb);
+-	  retbnd = find_retbnd (return_bb);
+-
++	  real_retval = retval;
+ 	  if (real_retval && split_point->split_part_set_retval)
+ 	    {
+ 	      gphi_iterator psi;
+@@ -1545,6 +1564,28 @@ split_function (basic_block return_bb, s
+ 			    break;
+ 			  }
+ 		      update_stmt (gsi_stmt (bsi));
++		      /* Also adjust clobbers and debug stmts in return_bb.  */
++		      for (bsi = gsi_start_bb (return_bb); !gsi_end_p (bsi);
++			   gsi_next (&bsi))
++			{
++			  gimple *stmt = gsi_stmt (bsi);
++			  if (gimple_clobber_p (stmt)
++			      || is_gimple_debug (stmt))
++			    {
++			      ssa_op_iter iter;
++			      use_operand_p use_p;
++			      bool update = false;
++			      FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter,
++							SSA_OP_USE)
++				if (USE_FROM_PTR (use_p) == real_retval)
++				  {
++				    SET_USE (use_p, retval);
++				    update = true;
++				  }
++			      if (update)
++				update_stmt (stmt);
++			    }
++			}
+ 		    }
+ 
+ 		  /* Replace retbnd with new one.  */
+--- gcc/testsuite/g++.dg/ipa/pr68672-1.C.jj	2016-02-11 12:31:27.344497187 +0100
++++ gcc/testsuite/g++.dg/ipa/pr68672-1.C	2016-02-11 12:31:01.000000000 +0100
+@@ -0,0 +1,20 @@
++// PR ipa/68672
++// { dg-do compile }
++// { dg-options "-O -finline-small-functions -fpartial-inlining --param=partial-inlining-entry-probability=100" }
++
++void f2 (void *);
++void *a;
++struct C { virtual void m1 (); };
++struct D { C *m2 () { if (a) __builtin_abort (); } };
++D f1 ();
++struct E { int e; ~E () { if (e) f2 (&e); } };
++E *b;
++struct I { virtual void m3 (); };
++
++void
++I::m3 ()
++{
++  if (a)
++    f1 ().m2 ()->m1 ();
++  b->~E ();
++}
+--- gcc/testsuite/g++.dg/ipa/pr68672-2.C.jj	2016-02-11 12:33:50.744438948 +0100
++++ gcc/testsuite/g++.dg/ipa/pr68672-2.C	2016-02-11 12:32:50.000000000 +0100
+@@ -0,0 +1,54 @@
++// PR ipa/68672
++// { dg-do compile }
++// { dg-options "-O3 --param=partial-inlining-entry-probability=100 -g" }
++
++struct S { ~S () {} };
++S *a;
++int *b;
++void bar ();
++void baz ();
++void fn (int *);
++
++static int
++foo ()
++{
++  S *c = a;
++  if (c)
++    {
++      bar ();
++      if (a)
++	__builtin_abort ();
++      baz ();
++    }
++  int p = *b;
++  if (p)
++    {
++      fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b);
++      fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b);
++      fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b);
++      fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b);
++    }
++  c->~S ();
++  int q = 2 * p;
++  int r = 3 * q;
++  S *d = c;
++  return p;
++}
++
++void
++use1 ()
++{
++  foo ();
++}
++
++void
++use2 ()
++{
++  foo ();
++}
++
++void
++use3 ()
++{
++  foo ();
++}
+--- gcc/testsuite/g++.dg/ipa/pr68672-3.C.jj	2016-02-11 12:34:02.374272024 +0100
++++ gcc/testsuite/g++.dg/ipa/pr68672-3.C	2016-02-11 12:34:22.337985482 +0100
+@@ -0,0 +1,57 @@
++// PR ipa/68672
++// { dg-do compile }
++// { dg-options "-O3 --param=partial-inlining-entry-probability=100 -g" }
++
++struct S { ~S () {} };
++S *a, *e;
++int *b;
++void bar ();
++void baz ();
++void fn (int *);
++void fn2 (S *);
++
++static int
++foo ()
++{
++  S *c = a;
++  if (c)
++    {
++      bar ();
++      if (a)
++	__builtin_abort ();
++      baz ();
++    }
++  int p = *b;
++  S *f = e;
++  if (p)
++    {
++      fn2 (f);
++      fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b);
++      fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b);
++      fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b);
++      fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b); fn (b);
++    }
++  f->~S ();
++  int q = 2 * p;
++  int r = 3 * q;
++  S *d = c;
++  return p;
++}
++
++void
++use1 ()
++{
++  foo ();
++}
++
++void
++use2 ()
++{
++  foo ();
++}
++
++void
++use3 ()
++{
++  foo ();
++}

diff --git a/gcc6-pr69241.patch b/gcc6-pr69241.patch
index 74bf6ad..39f6f1b 100644
--- a/gcc6-pr69241.patch
+++ b/gcc6-pr69241.patch
@@ -1,163 +1,88 @@
-2016-02-03  Jakub Jelinek  <jakub@redhat.com>
-	    Patrick Palka  <ppalka@gcc.gnu.org>
+2016-02-10  Jakub Jelinek  <jakub@redhat.com>
 
 	PR ipa/69241
-	PR c++/69649
-	* gimplify.c (gimplify_modify_expr): Set lhs even for noreturn
-	calls if the return type is TREE_ADDRESSABLE.
-	* cgraphunit.c (cgraph_node::expand_thunk): Likewise.
-	* ipa-split.c (split_function): Fix doubled "we" in comment.
-	Use void return type for the split part even if
-	!split_point->split_part_set_retval.
+	* ipa-split.c (split_function): If split part returns TREE_ADDRESSABLE
+	type by reference, force lhs on the call.
 
-	* g++.dg/ipa/pr69241-1.C: New test.
-	* g++.dg/ipa/pr69241-2.C: New test.
-	* g++.dg/ipa/pr69241-3.C: New test.
-	* g++.dg/ipa/pr69649.C: New test.
+	* g++.dg/ipa/pr69241-4.C: New test.
 
---- gcc/gimplify.c.jj	2016-02-02 20:42:00.000000000 +0100
-+++ gcc/gimplify.c	2016-02-03 11:04:06.400757668 +0100
-@@ -4828,7 +4828,8 @@ gimplify_modify_expr (tree *expr_p, gimp
- 	    }
- 	}
-       notice_special_calls (call_stmt);
--      if (!gimple_call_noreturn_p (call_stmt))
-+      if (!gimple_call_noreturn_p (call_stmt)
-+	  || TREE_ADDRESSABLE (TREE_TYPE (*to_p)))
- 	gimple_call_set_lhs (call_stmt, *to_p);
-       assign = call_stmt;
-     }
---- gcc/cgraphunit.c.jj	2016-01-20 10:55:15.000000000 +0100
-+++ gcc/cgraphunit.c	2016-02-03 11:04:41.034279370 +0100
-@@ -1703,7 +1703,8 @@ cgraph_node::expand_thunk (bool output_a
-       bsi = gsi_start_bb (bb);
- 
-       /* Build call to the function being thunked.  */
--      if (!VOID_TYPE_P (restype) && !alias_is_noreturn)
-+      if (!VOID_TYPE_P (restype)
-+	  && (!alias_is_noreturn || TREE_ADDRESSABLE (restype)))
- 	{
- 	  if (DECL_BY_REFERENCE (resdecl))
- 	    {
-@@ -1770,7 +1771,7 @@ cgraph_node::expand_thunk (bool output_a
- 	      || DECL_BY_REFERENCE (resdecl)))
-         gimple_call_set_return_slot_opt (call, true);
- 
--      if (restmp && !alias_is_noreturn)
-+      if (restmp)
- 	{
-           gimple_call_set_lhs (call, restmp);
- 	  gcc_assert (useless_type_conversion_p (TREE_TYPE (restmp),
---- gcc/ipa-split.c.jj	2016-01-04 14:55:52.000000000 +0100
-+++ gcc/ipa-split.c	2016-02-03 13:01:45.905136051 +0100
-@@ -1254,7 +1254,7 @@ split_function (basic_block return_bb, s
-       else
- 	main_part_return_p = true;
-     }
--  /* The main part also returns if we we split on a fallthru edge
-+  /* The main part also returns if we split on a fallthru edge
-      and the split part returns.  */
-   if (split_part_return_p)
-     FOR_EACH_EDGE (e, ei, split_point->entry_bb->preds)
-@@ -1364,8 +1364,9 @@ split_function (basic_block return_bb, s
-   /* Now create the actual clone.  */
-   cgraph_edge::rebuild_edges ();
-   node = cur_node->create_version_clone_with_body
--    (vNULL, NULL, args_to_skip, !split_part_return_p, split_point->split_bbs,
--     split_point->entry_bb, "part");
-+    (vNULL, NULL, args_to_skip,
-+     !split_part_return_p || !split_point->split_part_set_retval,
-+     split_point->split_bbs, split_point->entry_bb, "part");
- 
-   node->split_part = true;
- 
---- gcc/testsuite/g++.dg/ipa/pr69241-1.C.jj	2016-02-03 10:56:10.624328263 +0100
-+++ gcc/testsuite/g++.dg/ipa/pr69241-1.C	2016-02-03 11:01:18.600075039 +0100
-@@ -0,0 +1,12 @@
+--- gcc/ipa-split.c.jj	2016-02-11 12:46:15.975777652 +0100
++++ gcc/ipa-split.c	2016-02-11 13:06:57.715241871 +0100
+@@ -629,7 +629,18 @@ consider_split (struct split_point *curr
+        4) For non-SSA we need to look where the var is computed. */
+   retval = find_retval (return_bb);
+   if (!retval)
+-    current->split_part_set_retval = true;
++    {
++      /* If there is a return_bb with no return value in function returning
++	 value by reference, also make the split part return void, otherwise
++	 we expansion would try to create a non-POD temporary, which is
++	 invalid.  */
++      if (return_bb != EXIT_BLOCK_PTR_FOR_FN (cfun)
++	  && DECL_RESULT (current_function_decl)
++	  && DECL_BY_REFERENCE (DECL_RESULT (current_function_decl)))
++	current->split_part_set_retval = false;
++      else
++	current->split_part_set_retval = true;
++    }
+   else if (is_gimple_min_invariant (retval))
+     current->split_part_set_retval = false;
+   /* Special case is value returned by reference we record as if it was non-ssa
+--- gcc/testsuite/g++.dg/ipa/pr69241-4.C.jj	2016-02-11 13:00:04.160075417 +0100
++++ gcc/testsuite/g++.dg/ipa/pr69241-4.C	2016-02-11 13:00:04.160075417 +0100
+@@ -0,0 +1,55 @@
 +// PR ipa/69241
-+// { dg-do compile }
-+// { dg-options "-O2" }
++// { dg-do compile { target c++11 } }
++// { dg-options "-O2 -Wno-return-type" }
 +
-+struct R { R (const R &) {} };
-+__attribute__ ((noreturn)) R bar ();
-+
-+R
-+foo ()
-+{
-+  bar ();
-+}
---- gcc/testsuite/g++.dg/ipa/pr69241-2.C.jj	2016-02-03 10:56:07.996364556 +0100
-+++ gcc/testsuite/g++.dg/ipa/pr69241-2.C	2016-02-03 11:01:42.958738639 +0100
-@@ -0,0 +1,18 @@
-+// PR ipa/69241
-+// { dg-do compile }
-+// { dg-options "-O2" }
-+
-+__attribute__((noreturn)) void foo (int);
-+struct R { R (const R &) {} };
-+
-+R
-+bar ()
-+{
-+  foo (0);
-+}
-+
-+R
-+baz ()
-+{
-+  foo (0);
-+}
---- gcc/testsuite/g++.dg/ipa/pr69241-3.C.jj	2016-02-03 11:00:39.840610317 +0100
-+++ gcc/testsuite/g++.dg/ipa/pr69241-3.C	2016-02-03 11:01:02.044303678 +0100
-@@ -0,0 +1,12 @@
-+// PR ipa/69241
-+// { dg-do compile }
-+// { dg-options "-O2" }
-+
-+struct R { int x[100]; };
-+__attribute__ ((noreturn)) R bar ();
-+
-+void
-+foo ()
-+{
-+  bar ();
-+}
---- gcc/testsuite/g++.dg/ipa/pr69649.C.jj	2016-02-03 13:19:00.850845887 +0100
-+++ gcc/testsuite/g++.dg/ipa/pr69649.C	2016-02-03 13:18:43.000000000 +0100
-@@ -0,0 +1,36 @@
-+// PR c++/69649
-+// { dg-do compile }
-+// { dg-options "-O2" }
++template <typename> class A;
++struct B {
++  using pointer = int *;
++};
++template <typename _CharT, typename = A<_CharT>> class basic_string {
++  long _M_string_length;
++  enum { _S_local_capacity = 15 } _M_local_buf[_S_local_capacity];
++  B::pointer _M_local_data;
 +
-+struct A { virtual void m1 (); };
-+struct C : A { void m1 () { m1 (); } };
-+template <class T> struct B
-+{
-+  T *t;
-+  B (T *x) : t (x) { if (t) t->m1 (); }
-+  B (const B &);
++public:
++  ~basic_string();
 +};
-+struct D : public C {};
-+struct F : public D
-+{
-+  virtual B<D> m2 ();
-+  virtual B<D> m3 ();
-+  int m4 ();
++template <typename _CharT, typename _Traits, typename _Alloc>
++int operator<<(_Traits, basic_string<_CharT, _Alloc>);
++class C {
++  basic_string<A<char>> _M_string;
 +};
-+struct G : F
-+{
-+  B<D> m2 ();
-+  B<D> m3 ();
++class D {
++  C _M_stringbuf;
 +};
-+B<D> G::m2 ()
-+{
-+  if (m4 () == 0)
-+    return this;
-+  return 0;
-+}
-+B<D> G::m3 ()
-+{
-+  if (m4 () == 0)
-+    return this;
-+  return 0;
++class F {
++  int stream;
++  D stream_;
++};
++class G {
++public:
++  void operator&(int);
++};
++class H {
++public:
++  H(unsigned);
++  H(H &&);
++  bool m_fn1();
++};
++class I {
++  void m_fn2(const int &&);
++  static H m_fn3(const int &);
++};
++template <typename Functor> void Bind(Functor);
++class J {
++public:
++  static basic_string<char> m_fn4();
++};
++int a;
++void I::m_fn2(const int &&) { Bind(m_fn3); }
++H I::m_fn3(const int &) {
++  !false ? (void)0 : G() & F() << J::m_fn4();
++  H b(a);
++  if (b.m_fn1())
++    F();
 +}

diff --git a/gcc6-pr69274.patch b/gcc6-pr69274.patch
deleted file mode 100644
index 67d6a69..0000000
--- a/gcc6-pr69274.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-2016-02-05   Richard Biener  <rguenther@suse.de>
-
-	PR rtl-optimization/69274
-	* ira.c (ira_setup_alts): Do not change recog_data.operand
-	order.
-
---- gcc/ira.c	(revision 231814)
-+++ gcc/ira.c	(working copy)
-@@ -1888,10 +1888,11 @@ ira_setup_alts (rtx_insn *insn, HARD_REG
- 	}
-       if (commutative < 0)
- 	break;
--      if (curr_swapped)
--	break;
-+      /* Swap forth and back to avoid changing recog_data.  */
-       std::swap (recog_data.operand[commutative],
- 		 recog_data.operand[commutative + 1]);
-+      if (curr_swapped)
-+	break;
-     }
- }
- 

diff --git a/gcc6-pr69628.patch b/gcc6-pr69628.patch
deleted file mode 100644
index 2a06d55..0000000
--- a/gcc6-pr69628.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-2016-02-03  Jakub Jelinek  <jakub@redhat.com>
-
-	PR c++/69628
-	* charset.c (cpp_interpret_charconst): Clear *PCHARS_SEEN
-	and *UNSIGNEDP if bailing out early due to errors.
-
-	* g++.dg/parse/pr69628.C: New test.
-
---- libcpp/charset.c.jj	2016-01-04 15:14:08.000000000 +0100
-+++ libcpp/charset.c	2016-02-03 13:44:05.100120898 +0100
-@@ -1620,10 +1620,17 @@ cpp_interpret_charconst (cpp_reader *pfi
-   if (token->val.str.len == (size_t) (2 + wide + u8))
-     {
-       cpp_error (pfile, CPP_DL_ERROR, "empty character constant");
-+      *pchars_seen = 0;
-+      *unsignedp = 0;
-+      return 0;
-+    }
-+  else if (!cpp_interpret_string (pfile, &token->val.str, 1, &str,
-+				  token->type))
-+    {
-+      *pchars_seen = 0;
-+      *unsignedp = 0;
-       return 0;
-     }
--  else if (!cpp_interpret_string (pfile, &token->val.str, 1, &str, token->type))
--    return 0;
- 
-   if (wide)
-     result = wide_str_to_charconst (pfile, str, pchars_seen, unsignedp,
---- gcc/testsuite/g++.dg/parse/pr69628.C.jj	2016-02-03 13:47:55.300061110 +0100
-+++ gcc/testsuite/g++.dg/parse/pr69628.C	2016-02-03 13:47:32.000000000 +0100
-@@ -0,0 +1,5 @@
-+// PR c++/69628
-+// { dg-do compile }
-+
-+0''; // { dg-error "empty character constant" }
-+// { dg-error "expected unqualified-id before numeric constant" "" { target *-*-* } 4 }

diff --git a/gcc6-pr69691.patch b/gcc6-pr69691.patch
deleted file mode 100644
index 528931b..0000000
--- a/gcc6-pr69691.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-2016-02-05  Jakub Jelinek  <jakub@redhat.com>
-
-	PR rtl-optimization/69691
-	* lra-eliminations.c (move_plus_up): Don't add the addend twice.
-
-	* gcc.c-torture/execute/pr69691.c: New test.
-
---- gcc/lra-eliminations.c.jj	2016-01-14 20:57:03.000000000 +0100
-+++ gcc/lra-eliminations.c	2016-02-05 16:54:42.142004224 +0100
-@@ -303,7 +303,8 @@ move_plus_up (rtx x)
- 				 subreg_lowpart_offset (x_mode,
- 							subreg_reg_mode));
-       if (cst && CONSTANT_P (cst))
--	return gen_rtx_PLUS (x_mode, lowpart_subreg (x_mode, subreg_reg,
-+	return gen_rtx_PLUS (x_mode, lowpart_subreg (x_mode,
-+						     XEXP (subreg_reg, 0),
- 						     subreg_reg_mode), cst);
-     }
-   return x;
---- gcc/testsuite/gcc.c-torture/execute/pr69691.c.jj	2016-02-05 17:08:31.582557031 +0100
-+++ gcc/testsuite/gcc.c-torture/execute/pr69691.c	2016-02-05 17:08:24.000000000 +0100
-@@ -0,0 +1,127 @@
-+/* PR rtl-optimization/69691 */
-+
-+char u[] = { 46, 97, 99, 104, 52, 0 };
-+char *v[] = { u, 0 };
-+struct S { char a[10]; struct S *b[31]; };
-+struct S r[7], *r2 = r;
-+static struct S *w = 0;
-+
-+__attribute__((noinline, noclone)) int
-+fn (int x)
-+{
-+  if (__builtin_strchr (u, x) || x == 96)
-+    return x;
-+  __builtin_abort ();
-+}
-+
-+__attribute__((noinline, noclone)) int
-+foo (char x)
-+{
-+  if (x == 0)
-+    __builtin_abort ();
-+  if (fn (x) >= 96 && fn (x) <= 122)
-+    return (fn (x) - 96);
-+  else if (x == 46)
-+    return 0;
-+  else
-+    {
-+      __builtin_printf ("foo %d\n", x);
-+      return -1;
-+    }
-+}
-+
-+__attribute__((noinline, noclone)) void
-+bar (char **x)
-+{
-+  char **b, c, *d, e[500], *f, g[10];
-+  int z, l, h, i;
-+  struct S *s;
-+
-+  w = r2++;
-+  for (b = x; *b; b++)
-+    {
-+      __builtin_strcpy (e, *b);
-+      f = e;
-+      do
-+	{
-+	  d = __builtin_strchr (f, 32);
-+	  if (d)
-+	    *d = 0;
-+	  l = __builtin_strlen (f);
-+	  h = 0;
-+	  s = w;
-+	  __builtin_memset (g, 0, sizeof (g));
-+	  for (z = 0; z < l; z++)
-+	    {
-+	      c = f[z];
-+	      if (c >= 48 && c <= 57)
-+		g[h] = c - 48;
-+	      else
-+		{
-+		  i = foo (c);
-+		  if (!s->b[i])
-+		    {
-+		      s->b[i] = r2++;
-+		      if (r2 == &r[7])
-+			__builtin_abort ();
-+		    }
-+		  s = s->b[i];
-+		  h++;
-+		}
-+	    }
-+	  __builtin_memcpy (s->a, g, 10);
-+	  if (d)
-+	    f = d + 1;
-+	}
-+      while (d);
-+    }
-+}
-+
-+__attribute__((noinline, noclone)) void
-+baz (char *x)
-+{
-+  char a[300], b[300];
-+  int z, y, t, l;
-+  struct S *s;
-+
-+  l = __builtin_strlen (x);
-+  *a = 96;
-+  for (z = 0; z < l; z++)
-+    {
-+      a[z + 1] = fn ((unsigned int) x[z]);
-+      if (foo (a[z + 1]) <= 0)
-+	return;
-+    }
-+  a[l + 1] = 96;
-+  l += 2;
-+  __builtin_memset (b, 0, l + 2);
-+
-+  if (!w)
-+    return;
-+
-+  for (z = 0; z < l; z++)
-+    {
-+      s = w;
-+      for (y = z; y < l; y++)
-+	{
-+	  s = s->b[foo (a[y])];
-+	  if (!s)
-+	    break;
-+	  for (t = 0; t <= y - z + 2; t++)
-+	    if (s->a[t] > b[z + t])
-+	      b[z + t] = s->a[t];
-+	}
-+    }
-+  for (z = 3; z < l - 2; z++)
-+    if ((b[z] & 1) == 1)
-+     asm ("");
-+}
-+
-+int
-+main ()
-+{
-+  bar (v);
-+  char c[] = { 97, 97, 97, 97, 97, 0 };
-+  baz (c);
-+  return 0;
-+}

diff --git a/sources b/sources
index 9b4ccae..5c03116 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-8f3f950e75ddde6b87c71096c645efb8  gcc-6.0.0-20160205.tar.bz2
+9add2f51dd3d4c93c13801fadfd8fb6e  gcc-6.0.0-20160212.tar.bz2

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

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=178273602436.1.627644855650468366.rpms-gcc-89e370f159d2@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