diff mbox series

c++: DECL_DECOMPOSITION_P cleanup

Message ID 20240302005910.924213-1-polacek@redhat.com
State New
Headers show
Series c++: DECL_DECOMPOSITION_P cleanup | expand

Commit Message

Marek Polacek March 2, 2024, 12:59 a.m. UTC
Bootstrapped/regtested on x86_64-pc-linux-gnu, ok for 15?

-- >8 --
DECL_DECOMPOSITION_P already checks VAR_P but we repeat the check
in a lot of places.

gcc/cp/ChangeLog:

	* decl.cc (duplicate_decls): Don't check VAR_P before
	DECL_DECOMPOSITION_P.
	* init.cc (build_aggr_init): Likewise.
	* parser.cc (cp_parser_range_for): Likewise.
	(do_range_for_auto_deduction): Likewise.
	(cp_convert_range_for): Likewise.
	(cp_convert_omp_range_for): Likewise.
	(cp_finish_omp_range_for): Likewise.
	* pt.cc (extract_locals_r): Likewise.
	(tsubst_omp_for_iterator): Likewise.
	(tsubst_decomp_names): Likewise.
	(tsubst_stmt): Likewise.
	* typeck.cc (maybe_warn_about_returning_address_of_local): Likewise.
---
 gcc/cp/decl.cc   |  3 +--
 gcc/cp/init.cc   |  2 +-
 gcc/cp/parser.cc | 11 ++++-------
 gcc/cp/pt.cc     | 11 +++--------
 gcc/cp/typeck.cc |  3 +--
 5 files changed, 10 insertions(+), 20 deletions(-)


base-commit: 574fd1f17f100c7c355ad26bc525ab5a3386bb2d

Comments

Jason Merrill March 4, 2024, 11:02 p.m. UTC | #1
On 3/1/24 19:59, Marek Polacek wrote:
> Bootstrapped/regtested on x86_64-pc-linux-gnu, ok for 15?

OK for 15, yes.

> -- >8 --
> DECL_DECOMPOSITION_P already checks VAR_P but we repeat the check
> in a lot of places.
> 
> gcc/cp/ChangeLog:
> 
> 	* decl.cc (duplicate_decls): Don't check VAR_P before
> 	DECL_DECOMPOSITION_P.
> 	* init.cc (build_aggr_init): Likewise.
> 	* parser.cc (cp_parser_range_for): Likewise.
> 	(do_range_for_auto_deduction): Likewise.
> 	(cp_convert_range_for): Likewise.
> 	(cp_convert_omp_range_for): Likewise.
> 	(cp_finish_omp_range_for): Likewise.
> 	* pt.cc (extract_locals_r): Likewise.
> 	(tsubst_omp_for_iterator): Likewise.
> 	(tsubst_decomp_names): Likewise.
> 	(tsubst_stmt): Likewise.
> 	* typeck.cc (maybe_warn_about_returning_address_of_local): Likewise.
> ---
>   gcc/cp/decl.cc   |  3 +--
>   gcc/cp/init.cc   |  2 +-
>   gcc/cp/parser.cc | 11 ++++-------
>   gcc/cp/pt.cc     | 11 +++--------
>   gcc/cp/typeck.cc |  3 +--
>   5 files changed, 10 insertions(+), 20 deletions(-)
> 
> diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc
> index dbc3df24e77..13df91ce17c 100644
> --- a/gcc/cp/decl.cc
> +++ b/gcc/cp/decl.cc
> @@ -1928,8 +1928,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool hiding, bool was_hidden)
>   	  inform (olddecl_loc, "previous declaration %q#D", olddecl);
>   	  return error_mark_node;
>   	}
> -      else if ((VAR_P (olddecl) && DECL_DECOMPOSITION_P (olddecl))
> -	       || (VAR_P (newdecl) && DECL_DECOMPOSITION_P (newdecl)))
> +      else if (DECL_DECOMPOSITION_P (olddecl) || DECL_DECOMPOSITION_P (newdecl))
>   	/* A structured binding must be unique in its declarative region.  */;
>         else if (DECL_IMPLICIT_TYPEDEF_P (olddecl)
>   	       || DECL_IMPLICIT_TYPEDEF_P (newdecl))
> diff --git a/gcc/cp/init.cc b/gcc/cp/init.cc
> index d2586fad86b..bcfb4d350bc 100644
> --- a/gcc/cp/init.cc
> +++ b/gcc/cp/init.cc
> @@ -1979,7 +1979,7 @@ build_aggr_init (tree exp, tree init, int flags, tsubst_flags_t complain)
>         tree itype = init ? TREE_TYPE (init) : NULL_TREE;
>         int from_array = 0;
>   
> -      if (VAR_P (exp) && DECL_DECOMPOSITION_P (exp))
> +      if (DECL_DECOMPOSITION_P (exp))
>   	{
>   	  from_array = 1;
>   	  init = mark_rvalue_use (init);
> diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc
> index a310b9e8c07..8a6ced17c5c 100644
> --- a/gcc/cp/parser.cc
> +++ b/gcc/cp/parser.cc
> @@ -14117,7 +14117,6 @@ cp_parser_range_for (cp_parser *parser, tree scope, tree init, tree range_decl,
>   	  /* For decomposition declaration get all of the corresponding
>   	     declarations out of the way.  */
>   	  if (TREE_CODE (v) == ARRAY_REF
> -	      && VAR_P (TREE_OPERAND (v, 0))
>   	      && DECL_DECOMPOSITION_P (TREE_OPERAND (v, 0)))
>   	    {
>   	      tree d = range_decl;
> @@ -14238,7 +14237,7 @@ do_range_for_auto_deduction (tree decl, tree range_expr, cp_decomp *decomp)
>   						iter_decl, auto_node,
>   						tf_warning_or_error,
>   						adc_variable_type);
> -	  if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
> +	  if (DECL_DECOMPOSITION_P (decl))
>   	    cp_finish_decomp (decl, decomp);
>   	}
>       }
> @@ -14437,7 +14436,7 @@ cp_convert_range_for (tree statement, tree range_decl, tree range_expr,
>     cp_finish_decl (range_decl, deref_begin,
>   		  /*is_constant_init*/false, NULL_TREE,
>   		  LOOKUP_ONLYCONVERTING, decomp);
> -  if (VAR_P (range_decl) && DECL_DECOMPOSITION_P (range_decl))
> +  if (DECL_DECOMPOSITION_P (range_decl))
>       cp_finish_decomp (range_decl, decomp);
>   
>     warn_for_range_copy (range_decl, deref_begin);
> @@ -44288,7 +44287,6 @@ cp_convert_omp_range_for (tree &this_pre_body, tree &sl,
>   	    {
>   	      tree v = DECL_VALUE_EXPR (decl);
>   	      if (TREE_CODE (v) == ARRAY_REF
> -		  && VAR_P (TREE_OPERAND (v, 0))
>   		  && DECL_DECOMPOSITION_P (TREE_OPERAND (v, 0)))
>   		{
>   		  d = TREE_OPERAND (v, 0);
> @@ -44393,7 +44391,6 @@ cp_convert_omp_range_for (tree &this_pre_body, tree &sl,
>       {
>         tree v = DECL_VALUE_EXPR (orig_decl);
>         if (TREE_CODE (v) == ARRAY_REF
> -	  && VAR_P (TREE_OPERAND (v, 0))
>   	  && DECL_DECOMPOSITION_P (TREE_OPERAND (v, 0)))
>   	{
>   	  tree d = orig_decl;
> @@ -44471,7 +44468,7 @@ cp_finish_omp_range_for (tree orig, tree begin)
>     tree decl = TREE_VEC_ELT (TREE_CHAIN (orig), 2);
>     cp_decomp decomp_d, *decomp = NULL;
>   
> -  if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
> +  if (DECL_DECOMPOSITION_P (decl))
>       {
>         decomp = &decomp_d;
>         decomp_d.decl = TREE_VEC_ELT (TREE_CHAIN (orig), 3);
> @@ -44497,7 +44494,7 @@ cp_finish_omp_range_for (tree orig, tree begin)
>   					NULL_TREE, tf_warning_or_error),
>   		  /*is_constant_init*/false, NULL_TREE,
>   		  LOOKUP_ONLYCONVERTING, decomp);
> -  if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
> +  if (DECL_DECOMPOSITION_P (decl))
>       cp_finish_decomp (decl, decomp);
>   }
>   
> diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc
> index c4bc54a8fdb..4def9c45402 100644
> --- a/gcc/cp/pt.cc
> +++ b/gcc/cp/pt.cc
> @@ -13303,14 +13303,12 @@ extract_locals_r (tree *tp, int *walk_subtrees, void *data_)
>       {
>         tree decl = DECL_EXPR_DECL (*tp);
>         data.internal.add (decl);
> -      if (VAR_P (decl)
> -	  && DECL_DECOMPOSITION_P (decl)
> +      if (DECL_DECOMPOSITION_P (decl)
>   	  && TREE_TYPE (decl) != error_mark_node)
>   	{
>   	  gcc_assert (DECL_NAME (decl) == NULL_TREE);
>   	  for (tree decl2 = DECL_CHAIN (decl);
>   	       decl2
> -	       && VAR_P (decl2)
>   	       && DECL_DECOMPOSITION_P (decl2)
>   	       && DECL_NAME (decl2)
>   	       && TREE_TYPE (decl2) != error_mark_node;
> @@ -17912,7 +17910,6 @@ tsubst_omp_for_iterator (tree t, int i, tree declv, tree &orig_declv,
>   	{
>   	  tree v = DECL_VALUE_EXPR (decl);
>   	  if (TREE_CODE (v) == ARRAY_REF
> -	      && VAR_P (TREE_OPERAND (v, 0))
>   	      && DECL_DECOMPOSITION_P (TREE_OPERAND (v, 0)))
>   	    {
>   	      cp_decomp decomp_d = { NULL_TREE, 0 };
> @@ -18261,7 +18258,6 @@ tsubst_decomp_names (tree decl, tree pattern_decl, tree args,
>     gcc_assert (DECL_NAME (decl) == NULL_TREE);
>     for (decl2 = DECL_CHAIN (pattern_decl);
>          decl2
> -       && VAR_P (decl2)
>          && DECL_DECOMPOSITION_P (decl2)
>          && DECL_NAME (decl2);
>          decl2 = DECL_CHAIN (decl2))
> @@ -18572,8 +18568,7 @@ tsubst_stmt (tree t, tree args, tsubst_flags_t complain, tree in_decl)
>   			&& DECL_OMP_PRIVATIZED_MEMBER (decl))
>   		      break;
>   
> -		    if (VAR_P (decl)
> -			&& DECL_DECOMPOSITION_P (decl)
> +		    if (DECL_DECOMPOSITION_P (decl)
>   			&& TREE_TYPE (pattern_decl) != error_mark_node)
>   		      {
>   			decomp = &decomp_d;
> @@ -18647,7 +18642,7 @@ tsubst_stmt (tree t, tree args, tsubst_flags_t complain, tree in_decl)
>           expr = RECUR (RANGE_FOR_EXPR (t));
>   
>   	cp_decomp decomp_d, *decomp = NULL;
> -	if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
> +	if (DECL_DECOMPOSITION_P (decl))
>   	  {
>   	    decomp = &decomp_d;
>   	    decl = tsubst_decomp_names (decl, RANGE_FOR_DECL (t), args,
> diff --git a/gcc/cp/typeck.cc b/gcc/cp/typeck.cc
> index f5a0a2273be..db19af1d24c 100644
> --- a/gcc/cp/typeck.cc
> +++ b/gcc/cp/typeck.cc
> @@ -10647,8 +10647,7 @@ maybe_warn_about_returning_address_of_local (tree retval, location_t loc)
>         && !(TREE_STATIC (whats_returned)
>   	   || TREE_PUBLIC (whats_returned)))
>       {
> -      if (VAR_P (whats_returned)
> -	  && DECL_DECOMPOSITION_P (whats_returned)
> +      if (DECL_DECOMPOSITION_P (whats_returned)
>   	  && DECL_DECOMP_BASE (whats_returned)
>   	  && DECL_HAS_VALUE_EXPR_P (whats_returned))
>   	{
> 
> base-commit: 574fd1f17f100c7c355ad26bc525ab5a3386bb2d
diff mbox series

Patch

diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc
index dbc3df24e77..13df91ce17c 100644
--- a/gcc/cp/decl.cc
+++ b/gcc/cp/decl.cc
@@ -1928,8 +1928,7 @@  duplicate_decls (tree newdecl, tree olddecl, bool hiding, bool was_hidden)
 	  inform (olddecl_loc, "previous declaration %q#D", olddecl);
 	  return error_mark_node;
 	}
-      else if ((VAR_P (olddecl) && DECL_DECOMPOSITION_P (olddecl))
-	       || (VAR_P (newdecl) && DECL_DECOMPOSITION_P (newdecl)))
+      else if (DECL_DECOMPOSITION_P (olddecl) || DECL_DECOMPOSITION_P (newdecl))
 	/* A structured binding must be unique in its declarative region.  */;
       else if (DECL_IMPLICIT_TYPEDEF_P (olddecl)
 	       || DECL_IMPLICIT_TYPEDEF_P (newdecl))
diff --git a/gcc/cp/init.cc b/gcc/cp/init.cc
index d2586fad86b..bcfb4d350bc 100644
--- a/gcc/cp/init.cc
+++ b/gcc/cp/init.cc
@@ -1979,7 +1979,7 @@  build_aggr_init (tree exp, tree init, int flags, tsubst_flags_t complain)
       tree itype = init ? TREE_TYPE (init) : NULL_TREE;
       int from_array = 0;
 
-      if (VAR_P (exp) && DECL_DECOMPOSITION_P (exp))
+      if (DECL_DECOMPOSITION_P (exp))
 	{
 	  from_array = 1;
 	  init = mark_rvalue_use (init);
diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc
index a310b9e8c07..8a6ced17c5c 100644
--- a/gcc/cp/parser.cc
+++ b/gcc/cp/parser.cc
@@ -14117,7 +14117,6 @@  cp_parser_range_for (cp_parser *parser, tree scope, tree init, tree range_decl,
 	  /* For decomposition declaration get all of the corresponding
 	     declarations out of the way.  */
 	  if (TREE_CODE (v) == ARRAY_REF
-	      && VAR_P (TREE_OPERAND (v, 0))
 	      && DECL_DECOMPOSITION_P (TREE_OPERAND (v, 0)))
 	    {
 	      tree d = range_decl;
@@ -14238,7 +14237,7 @@  do_range_for_auto_deduction (tree decl, tree range_expr, cp_decomp *decomp)
 						iter_decl, auto_node,
 						tf_warning_or_error,
 						adc_variable_type);
-	  if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
+	  if (DECL_DECOMPOSITION_P (decl))
 	    cp_finish_decomp (decl, decomp);
 	}
     }
@@ -14437,7 +14436,7 @@  cp_convert_range_for (tree statement, tree range_decl, tree range_expr,
   cp_finish_decl (range_decl, deref_begin,
 		  /*is_constant_init*/false, NULL_TREE,
 		  LOOKUP_ONLYCONVERTING, decomp);
-  if (VAR_P (range_decl) && DECL_DECOMPOSITION_P (range_decl))
+  if (DECL_DECOMPOSITION_P (range_decl))
     cp_finish_decomp (range_decl, decomp);
 
   warn_for_range_copy (range_decl, deref_begin);
@@ -44288,7 +44287,6 @@  cp_convert_omp_range_for (tree &this_pre_body, tree &sl,
 	    {
 	      tree v = DECL_VALUE_EXPR (decl);
 	      if (TREE_CODE (v) == ARRAY_REF
-		  && VAR_P (TREE_OPERAND (v, 0))
 		  && DECL_DECOMPOSITION_P (TREE_OPERAND (v, 0)))
 		{
 		  d = TREE_OPERAND (v, 0);
@@ -44393,7 +44391,6 @@  cp_convert_omp_range_for (tree &this_pre_body, tree &sl,
     {
       tree v = DECL_VALUE_EXPR (orig_decl);
       if (TREE_CODE (v) == ARRAY_REF
-	  && VAR_P (TREE_OPERAND (v, 0))
 	  && DECL_DECOMPOSITION_P (TREE_OPERAND (v, 0)))
 	{
 	  tree d = orig_decl;
@@ -44471,7 +44468,7 @@  cp_finish_omp_range_for (tree orig, tree begin)
   tree decl = TREE_VEC_ELT (TREE_CHAIN (orig), 2);
   cp_decomp decomp_d, *decomp = NULL;
 
-  if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
+  if (DECL_DECOMPOSITION_P (decl))
     {
       decomp = &decomp_d;
       decomp_d.decl = TREE_VEC_ELT (TREE_CHAIN (orig), 3);
@@ -44497,7 +44494,7 @@  cp_finish_omp_range_for (tree orig, tree begin)
 					NULL_TREE, tf_warning_or_error),
 		  /*is_constant_init*/false, NULL_TREE,
 		  LOOKUP_ONLYCONVERTING, decomp);
-  if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
+  if (DECL_DECOMPOSITION_P (decl))
     cp_finish_decomp (decl, decomp);
 }
 
diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc
index c4bc54a8fdb..4def9c45402 100644
--- a/gcc/cp/pt.cc
+++ b/gcc/cp/pt.cc
@@ -13303,14 +13303,12 @@  extract_locals_r (tree *tp, int *walk_subtrees, void *data_)
     {
       tree decl = DECL_EXPR_DECL (*tp);
       data.internal.add (decl);
-      if (VAR_P (decl)
-	  && DECL_DECOMPOSITION_P (decl)
+      if (DECL_DECOMPOSITION_P (decl)
 	  && TREE_TYPE (decl) != error_mark_node)
 	{
 	  gcc_assert (DECL_NAME (decl) == NULL_TREE);
 	  for (tree decl2 = DECL_CHAIN (decl);
 	       decl2
-	       && VAR_P (decl2)
 	       && DECL_DECOMPOSITION_P (decl2)
 	       && DECL_NAME (decl2)
 	       && TREE_TYPE (decl2) != error_mark_node;
@@ -17912,7 +17910,6 @@  tsubst_omp_for_iterator (tree t, int i, tree declv, tree &orig_declv,
 	{
 	  tree v = DECL_VALUE_EXPR (decl);
 	  if (TREE_CODE (v) == ARRAY_REF
-	      && VAR_P (TREE_OPERAND (v, 0))
 	      && DECL_DECOMPOSITION_P (TREE_OPERAND (v, 0)))
 	    {
 	      cp_decomp decomp_d = { NULL_TREE, 0 };
@@ -18261,7 +18258,6 @@  tsubst_decomp_names (tree decl, tree pattern_decl, tree args,
   gcc_assert (DECL_NAME (decl) == NULL_TREE);
   for (decl2 = DECL_CHAIN (pattern_decl);
        decl2
-       && VAR_P (decl2)
        && DECL_DECOMPOSITION_P (decl2)
        && DECL_NAME (decl2);
        decl2 = DECL_CHAIN (decl2))
@@ -18572,8 +18568,7 @@  tsubst_stmt (tree t, tree args, tsubst_flags_t complain, tree in_decl)
 			&& DECL_OMP_PRIVATIZED_MEMBER (decl))
 		      break;
 
-		    if (VAR_P (decl)
-			&& DECL_DECOMPOSITION_P (decl)
+		    if (DECL_DECOMPOSITION_P (decl)
 			&& TREE_TYPE (pattern_decl) != error_mark_node)
 		      {
 			decomp = &decomp_d;
@@ -18647,7 +18642,7 @@  tsubst_stmt (tree t, tree args, tsubst_flags_t complain, tree in_decl)
         expr = RECUR (RANGE_FOR_EXPR (t));
 
 	cp_decomp decomp_d, *decomp = NULL;
-	if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
+	if (DECL_DECOMPOSITION_P (decl))
 	  {
 	    decomp = &decomp_d;
 	    decl = tsubst_decomp_names (decl, RANGE_FOR_DECL (t), args,
diff --git a/gcc/cp/typeck.cc b/gcc/cp/typeck.cc
index f5a0a2273be..db19af1d24c 100644
--- a/gcc/cp/typeck.cc
+++ b/gcc/cp/typeck.cc
@@ -10647,8 +10647,7 @@  maybe_warn_about_returning_address_of_local (tree retval, location_t loc)
       && !(TREE_STATIC (whats_returned)
 	   || TREE_PUBLIC (whats_returned)))
     {
-      if (VAR_P (whats_returned)
-	  && DECL_DECOMPOSITION_P (whats_returned)
+      if (DECL_DECOMPOSITION_P (whats_returned)
 	  && DECL_DECOMP_BASE (whats_returned)
 	  && DECL_HAS_VALUE_EXPR_P (whats_returned))
 	{