re PR preprocessor/15638 (gcc should have option to treat missing headers as fatal)

PR preprocessor/15638
gcc:
	* c-common.c (c_cpp_error): Handle CPP_DL_FATAL.

gcc/fortran:
	* cpp.c (cb_cpp_error): Handle CPP_DL_FATAL.

gcc/testsuite:
	* gcc.dg/cpp/missing-header-1.c: New test.
	* gcc.dg/cpp/include2.c: Only test #include <>.  Expect
	"compilation terminated" message.
	* gcc.dg/cpp/include2a.c: New test.  Copy of include2.c but only
	test #include "".
	* gcc.dg/pch/counter-2.c, gcc.dg/pch/valid-1.c,
	gcc.dg/pch/valid-2.c, gcc.dg/pch/warn-1.c: Expect "compilation
	terminated" message.

libcpp:
	* files.c (_cpp_find_file): Call open_file_failed after diagnosing
	invalid PCH.
	(open_file_failed): Make error for missing file fatal.
	* include/cpplib.h (CPP_DL_FATAL): Define.

From-SVN: r145341
This commit is contained in:
Joseph Myers 2009-03-31 13:43:29 +01:00 committed by Joseph Myers
parent ba4d8f9d37
commit 47580d22b2
15 changed files with 71 additions and 5 deletions

View File

@ -1,3 +1,8 @@
2009-03-31 Joseph Myers <joseph@codesourcery.com>
PR preprocessor/15638
* c-common.c (c_cpp_error): Handle CPP_DL_FATAL.
2009-03-31 Richard Guenther <rguenther@suse.de> 2009-03-31 Richard Guenther <rguenther@suse.de>
PR middle-end/23401 PR middle-end/23401

View File

@ -8009,6 +8009,9 @@ c_cpp_error (cpp_reader *pfile ATTRIBUTE_UNUSED, int level,
case CPP_DL_NOTE: case CPP_DL_NOTE:
dlevel = DK_NOTE; dlevel = DK_NOTE;
break; break;
case CPP_DL_FATAL:
dlevel = DK_FATAL;
break;
default: default:
gcc_unreachable (); gcc_unreachable ();
} }

View File

@ -1,3 +1,8 @@
2009-03-31 Joseph Myers <joseph@codesourcery.com>
PR preprocessor/15638
* cpp.c (cb_cpp_error): Handle CPP_DL_FATAL.
2009-03-30 Steven G. Kargl <kargls@comcast.net> 2009-03-30 Steven G. Kargl <kargls@comcast.net>
PR fortran/38389 PR fortran/38389

View File

@ -997,6 +997,9 @@ cb_cpp_error (cpp_reader *pfile ATTRIBUTE_UNUSED, int level,
case CPP_DL_NOTE: case CPP_DL_NOTE:
dlevel = DK_NOTE; dlevel = DK_NOTE;
break; break;
case CPP_DL_FATAL:
dlevel = DK_FATAL;
break;
default: default:
gcc_unreachable (); gcc_unreachable ();
} }

View File

@ -1,3 +1,15 @@
2009-03-31 Joseph Myers <joseph@codesourcery.com>
PR preprocessor/15638
* gcc.dg/cpp/missing-header-1.c: New test.
* gcc.dg/cpp/include2.c: Only test #include <>. Expect
"compilation terminated" message.
* gcc.dg/cpp/include2a.c: New test. Copy of include2.c but only
test #include "".
* gcc.dg/pch/counter-2.c, gcc.dg/pch/valid-1.c,
gcc.dg/pch/valid-2.c, gcc.dg/pch/warn-1.c: Expect "compilation
terminated" message.
2009-03-31 Richard Guenther <rguenther@suse.de> 2009-03-31 Richard Guenther <rguenther@suse.de>
PR middle-end/23401 PR middle-end/23401

View File

@ -8,9 +8,8 @@
/* Source: Neil Booth, 4 Nov 2000. */ /* Source: Neil Booth, 4 Nov 2000. */
#include <silly\>> /* { dg-error "extra tokens" "" } */ #include <silly\>> /* { dg-error "extra tokens" "" } */
#include "silly\"" /* { dg-error "extra tokens" "" } */
/* These error is No such file or directory, just once. However, this /* These error is No such file or directory, just once. However, this
message is locale-dependent, so don't test for it. */ message is locale-dependent, so don't test for it. */
/* { dg-error "silly" "" { target *-*-* } 10 } */ /* { dg-error "silly" "" { target *-*-* } 10 } */
/* { dg-error "missing" "" { target *-*-* } 11 } */ /* { dg-message "terminated" "" { target *-*-* } 0 } */

View File

@ -0,0 +1,16 @@
/* Copyright (C) 2000 Free Software Foundation, Inc. */
/* { dg-do preprocess } */
/* Tests that #include does not allow the terminating '>' or '"' to be
escaped, as per the standard. */
/* Source: Neil Booth, 4 Nov 2000. */
#include "silly\"" /* { dg-error "extra tokens" "" } */
/* These error is No such file or directory, just once. However, this
message is locale-dependent, so don't test for it. */
/* { dg-error "silly" "" { target *-*-* } 10 } */
/* { dg-error "missing" "" { target *-*-* } 10 } */
/* { dg-message "terminated" "" { target *-*-* } 0 } */

View File

@ -0,0 +1,9 @@
/* Test that missing headers are fatal errors. PR 15638. */
/* { dg-do compile } */
/* { dg-options "" } */
#include "nonexistent.h" /* { dg-error "nonexistent.h" } */
/* { dg-message "terminated" "" { target *-*-* } 0 } */
/* This declaration should not receive any diagnostic. */
foo bar;

View File

@ -10,6 +10,7 @@
#include "counter-2.h" /* { dg-warning "not used because `__COUNTER__' is invalid" } */ #include "counter-2.h" /* { dg-warning "not used because `__COUNTER__' is invalid" } */
/* { dg-error "counter-2.h: No such file or directory" "no such file" { target *-*-* } 10 } */ /* { dg-error "counter-2.h: No such file or directory" "no such file" { target *-*-* } 10 } */
/* { dg-error "one or more PCH files were found, but they were invalid" "invalid files" { target *-*-* } 10 } */ /* { dg-error "one or more PCH files were found, but they were invalid" "invalid files" { target *-*-* } 10 } */
/* { dg-message "terminated" "" { target *-*-* } 0 } */
int main(void) int main(void)
{ {

View File

@ -3,5 +3,6 @@
#include "valid-1.h"/* { dg-warning "created with -gnone, but used with -g" } */ #include "valid-1.h"/* { dg-warning "created with -gnone, but used with -g" } */
/* { dg-error "No such file" "no such file" { target *-*-* } 3 } */ /* { dg-error "No such file" "no such file" { target *-*-* } 3 } */
/* { dg-error "they were invalid" "invalid files" { target *-*-* } 3 } */ /* { dg-error "they were invalid" "invalid files" { target *-*-* } 3 } */
/* { dg-message "terminated" "" { target *-*-* } 0 } */
int x; int x;

View File

@ -3,4 +3,5 @@
#include "valid-2.h" /* { dg-warning "settings for -fexceptions do not match" } */ #include "valid-2.h" /* { dg-warning "settings for -fexceptions do not match" } */
/* { dg-error "No such file" "no such file" { target *-*-* } 3 } */ /* { dg-error "No such file" "no such file" { target *-*-* } 3 } */
/* { dg-error "they were invalid" "invalid files" { target *-*-* } 3 } */ /* { dg-error "they were invalid" "invalid files" { target *-*-* } 3 } */
/* { dg-message "terminated" "" { target *-*-* } 0 } */
int x; int x;

View File

@ -5,6 +5,7 @@
#include "warn-1.h"/* { dg-warning "not used because .DEFINED_VALUE. is defined" } */ #include "warn-1.h"/* { dg-warning "not used because .DEFINED_VALUE. is defined" } */
/* { dg-error "No such file" "no such file" { target *-*-* } 5 } */ /* { dg-error "No such file" "no such file" { target *-*-* } 5 } */
/* { dg-error "they were invalid" "invalid files" { target *-*-* } 5 } */ /* { dg-error "they were invalid" "invalid files" { target *-*-* } 5 } */
/* { dg-message "terminated" "" { target *-*-* } 0 } */
int main(void) int main(void)

View File

@ -1,3 +1,11 @@
2009-03-31 Joseph Myers <joseph@codesourcery.com>
PR preprocessor/15638
* files.c (_cpp_find_file): Call open_file_failed after diagnosing
invalid PCH.
(open_file_failed): Make error for missing file fatal.
* include/cpplib.h (CPP_DL_FATAL): Define.
2009-03-30 Sergiy Vyshnevetskiy <serg@vostok.net> 2009-03-30 Sergiy Vyshnevetskiy <serg@vostok.net>
PR preprocessor/31932: PR preprocessor/31932:

View File

@ -1,6 +1,6 @@
/* Part of CPP library. File handling. /* Part of CPP library. File handling.
Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1998, Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
Free Software Foundation, Inc. Free Software Foundation, Inc.
Written by Per Bothner, 1994. Written by Per Bothner, 1994.
Based on CCCP program by Paul Rubin, June 1986 Based on CCCP program by Paul Rubin, June 1986
@ -488,7 +488,6 @@ _cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir, bool f
return file; return file;
} }
open_file_failed (pfile, file, angle_brackets);
if (invalid_pch) if (invalid_pch)
{ {
cpp_error (pfile, CPP_DL_ERROR, cpp_error (pfile, CPP_DL_ERROR,
@ -497,6 +496,7 @@ _cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir, bool f
cpp_error (pfile, CPP_DL_ERROR, cpp_error (pfile, CPP_DL_ERROR,
"use -Winvalid-pch for more information"); "use -Winvalid-pch for more information");
} }
open_file_failed (pfile, file, angle_brackets);
break; break;
} }
@ -942,7 +942,7 @@ open_file_failed (cpp_reader *pfile, _cpp_file *file, int angle_brackets)
if (CPP_OPTION (pfile, deps.style) && ! print_dep) if (CPP_OPTION (pfile, deps.style) && ! print_dep)
cpp_errno (pfile, CPP_DL_WARNING, file->path); cpp_errno (pfile, CPP_DL_WARNING, file->path);
else else
cpp_errno (pfile, CPP_DL_ERROR, file->path); cpp_errno (pfile, CPP_DL_FATAL, file->path);
} }
} }

View File

@ -813,6 +813,8 @@ cpp_num cpp_num_sign_extend (cpp_num, size_t);
#define CPP_DL_ICE 0x04 #define CPP_DL_ICE 0x04
/* An informative note following a warning. */ /* An informative note following a warning. */
#define CPP_DL_NOTE 0x05 #define CPP_DL_NOTE 0x05
/* A fatal error. */
#define CPP_DL_FATAL 0x06
/* Output a diagnostic of some kind. */ /* Output a diagnostic of some kind. */
extern bool cpp_error (cpp_reader *, int, const char *msgid, ...) extern bool cpp_error (cpp_reader *, int, const char *msgid, ...)