2
0
mirror of git://gcc.gnu.org/git/gcc.git synced 2025-04-09 15:31:07 +08:00

re PR preprocessor/28435 (-MMD vs not found system header (included from a system header))

[libcpp/ChangeLog]
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.

From-SVN: r151879
This commit is contained in:
Chris Demetriou 2009-09-18 23:15:21 -07:00 committed by Chris Demetriou
parent b5e7280daa
commit 74dc6a1190
10 changed files with 70 additions and 6 deletions

@ -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>,

@ -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;

@ -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

@ -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 } */

@ -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 } */

@ -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 } */

@ -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 } */

@ -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*

@ -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);
}
}

@ -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. */