OSDN Git Service

[libcpp/ChangeLog]
authorcgd <cgd@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 19 Sep 2009 06:15:21 +0000 (06:15 +0000)
committercgd <cgd@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 19 Sep 2009 06:15:21 +0000 (06:15 +0000)
2009-09-18  Chris Demetriou  <cgd@google.com>

PR preprocessor/28435:
* include/cpplib.h (struct cpp_options): Add new member
deps.need_preprocessor_output.
* files.c (open_file_failed): If preprocessor output is needed
always report an error.

[gcc/ChangeLog]
2009-09-19  Chris Demetriou  <cgd@google.com>

PR preprocessor/28435:
* c-opts.c (c_common_handle_option): For -MD and -MMD, indicate
to cpplib that the preprocessor output is needed.

[gcc/testsuite/ChangeLog]
2009-09-19  Chris Demetriou  <cgd@google.com>

PR preprocessor/28435:
* gcc.dg/cpp/missing-header-MD.c: New test.
* gcc.dg/cpp/missing-header-MMD.c: New test.
* gcc.dg/cpp/missing-sysheader-MD.c: New test.
* gcc.dg/cpp/missing-sysheader-MMD.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@151879 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/c-opts.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/cpp/missing-header-MD.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/cpp/missing-header-MMD.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/cpp/missing-sysheader-MD.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/cpp/missing-sysheader-MMD.c [new file with mode: 0644]
libcpp/ChangeLog
libcpp/files.c
libcpp/include/cpplib.h

index 2d7182e..27f877f 100644 (file)
@@ -1,3 +1,9 @@
+2009-09-19  Chris Demetriou  <cgd@google.com>
+
+       PR preprocessor/28435:
+       * c-opts.c (c_common_handle_option): For -MD and -MMD, indicate
+       to cpplib that the preprocessor output is needed.
+
 2009-09-19  Jakub Jelinek  <jakub@redhat.com>
 
        * config/rs6000/rs6000.md (*save_gpregs_<mode>, *save_fpregs_<mode>,
index 3b9b34b..d9165aa 100644 (file)
@@ -343,6 +343,7 @@ c_common_handle_option (size_t scode, const char *arg, int value)
     case OPT_MD:
     case OPT_MMD:
       cpp_opts->deps.style = (code == OPT_MD ? DEPS_SYSTEM: DEPS_USER);
+      cpp_opts->deps.need_preprocessor_output = true;
       deps_file = arg;
       break;
 
index ed29399..301dfbb 100644 (file)
@@ -1,3 +1,11 @@
+2009-09-19  Chris Demetriou  <cgd@google.com>
+
+       PR preprocessor/28435:
+       * gcc.dg/cpp/missing-header-MD.c: New test.
+       * gcc.dg/cpp/missing-header-MMD.c: New test.
+       * gcc.dg/cpp/missing-sysheader-MD.c: New test.
+       * gcc.dg/cpp/missing-sysheader-MMD.c: New test.
+
 2009-09-18  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR libgfortran/41328
diff --git a/gcc/testsuite/gcc.dg/cpp/missing-header-MD.c b/gcc/testsuite/gcc.dg/cpp/missing-header-MD.c
new file mode 100644 (file)
index 0000000..1983525
--- /dev/null
@@ -0,0 +1,6 @@
+/* Test that missing user headers are fatal errors with -MD.  */
+/* { dg-do compile } */
+/* { dg-options "-MD" } */
+
+#include "nonexistent.h" /* { dg-error "nonexistent.h" } */
+/* { dg-message "terminated" "" { target *-*-* } 0 } */
diff --git a/gcc/testsuite/gcc.dg/cpp/missing-header-MMD.c b/gcc/testsuite/gcc.dg/cpp/missing-header-MMD.c
new file mode 100644 (file)
index 0000000..aff8d39
--- /dev/null
@@ -0,0 +1,6 @@
+/* Test that missing user headers are fatal errors with -MMD.  */
+/* { dg-do compile } */
+/* { dg-options "-MMD" } */
+
+#include "nonexistent.h" /* { dg-error "nonexistent.h" } */
+/* { dg-message "terminated" "" { target *-*-* } 0 } */
diff --git a/gcc/testsuite/gcc.dg/cpp/missing-sysheader-MD.c b/gcc/testsuite/gcc.dg/cpp/missing-sysheader-MD.c
new file mode 100644 (file)
index 0000000..bf255a4
--- /dev/null
@@ -0,0 +1,6 @@
+/* Test that missing system headers are fatal errors with -MD.  */
+/* { dg-do compile } */
+/* { dg-options "-MD" } */
+
+#include <nonexistent.h> /* { dg-error "nonexistent.h" } */
+/* { dg-message "terminated" "" { target *-*-* } 0 } */
diff --git a/gcc/testsuite/gcc.dg/cpp/missing-sysheader-MMD.c b/gcc/testsuite/gcc.dg/cpp/missing-sysheader-MMD.c
new file mode 100644 (file)
index 0000000..10cd870
--- /dev/null
@@ -0,0 +1,6 @@
+/* Test that missing system headers are fatal errors with -MMD.  */
+/* { dg-do compile } */
+/* { dg-options "-MMD" } */
+
+#include <nonexistent.h> /* { dg-error "nonexistent.h" } */
+/* { dg-message "terminated" "" { target *-*-* } 0 } */
index 5d27822..6b257d2 100644 (file)
@@ -1,3 +1,11 @@
+2009-09-18  Chris Demetriou  <cgd@google.com>
+
+       PR preprocessor/28435:
+       * include/cpplib.h (struct cpp_options): Add new member
+       deps.need_preprocessor_output.
+       * files.c (open_file_failed): If preprocessor output is needed
+       always report an error.
+
 2009-09-13  Kai Tietz  <kai.tietz@onevision.com>
 
        * configure.ac: Set for i?86-w64-mingw*
index 69aa789..96ba7e8 100644 (file)
@@ -935,15 +935,28 @@ open_file_failed (cpp_reader *pfile, _cpp_file *file, int angle_brackets)
 
   errno = file->err_no;
   if (print_dep && CPP_OPTION (pfile, deps.missing_files) && errno == ENOENT)
-    deps_add_dep (pfile->deps, file->name);
+    {
+      deps_add_dep (pfile->deps, file->name);
+      /* If the preprocessor output (other than dependency information) is
+         being used, we must also flag an error.  */
+      if (CPP_OPTION (pfile, deps.need_preprocessor_output))
+       cpp_errno (pfile, CPP_DL_FATAL, file->path);
+    }
   else
     {
-      /* If we are outputting dependencies but not for this file then
-        don't error because we can still produce correct output.  */
-      if (CPP_OPTION (pfile, deps.style) && ! print_dep)
-       cpp_errno (pfile, CPP_DL_WARNING, file->path);
-      else
+      /* If we are not outputting dependencies, or if we are and dependencies
+         were requested for this file, or if preprocessor output is needed
+         in addition to dependency information, this is an error.
+
+         Otherwise (outputting dependencies but not for this file, and not
+         using the preprocessor output), we can still produce correct output
+         so it's only a warning.  */
+      if (CPP_OPTION (pfile, deps.style) == DEPS_NONE
+          || print_dep
+          || CPP_OPTION (pfile, deps.need_preprocessor_output))
        cpp_errno (pfile, CPP_DL_FATAL, file->path);
+      else
+       cpp_errno (pfile, CPP_DL_WARNING, file->path);
     }
 }
 
index e873ccf..df04668 100644 (file)
@@ -433,6 +433,10 @@ struct cpp_options
 
     /* If true, no dependency is generated on the main file.  */
     bool ignore_main_file;
+
+    /* If true, intend to use the preprocessor output (e.g., for compilation)
+       in addition to the dependency info.  */
+    bool need_preprocessor_output;
   } deps;
 
   /* Target-specific features set by the front end or client.  */