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]

Re: Patch to fix diagnostic format warnings in cp/ dir


 > From: Gabriel Dos Reis <gdr@integrable-solutions.net>
 > 
 > the fix is to supply the location info directly, i.e.: 
 > 
 >   cp_error ("%Hno specifiers", &DECL_SOURCE_LOCATION (extra_arg));
 > 
 > -- Gaby


Ok?


2003-06-20  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* class.c (add_method, check_field_decl): Fix format specifier.
	* decl.c (duplicate_decls, pushdecl, check_goto,
	fixup_anonymous_aggr, maybe_commonize_var, grokdeclarator,
	start_enum): Likewise.
	* decl2.c (ambiguous_decl): Likewise.
	* pt.c (redeclare_class_template): Likewise.

diff -rup orig/egcc-CVS20030630/gcc/cp/class.c egcc-CVS20030630/gcc/cp/class.c
--- orig/egcc-CVS20030630/gcc/cp/class.c	2003-06-24 12:16:35.000000000 -0400
+++ egcc-CVS20030630/gcc/cp/class.c	2003-07-01 14:13:21.001905000 -0400
@@ -927,7 +927,7 @@ add_method (tree type, tree method, int 
 	      else
 		{
 		  cp_error_at ("`%#D' and `%#D' cannot be overloaded",
-			       method, fn, method);
+			       method, fn);
 
 		  /* We don't call duplicate_decls here to merge
 		     the declarations because that will confuse
@@ -2961,7 +2961,7 @@ check_field_decl (tree field,
       /* `build_class_init_list' does not recognize
 	 non-FIELD_DECLs.  */
       if (TREE_CODE (t) == UNION_TYPE && any_default_members != 0)
-	cp_error_at ("multiple fields in union `%T' initialized");
+	cp_error_at ("multiple fields in union `%T' initialized", t);
       *any_default_members = 1;
     }
 }
diff -rup orig/egcc-CVS20030630/gcc/cp/decl.c egcc-CVS20030630/gcc/cp/decl.c
--- orig/egcc-CVS20030630/gcc/cp/decl.c	2003-06-28 20:01:23.000000000 -0400
+++ egcc-CVS20030630/gcc/cp/decl.c	2003-07-01 14:16:05.857630000 -0400
@@ -3134,7 +3134,7 @@ duplicate_decls (tree newdecl, tree oldd
 	{
 	  /* Prototype decl follows defn w/o prototype.  */
 	  cp_warning_at ("prototype for `%#D'", newdecl);
-	  cp_warning_at ("follows non-prototype definition here", olddecl);
+	  cp_warning_at ("%Hfollows non-prototype definition here", &DECL_SOURCE_LOCATION(olddecl));
 	}
       else if (TREE_CODE (olddecl) == FUNCTION_DECL
 	       && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
@@ -3191,8 +3191,8 @@ duplicate_decls (tree newdecl, tree oldd
 	    {
 	      warning ("`%#D' was used before it was declared inline",
 			  newdecl);
-	      cp_warning_at ("previous non-inline declaration here",
-			     olddecl);
+	      cp_warning_at ("%Hprevious non-inline declaration here",
+			     &DECL_SOURCE_LOCATION(olddecl));
 	    }
 	}
     }
@@ -3884,7 +3884,7 @@ pushdecl (tree x)
 	      && TREE_CODE (decl) == TREE_CODE (x)
 	      && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
 	    {
-	      pedwarn ("type mismatch with previous external decl", x);
+	      pedwarn ("type mismatch with previous external decl of `%#D'", x);
 	      cp_pedwarn_at ("previous external decl of `%#D'", decl);
 	    }
 	}
@@ -4921,7 +4921,7 @@ check_goto (tree decl)
 
       if (u > 1 && DECL_ARTIFICIAL (b))
 	/* Can't skip init of __exception_info.  */
-	cp_error_at ("  enters catch block", b);
+	cp_error_at ("%H  enters catch block", &DECL_SOURCE_LOCATION(b));
       else if (u > 1)
 	cp_error_at ("  skips initialization of `%#D'", b);
       else
@@ -6689,7 +6689,7 @@ fixup_anonymous_aggr (tree t)
 
   /* ISO C++ 9.5.3.  Anonymous unions may not have function members.  */
   if (TYPE_METHODS (t))
-    cp_error_at ("an anonymous union cannot have function members", t);
+    cp_error_at ("%Han anonymous union cannot have function members", &DECL_SOURCE_LOCATION(t));
 
   /* Anonymous aggregates cannot have fields with ctors, dtors or complex
      assignment operators (because they cannot have these methods themselves).
@@ -7390,7 +7390,7 @@ maybe_commonize_var (tree decl)
 	      TREE_PUBLIC (decl) = 0;
 	      DECL_COMMON (decl) = 0;
 	      cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
-	      cp_warning_at ("  you can work around this by removing the initializer", decl);
+	      cp_warning_at ("%H  you can work around this by removing the initializer", &DECL_SOURCE_LOCATION(decl));
 	    }
 	}
     }
@@ -11137,8 +11137,8 @@ grokdeclarator (tree declarator,
 	{
 	  decl = build_decl (TYPE_DECL, declarator, type);
 	  if (in_namespace || ctype)
-	    cp_error_at ("typedef name may not be a nested-name-specifier",
-			 decl);
+	    cp_error_at ("%Htypedef name may not be a nested-name-specifier",
+			 &DECL_SOURCE_LOCATION(decl));
 	  if (!current_function_decl)
 	    DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
 	}
@@ -11184,7 +11184,7 @@ grokdeclarator (tree declarator,
 	  if (ctype == NULL_TREE)
 	    {
 	      if (TREE_CODE (type) != METHOD_TYPE)
-		cp_error_at ("invalid type qualifier for non-member function type", decl);
+		cp_error_at ("%Hinvalid type qualifier for non-member function type", &DECL_SOURCE_LOCATION(decl));
 	      else
 		ctype = TYPE_METHOD_BASETYPE (type);
 	    }
@@ -13011,7 +13011,7 @@ start_enum (tree name)
   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
     {
       error ("multiple definition of `%#T'", enumtype);
-      cp_error_at ("previous definition here", enumtype);
+      cp_error_at ("%Hprevious definition here", &DECL_SOURCE_LOCATION(enumtype));
       /* Clear out TYPE_VALUES, and start again.  */
       TYPE_VALUES (enumtype) = NULL_TREE;
     }
diff -rup orig/egcc-CVS20030630/gcc/cp/decl2.c egcc-CVS20030630/gcc/cp/decl2.c
--- orig/egcc-CVS20030630/gcc/cp/decl2.c	2003-06-24 12:16:36.000000000 -0400
+++ egcc-CVS20030630/gcc/cp/decl2.c	2003-07-01 14:13:21.131843000 -0400
@@ -3643,8 +3643,8 @@ ambiguous_decl (tree name, cxx_binding *
       if (flags & LOOKUP_COMPLAIN)
         {
           error ("`%D' denotes an ambiguous type",name);
-          cp_error_at ("  first type here", BINDING_TYPE (old));
-          cp_error_at ("  other type here", type);
+          cp_error_at ("%H  first type here", &DECL_SOURCE_LOCATION(BINDING_TYPE (old)));
+          cp_error_at ("%H  other type here", &DECL_SOURCE_LOCATION(type));
         }
     }
   return old;
diff -rup orig/egcc-CVS20030630/gcc/cp/pt.c egcc-CVS20030630/gcc/cp/pt.c
--- orig/egcc-CVS20030630/gcc/cp/pt.c	2003-06-30 20:01:28.000000000 -0400
+++ egcc-CVS20030630/gcc/cp/pt.c	2003-07-01 14:13:21.181938000 -0400
@@ -2984,7 +2984,7 @@ redeclare_class_template (tree type, tre
 	     A template-parameter may not be given default arguments
 	     by two different declarations in the same scope.  */
 	  error ("redefinition of default argument for `%#D'", parm);
-	  cp_error_at ("  original definition appeared here", tmpl_parm);
+	  cp_error_at ("%H  original definition appeared here", &DECL_SOURCE_LOCATION(tmpl_parm));
 	  return;
 	}
 


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