Patch installed, avoid -Wtraditional warnings in system headers

Kaveh R. Ghazi ghazi@caip.rutgers.edu
Mon Aug 21 08:04:00 GMT 2000


We were inconsistent in our handling of -Wtraditional warnings as to
whether we warned in system headers.  (Some of it was my own fault.)

I installed this patch which makes it more regular.  Bootstrapped on
solaris2.7 and irix6.2.

		--Kaveh


Index: ChangeLog
===================================================================
RCS file: /cvs/gcc/egcs/gcc/ChangeLog,v
retrieving revision 1.7478
diff -u -p -r1.7478 ChangeLog
--- ChangeLog	2000/08/21 14:35:29	1.7478
+++ ChangeLog	2000/08/21 14:52:20
@@ -1,3 +1,13 @@
+2000-08-21  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+	* c-decl.c (duplicate_decls, define_label): Restrict -Wtraditional
+	warnings to user code.
+
+	* c-lex.c (readescape, yylex): Likewise.
+
+	* c-typeck.c (store_init_value, process_init_element): Likewise
+	(c_expand_start_case): Format.
+
 2000-08-18  Maciej W. Rozycki  <macro@ds2.pg.gda.pl>
 
 	* mips/linux.h (LINK_SPEC): Use %(endian_spec).
Index: c-decl.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/c-decl.c,v
retrieving revision 1.143
diff -u -p -r1.143 c-decl.c
--- c-decl.c	2000/08/21 14:30:37	1.143
+++ c-decl.c	2000/08/21 14:52:30
@@ -1760,7 +1760,7 @@ duplicate_decls (newdecl, olddecl, diffe
 
 	  /* If warn_traditional, warn when a non-static function
 	     declaration follows a static one.  */
-	  if (warn_traditional
+	  if (warn_traditional && !in_system_header
 	      && TREE_CODE (olddecl) == FUNCTION_DECL
 	      && !TREE_PUBLIC (olddecl)
 	      && TREE_PUBLIC (newdecl))
@@ -2751,7 +2751,7 @@ define_label (filename, line, name)
       decl = lookup_label (name);
     }
 
-  if (warn_traditional && lookup_name (name))
+  if (warn_traditional && !in_system_header && lookup_name (name))
     warning ("traditional C lacks a separate namespace for labels, identifier `%s' conflicts",
 	     IDENTIFIER_POINTER (name));
 
Index: c-lex.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/c-lex.c,v
retrieving revision 1.94
diff -u -p -r1.94 c-lex.c
--- c-lex.c	2000/08/10 15:21:17	1.94
+++ c-lex.c	2000/08/21 14:52:32
@@ -902,7 +902,7 @@ readescape (ignore_ptr)
   switch (c)
     {
     case 'x':
-      if (warn_traditional)
+      if (warn_traditional && !in_system_header)
 	warning ("the meaning of `\\x' varies with -traditional");
 
       if (flag_traditional)
@@ -987,7 +987,7 @@ readescape (ignore_ptr)
       return TARGET_BS;
 
     case 'a':
-      if (warn_traditional)
+      if (warn_traditional && !in_system_header)
 	warning ("the meaning of `\\a' varies with -traditional");
 
       if (flag_traditional)
@@ -1912,7 +1912,7 @@ yylex ()
 	    /* We assume that constants specified in a non-decimal
 	       base are bit patterns, and that the programmer really
 	       meant what they wrote.  */
-	    if (warn_traditional && base == 10
+	    if (warn_traditional && !in_system_header && base == 10
 		&& traditional_type != ansi_type)
 	      {
 		if (TYPE_PRECISION (traditional_type)
Index: c-typeck.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/c-typeck.c,v
retrieving revision 1.83
diff -u -p -r1.83 c-typeck.c
--- c-typeck.c	2000/08/13 21:31:09	1.83
+++ c-typeck.c	2000/08/21 14:52:39
@@ -4396,7 +4396,7 @@ store_init_value (decl, init)
     }
 #endif
 
-  if (warn_traditional
+  if (warn_traditional && !in_system_header
       && AGGREGATE_TYPE_P (TREE_TYPE (decl)) && ! TREE_STATIC (decl))
     warning ("traditional C rejects automatic aggregate initialization");
 
@@ -6400,7 +6400,7 @@ process_init_element (value)
 	     code appears conditioned on e.g. __STDC__ to avoid
 	     "missing initializer" warnings and relies on default
 	     initialization to zero in the traditional C case.  */
-	  if (warn_traditional && !integer_zerop (value))
+	  if (warn_traditional && !in_system_header && !integer_zerop (value))
 	    warning ("traditional C rejects initialization of unions");
 
 	  /* Accept a string constant to initialize a subarray.  */
@@ -6739,8 +6739,7 @@ c_expand_start_case (exp)
       tree index;
       type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
 
-      if (warn_traditional
-	  && ! in_system_header
+      if (warn_traditional && !in_system_header
 	  && (type == long_integer_type_node
 	      || type == long_unsigned_type_node))
 	warning ("`long' switch expression not converted to `int' in ISO C");


More information about the Gcc-patches mailing list