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: preprocessor/7029: preprocessor should ignore #warning with -M


Neil Booth wrote:-

> > Well, I think it might be reasonable for -M switches that inhibit
> > compilation to imply -w.  Presumably the user will get all the
> > warnings in due course as part of the real compilation.
> 
> Fair enough; I'll create a patch.

Here it is.  I'll apply it after a successful bootstrap.  I took
the opportunity to clarify some comments and move output
suppression to what I think is a better place than the option handler.

Neil.

	* cppinit.c (cpp_handle_option): Move suppression of output
	for -M and -MM to...
	(cpp_post_options): ...here.  If we're outputting dependencies,
	suppress warnings with an implicit "-w".
doc:
	* cppopts.texi: Update.
testsuite:
	* gcc.dg/cpp/cmdlne-M.c: New test.

Index: cppinit.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cppinit.c,v
retrieving revision 1.242
diff -u -p -r1.242 cppinit.c
--- cppinit.c	19 Jun 2002 05:40:04 -0000	1.242
+++ cppinit.c	1 Jul 2002 21:44:46 -0000
@@ -1531,11 +1531,9 @@ cpp_handle_option (pfile, argc, argv)
 	     depends on this.  Preprocessed output occurs if -MD, -MMD
 	     or environment var dependency generation is used.  */
 	  CPP_OPTION (pfile, print_deps) = 2;
-	  CPP_OPTION (pfile, no_output) = 1;
 	  break;
 	case OPT_MM:
 	  CPP_OPTION (pfile, print_deps) = 1;
-	  CPP_OPTION (pfile, no_output) = 1;
 	  break;
 	case OPT_MF:
 	  CPP_OPTION (pfile, deps_file) = arg;
@@ -1794,14 +1792,14 @@ cpp_post_options (pfile)
   if (CPP_OPTION (pfile, traditional))
     CPP_OPTION (pfile, show_column) = 0;
 
-  /* -dM makes no normal output.  This is set here so that -dM -dD
-     works as expected.  */
-  if (CPP_OPTION (pfile, dump_macros) == dump_only)
+  /* -dM and dependencies suppress normal output; do it here so that
+     the last -d[MDN] switch overrides earlier ones.  */
+  if (CPP_OPTION (pfile, dump_macros) == dump_only
+      || CPP_OPTION (pfile, print_deps))
     CPP_OPTION (pfile, no_output) = 1;
 
-  /* Disable -dD, -dN and -dI if we should make no normal output
-     (such as with -M). Allow -M -dM since some software relies on
-     this.  */
+  /* Disable -dD, -dN and -dI if normal output is suppressed.  Allow
+     -dM since at least glibc relies on -M -dM to work.  */
   if (CPP_OPTION (pfile, no_output))
     {
       if (CPP_OPTION (pfile, dump_macros) != dump_only)
@@ -1809,17 +1807,17 @@ cpp_post_options (pfile)
       CPP_OPTION (pfile, dump_includes) = 0;
     }
 
-  /* We need to do this after option processing and before
-     cpp_start_read, as cppmain.c relies on the options->no_output to
-     set its callbacks correctly before calling cpp_start_read.  */
+  /* Intialize, and check environment variables for, dependency
+     output.  */
   init_dependency_output (pfile);
 
-  /* After checking the environment variables, check if -M or -MM has
-     not been specified, but other -M options have.  */
-  if (CPP_OPTION (pfile, print_deps) == 0 &&
-      (CPP_OPTION (pfile, print_deps_missing_files)
-       || CPP_OPTION (pfile, deps_file)
-       || CPP_OPTION (pfile, deps_phony_targets)))
+  /* If we're outputting dependencies then inhibit warnings, otherwise
+     complain if other -M options have been given.  */
+  if (CPP_OPTION (pfile, print_deps))
+    CPP_OPTION (pfile, inhibit_warnings) = 1;
+  else if (CPP_OPTION (pfile, print_deps_missing_files)
+	   || CPP_OPTION (pfile, deps_file)
+	   || CPP_OPTION (pfile, deps_phony_targets))
     cpp_error (pfile, DL_ERROR,
 	       "you must additionally specify either -M or -MM");
 }
Index: testsuite/gcc.dg/cpp/cmdlne-M.c
===================================================================
RCS file: testsuite/gcc.dg/cpp/cmdlne-M.c
diff -N testsuite/gcc.dg/cpp/cmdlne-M.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ testsuite/gcc.dg/cpp/cmdlne-M.c	1 Jul 2002 21:44:46 -0000
@@ -0,0 +1,8 @@
+/* Copyright (C) 2002 Free Software Foundation, Inc.  */
+
+/* { dg-do preprocess } */
+/* { dg-options "-M" } */
+
+/* Test that dependency output suppresses warnings by implying -w.  */
+
+#warning bogus /* { dg-bogus "warning" "warning not suppressed" } */
Index: doc/cppopts.texi
===================================================================
RCS file: /cvs/gcc/gcc/gcc/doc/cppopts.texi,v
retrieving revision 1.6
diff -u -p -r1.6 cppopts.texi
--- doc/cppopts.texi	8 May 2002 21:21:19 -0000	1.6
+++ doc/cppopts.texi	1 Jul 2002 21:44:46 -0000
@@ -178,7 +178,8 @@ rules you should explicitly specify the 
 @env{DEPENDENCIES_OUTPUT} (@pxref{Environment Variables}).  Debug output
 will still be sent to the regular output stream as normal.
 
-Passing @option{-M} to the driver implies @option{-E}.
+Passing @option{-M} to the driver implies @option{-E}, and suppresses
+warnings with an implicit @option{-w}.
 
 @item -MM
 @opindex MM


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