This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

PATCH RFA: Change variable to bool


In the function grokdeclarator in c-decl.c the local variable
size_varies has type int, but is effectively treated as a bool.  In
particular, it is used in statements like
  this_size_varies = size_varies = 1;
where this_size_varies has type bool.  This is OK in C but the C++
frontend gives a warning about an assignment used as a truth value
without parentheses.  This patch avoids the issue by changing the type
of size_varies, which seems like the right thing to do anyhow.

Bootstrapped and tested on x86_64-unknown-linux-gnu.  This patch
requires the approval of a C frontend maintainer or a global
maintainer.  OK for mainline?

Ian


2009-06-16  Ian Lance Taylor  <iant@google.com>

	* c-decl.c (grokdeclarator): Change size_varies to bool.


Index: c-decl.c
===================================================================
--- c-decl.c	(revision 148544)
+++ c-decl.c	(working copy)
@@ -4713,7 +4713,7 @@ grokdeclarator (const struct c_declarato
   tree name = NULL_TREE;
   bool funcdef_flag = false;
   bool funcdef_syntax = false;
-  int size_varies = 0;
+  bool size_varies = false;
   tree decl_attr = declspecs->decl_attr;
   int array_ptr_quals = TYPE_UNQUALIFIED;
   tree array_ptr_attrs = NULL_TREE;
@@ -4807,7 +4807,7 @@ grokdeclarator (const struct c_declarato
       type = integer_type_node;
     }
 
-  size_varies = C_TYPE_VARIABLE_SIZE (type);
+  size_varies = C_TYPE_VARIABLE_SIZE (type) != 0;
 
   /* Diagnose defaulting to "int".  */
 
@@ -5140,7 +5140,7 @@ grokdeclarator (const struct c_declarato
 				   "variably modified %qE at file scope",
 				   name);
 			else
-			  this_size_varies = size_varies = 1;
+			  this_size_varies = size_varies = true;
 			warn_variable_length_array (name, size);
 		      }
 		  }
@@ -5155,7 +5155,7 @@ grokdeclarator (const struct c_declarato
 		    /* Make sure the array size remains visibly
 		       nonconstant even if it is (eg) a const variable
 		       with known value.  */
-		    this_size_varies = size_varies = 1;
+		    this_size_varies = size_varies = true;
 		    warn_variable_length_array (name, size);
 		  }
 
@@ -5227,7 +5227,7 @@ grokdeclarator (const struct c_declarato
 		     the field variably modified, not through being
 		     something other than a declaration with function
 		     prototype scope.  */
-		  size_varies = 1;
+		  size_varies = true;
 		else
 		  {
 		    const struct c_declarator *t = declarator;
@@ -5251,7 +5251,7 @@ grokdeclarator (const struct c_declarato
 		if (array_parm_vla_unspec_p)
 		  {
 		    itype = build_range_type (sizetype, size_zero_node, NULL_TREE);
-		    size_varies = 1;
+		    size_varies = true;
 		  }
 	      }
 	    else if (decl_context == TYPENAME)
@@ -5265,7 +5265,7 @@ grokdeclarator (const struct c_declarato
 		       otherwise be modified below.  */
 		    itype = build_range_type (sizetype, size_zero_node,
 					      NULL_TREE);
-		    size_varies = 1;
+		    size_varies = true;
 		  }
 	      }
 
@@ -5349,7 +5349,7 @@ grokdeclarator (const struct c_declarato
 	    if (type == error_mark_node)
 	      continue;
 
-	    size_varies = 0;
+	    size_varies = false;
 
 	    /* Warn about some types functions can't return.  */
 	    if (TREE_CODE (type) == FUNCTION_TYPE)
@@ -5434,7 +5434,7 @@ grokdeclarator (const struct c_declarato
 		       "ISO C forbids qualified function types");
 	    if (type_quals)
 	      type = c_build_qualified_type (type, type_quals);
-	    size_varies = 0;
+	    size_varies = false;
 
 	    /* When the pointed-to type involves components of variable size,
 	       care must be taken to ensure that the size evaluation code is
@@ -5620,7 +5620,7 @@ grokdeclarator (const struct c_declarato
 	      warning_at (loc, OPT_Wattributes,
 			  "attributes in parameter array declarator ignored");
 
-	    size_varies = 0;
+	    size_varies = false;
 	  }
 	else if (TREE_CODE (type) == FUNCTION_TYPE)
 	  {

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]