[PATCH] Simplify readonly_error

Volker Reichelt v.reichelt@netcologne.de
Sun Mar 4 21:57:00 GMT 2007


The following patch removes the last argument of readonly_error in
typeck2.c as it is always 0. This allows to simplify the function a
little as we always amit a hard error and never a pedwarn.

Bootstrapped and regtested on i686-pc-linux-gnu.
Ok for mainline?

Regards,
Volker

:ADDPATCH C++:


2007-03-04  Volker Reichelt  <reichelt@netcologne.de>

	* typeck2.c (readonly_error): Always emit a hard error.
	Remove last argument.
	* cp-tree.h (readonly_error): Adjust prototype.
	* semantics.c (finish_asm_stmt): Adjust call to readonly_error.
	* typeck.c (build_unary_op): Likewise.
	(build_modify_expr): Likewise.

===================================================================
--- gcc/gcc/cp/typeck2.c	(revision 113967)
+++ gcc/gcc/cp/typeck2.c	(working copy)
@@ -68,28 +68,20 @@
 }
 
 /* According to ARM $7.1.6, "A `const' object may be initialized, but its
-   value may not be changed thereafter.  Thus, we emit hard errors for these,
-   rather than just pedwarns.  If `SOFT' is 1, then we just pedwarn.  (For
-   example, conversions to references.)  */
+   value may not be changed thereafter.  */
 
 void
-readonly_error (tree arg, const char* string, int soft)
+readonly_error (tree arg, const char* string)
 {
   const char *fmt;
-  void (*fn) (const char *, ...) ATTRIBUTE_GCC_CXXDIAG(1,2);
 
-  if (soft)
-    fn = pedwarn;
-  else
-    fn = error;
-
   if (TREE_CODE (arg) == COMPONENT_REF)
     {
       if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
 	fmt = "%s of data-member %qD in read-only structure";
       else
 	fmt = "%s of read-only data-member %qD";
-      (*fn) (fmt, string, TREE_OPERAND (arg, 1));
+      error (fmt, string, TREE_OPERAND (arg, 1));
     }
   else if (TREE_CODE (arg) == VAR_DECL)
     {
@@ -99,21 +91,21 @@
 	fmt = "%s of constant field %qD";
       else
 	fmt = "%s of read-only variable %qD";
-      (*fn) (fmt, string, arg);
+      error (fmt, string, arg);
     }
   else if (TREE_CODE (arg) == PARM_DECL)
-    (*fn) ("%s of read-only parameter %qD", string, arg);
+    error ("%s of read-only parameter %qD", string, arg);
   else if (TREE_CODE (arg) == INDIRECT_REF
 	   && TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))) == REFERENCE_TYPE
 	   && (TREE_CODE (TREE_OPERAND (arg, 0)) == VAR_DECL
 	       || TREE_CODE (TREE_OPERAND (arg, 0)) == PARM_DECL))
-    (*fn) ("%s of read-only reference %qD", string, TREE_OPERAND (arg, 0));
+    error ("%s of read-only reference %qD", string, TREE_OPERAND (arg, 0));
   else if (TREE_CODE (arg) == RESULT_DECL)
-    (*fn) ("%s of read-only named return value %qD", string, arg);
+    error ("%s of read-only named return value %qD", string, arg);
   else if (TREE_CODE (arg) == FUNCTION_DECL)
-    (*fn) ("%s of function %qD", string, arg);
+    error ("%s of function %qD", string, arg);
   else
-    (*fn) ("%s of read-only location", string);
+    error ("%s of read-only location", string);
 }
 
 
===================================================================
--- gcc/gcc/cp/cp-tree.h	(revision 113967)
+++ gcc/gcc/cp/cp-tree.h	(working copy)
@@ -4602,7 +4602,7 @@
   (cxx_incomplete_type_diagnostic ((V), (T), 0))
 extern tree error_not_base_type			(tree, tree);
 extern tree binfo_or_else			(tree, tree);
-extern void readonly_error			(tree, const char *, int);
+extern void readonly_error			(tree, const char *);
 extern void complete_type_check_abstract	(tree);
 extern int abstract_virtuals_error		(tree, tree);
 
===================================================================
--- gcc/gcc/cp/semantics.c	(revision 113967)
+++ gcc/gcc/cp/semantics.c	(working copy)
@@ -1246,7 +1246,7 @@ finish_asm_stmt (int volatile_p, tree string,
 		     effectively const.  */
 		  || (CLASS_TYPE_P (TREE_TYPE (operand))
 		      && C_TYPE_FIELDS_READONLY (TREE_TYPE (operand)))))
-	    readonly_error (operand, "assignment (via 'asm' output)", 0);
+	    readonly_error (operand, "assignment (via 'asm' output)");
 
 	  constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
 	  oconstraints[i] = constraint;
===================================================================
--- gcc/gcc/cp/typeck.c	(revision 113967)
+++ gcc/gcc/cp/typeck.c	(working copy)
@@ -4205,8 +4205,7 @@ build_unary_op (enum tree_code code, tree xarg,
 	  || TREE_READONLY (arg))
 	readonly_error (arg, ((code == PREINCREMENT_EXPR
 			       || code == POSTINCREMENT_EXPR)
-			      ? "increment" : "decrement"),
-			0);
+			      ? "increment" : "decrement"));
 
       {
 	tree inc;
@@ -5780,7 +5779,7 @@ build_modify_expr (tree lhs, enum tree_code
 	     effectively const.  */
 	  || (CLASS_TYPE_P (lhstype)
 	      && C_TYPE_FIELDS_READONLY (lhstype))))
-    readonly_error (lhs, "assignment", 0);
+    readonly_error (lhs, "assignment");
 
   /* If storing into a structure or union member, it has probably been
      given type `int'.  Compute the type that would go with the actual
===================================================================



More information about the Gcc-patches mailing list