re PR preprocessor/15638 (gcc should have option to treat missing headers as fatal)
authorJoseph Myers <joseph@codesourcery.com>
Tue, 31 Mar 2009 12:43:29 +0000 (13:43 +0100)
committerJoseph Myers <jsm28@gcc.gnu.org>
Tue, 31 Mar 2009 12:43:29 +0000 (13:43 +0100)
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

15 files changed:
gcc/ChangeLog
gcc/c-common.c
gcc/fortran/ChangeLog
gcc/fortran/cpp.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/cpp/include2.c
gcc/testsuite/gcc.dg/cpp/include2a.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/cpp/missing-header-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pch/counter-2.c
gcc/testsuite/gcc.dg/pch/valid-1.c
gcc/testsuite/gcc.dg/pch/valid-2.c
gcc/testsuite/gcc.dg/pch/warn-1.c
libcpp/ChangeLog
libcpp/files.c
libcpp/include/cpplib.h

index 15a8228c6cf9623715828fcfd893f3324a0e2a6e..1b75a51425fdc2b13e9f8ffaedeb381a85c5b670 100644 (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>
 
        PR middle-end/23401
index b1ac9bc98161699212da4e921e7d934346e10538..f0c312244b29d07da722e31f353efdfd0c71d6d2 100644 (file)
@@ -8009,6 +8009,9 @@ c_cpp_error (cpp_reader *pfile ATTRIBUTE_UNUSED, int level,
     case CPP_DL_NOTE:
       dlevel = DK_NOTE;
       break;
+    case CPP_DL_FATAL:
+      dlevel = DK_FATAL;
+      break;
     default:
       gcc_unreachable ();
     }
index 09c6961c48be73123a10c77baec799888543dd24..c7ed02d34ecaf7825ceb9353c3fe0454d1888ca7 100644 (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>
 
        PR fortran/38389
index fc78f9826a2d7b45b20c38418d7080f839e971c9..9187bed7efeabb246f693dd825b8c1ffba818b56 100644 (file)
@@ -997,6 +997,9 @@ cb_cpp_error (cpp_reader *pfile ATTRIBUTE_UNUSED, int level,
     case CPP_DL_NOTE:
       dlevel = DK_NOTE;
       break;
+    case CPP_DL_FATAL:
+      dlevel = DK_FATAL;
+      break;
     default:
       gcc_unreachable ();
     }
index c21f1074cfb62750a4c0f8b28b0ed4e0d4888708..3593c7d538b5a59e9b1784e9afabe5b4c2dae2ec 100644 (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>
 
        PR middle-end/23401
index cda818ed5af30aec7a8ca0c12a9c3eae85be6a8e..67f1065ae8c609f0128f4debc99ed2072feafc6a 100644 (file)
@@ -8,9 +8,8 @@
 /* Source: Neil Booth, 4 Nov 2000.  */
 
 #include <silly\>>  /* { dg-error "extra tokens" "" } */
-#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 *-*-* } 11 } */
+/* { dg-message "terminated" "" { target *-*-* } 0 } */
diff --git a/gcc/testsuite/gcc.dg/cpp/include2a.c b/gcc/testsuite/gcc.dg/cpp/include2a.c
new file mode 100644 (file)
index 0000000..974f3f3
--- /dev/null
@@ -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 } */
diff --git a/gcc/testsuite/gcc.dg/cpp/missing-header-1.c b/gcc/testsuite/gcc.dg/cpp/missing-header-1.c
new file mode 100644 (file)
index 0000000..5445d4c
--- /dev/null
@@ -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;
index 22ba245b698910689e33e7e143b62f922385cea7..6dd2245d7d84adc6bc0ab71cadc1e887f8aa048d 100644 (file)
@@ -10,6 +10,7 @@
 #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 "one or more PCH files were found, but they were invalid" "invalid files" { target *-*-* } 10 } */
+/* { dg-message "terminated" "" { target *-*-* } 0 } */
 
 int main(void) 
 {
index 1bf7d914467e25f0a34432c8aa329efe2282d6ae..3ee909165914bc377b39c7a1e54d1f487b093638 100644 (file)
@@ -3,5 +3,6 @@
 #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 "they were invalid" "invalid files" { target *-*-* } 3 } */
+/* { dg-message "terminated" "" { target *-*-* } 0 } */
 
 int x;
index 4dbc4b2d37d91f34eb91aa9326fecdce5de0909e..34269a87960e5521dae7339a85284d44d747f48f 100644 (file)
@@ -3,4 +3,5 @@
 #include "valid-2.h" /* { dg-warning "settings for -fexceptions do not match" } */
 /* { dg-error "No such file" "no such file" { target *-*-* } 3 } */
 /* { dg-error "they were invalid" "invalid files" { target *-*-* } 3 } */
+/* { dg-message "terminated" "" { target *-*-* } 0 } */
 int x;
index eaa9cafc39a282a385d6f0dadabdd0360445c2f9..64944c776d874a4a08507352d3005449e9cd577c 100644 (file)
@@ -5,6 +5,7 @@
 #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 "they were invalid" "invalid files" { target *-*-* } 5 } */
+/* { dg-message "terminated" "" { target *-*-* } 0 } */
 
 
 int main(void) 
index b2f4232f81d44fefe2c442132c12648e2e69d54e..e16a9e45ca966ae9920b221471be4ec718aa135e 100644 (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>
 
        PR preprocessor/31932:
index 007fce77d53f183d1d212057ddc0918e25f88df3..f9e68983a4d839e48f549850a00d3a053c8c55c1 100644 (file)
@@ -1,6 +1,6 @@
 /* Part of CPP library.  File handling.
    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.
    Written by Per Bothner, 1994.
    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;
            }
 
-         open_file_failed (pfile, file, angle_brackets);
          if (invalid_pch)
            {
              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,
                           "use -Winvalid-pch for more information");
            }
+         open_file_failed (pfile, file, angle_brackets);
          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)
        cpp_errno (pfile, CPP_DL_WARNING, file->path);
       else
-       cpp_errno (pfile, CPP_DL_ERROR, file->path);
+       cpp_errno (pfile, CPP_DL_FATAL, file->path);
     }
 }
 
index ffde40eef1a3b10920ee2651c4385d97e8f39f30..adc6cf13ede78dd7948224477bbfae9947ad1937 100644 (file)
@@ -813,6 +813,8 @@ cpp_num cpp_num_sign_extend (cpp_num, size_t);
 #define CPP_DL_ICE             0x04
 /* An informative note following a warning.  */
 #define CPP_DL_NOTE            0x05
+/* A fatal error.  */
+#define CPP_DL_FATAL           0x06
 
 /* Output a diagnostic of some kind.  */
 extern bool cpp_error (cpp_reader *, int, const char *msgid, ...)